“高可用性”(High Availability) 通常用来描述一个系统,经过特殊设计,减少停止服务的时间,从而使其服务保持高度的可使用性。
计算机系统的可靠性用平均无故障时间(MTTF)来度量,即计算机系统平均能够正常运行多长时间,才会发生一次故障。系统的可靠性能越高,平均无故障时间越长。可维护性用平均维修时间(MTTR)来度量,即系统发生故障后维修和重新恢复正常运行平均花费时间。系统的可维护性越好,平均维修时间越短。计算机系统的可用性定义为:MTTF/(MTTF+MTTR)*100%。
举例来说,淘宝网在2010年成交额为300亿,则每分钟成交额为5—10万,那么对淘宝来说,其后台系统的高可用,对企业运营非常重要。淘宝数据负责人宁海元指出,淘宝系统,可用性至少需要99.999%。那么对于taobao.com系统,在一年365天,系统停止服务时间为5分15秒。
1.2 确保高可用性高可用性的衡量指标
%availability=(TotalElapsed Time – Sum of Inoperative Times) / Total Elapsed Time
其中:
TotalElapsed Time 为系统总时间,包括可提供服务时间+停止服务时间。
Sumof Inoperative Times 为停止服务时间,包括宕机时间+维护时间。
1.2.1 如何确保高可用可用性越高越好,提高可用性主要从一下几个方面入手:
(1)系统架构
(2)容灾性
(3)监控报警
(4)故障转移
1.2.1.1 系统架构系统架构,指整个网站后台系统的架构。好的系统架构,主要从下面几个方面考虑:
(1)操作系统的选择,从稳定性、安全性和可维护性考虑,unix和linux性能远远好于windows,从成本考虑,Linux远远低于windows 和unix。
(2)负载均衡器的选择,硬件负载均衡器性能和稳定性高于软件负载均衡器。但成本上,软件比如haproxy、LVS优于硬件(比如F5、Netscaler)。
(3)web server的选择,Nginx优于传统的Apache。
(4)各级缓存的选择与应用,varnish、squid、memcached。
(5)网站开发语言的选择,与开发有关,主要分为需要编译性的语言和不需要编译性的语言。
(6)数据库的选择,传统的关系数据库中,Oracle优于MySQL,但Oracle收费远远高于MySQL,实际上,Oracle有两种收费模式,一种是按用户数,一种是按主机处理器个数。而MySQL有免费的版本。
(7)底层存储设备的选择,比如机械磁盘和固态硬盘的选择。
(8)避免单点故障问题,在逻辑架构上,避免单点故障,避免出现割点。
1.2.1.2 容灾性容灾性能对系统非常重要,比如服务器因为断电,导致数据文件的不一致,因为发生自然或者非自然灾害比如火灾导致的磁盘损坏,发生数据丢失等。所以容灾很重要,主要从以下几个方面提高容灾性能:
(1)服务器热备机的部署,当发生故障后,热备机能马上使用,提供服务。这里的服务器主要指web server 、应用服务器、数据库服务器等。
(2) 数据备份,比如做定期备份、热备份、增量备份,甚至需要做主从备份,来提高抗灾性能。并且从底层存储设备上进行备份,比如做RAID。
(3) 做双线网络交换,尽量优化设计网络,避免因为核心交换机故障,而影响服务。网络上避免单点故障。