回到索引
系统层面:
- 高可用性
所谓高可用性也就是通过避免单独故障加上快速故障转移实现一旦某台物理服务器出现故障能实现故障快速恢复。一般来说,可以采用两种方式,如果可以做业务可以做负载均衡则通过负载均衡实现集群,然后针对每一台服务器进行监控,一旦发生故障则从集群中移除;如果业务只能有单点入口那么可以通过实现Standby机加上虚拟IP机制,实现Active机在出现故障之后虚拟IP转移到Standby的快速故障转移。一般可以使用KeepAlived或HeartBeat实现高可用(当然,硬件手段实现也可以,这里不展开讨论)。
- 高伸缩性
所谓高伸缩性也就是横向伸缩性,通过扩展机器数量而不是增加机器配置来实现系统处理能力的扩容。负载均衡就是典型的高伸缩性的架构,此外还可以把业务进行拆分由不同的服务器实现不同的业务也是一种伸缩性的方案。一般来说对于没有状态的Web服务比较容易实现负载均衡,而数据库层面,特别是数据库的写操作比较难以实现横向伸缩。一般可以使用LVS或HAPROXY实现负载均衡(当然,硬件手段实现也可以,这里不展开讨论)。
- 反向代理
对于网站前端一般会使用反向代理来为服务器实现缓存和负载均衡的工作。这个缓存不同数据缓存,是把用于输出的HTML或HTML片段进行内存或磁盘的缓存,以减少Web服务器的压力。一般可以使用SQUID或VARNISH实现反向代理。
- CDN
为了进一步增加网站页面的访问速度,可以为静态资源、图片甚至动态资源进行CDN。CDN供应商在全国的骨干节点都设有服务器,可以让全国各地的用户都可以高速访问到这些静态资源,当然静态资源第一次访问是需要通过我们的静态资源服务器的,之后就会在CDN的服务器上进行一段时间的缓存。CDN不但可以加速客户端的访问速度还可以减少服务器的压力。如果网站的页面又实现了CDN,又通过反向代理缓存,那么更新起来就会比较麻烦,因为这样的话可能会在客户端、CDN服务端以及反向代理端都有缓存,此时需要通过一些工具来判断到底是哪个环节有缓存。
- 操作系统参数
在拿到服务器之后,操作系统的配置可能是默认的,此时应该检查操作系统是否修改了诸如TCP连接数量、最大文件句柄数量等系统参数,避免因为操作系统的限制不能发挥程序的最佳性能。
- 服务器优化
不管是诸如Nginx或Apache的Web服务器还是诸如Tomcat或JBoss的Java服务器,都有一些参数设置,需要根据服务器的配置结合网上的一些最佳实践进行一些参数的修改,往往默认配置是不适合配置比较高的服务器的。比如,Java是一种基于垃圾回收的语言,过大的堆可能会导致垃圾回收的时间过长,因此往往会针对大内存的服务器配置多个32bit的JVM而不是统一使用一个64bit的JVM并分配16GB以上的内存给它。我们需要明白服务器中相关参数的意义,有理有据进行参数设置。