网站高可用指的就是,在绝大多的时间里,网站一直处于可以对外提供服务的正常状态。业界通常使用有多少个“9”来衡量网站的可用性指标,具体的计算公式也很简单,就是一段时间内(比如一年)网站可用的时间占总时间的百分比。
造成网站不可用的主要原因有以下三大类:
-
服务器硬件故障;
-
发布新应用的过程;
-
应用程序本身的问题。
网站高可用架构设计
第一类方法是,从硬件层面加入必要的冗余
对于应用服务器来说,即使没有伸缩性的要求,我们也会至少采用两台同样的服务器,并且引入一台额外的负载均衡器,所有的外部请求会先到负载均衡器,然后由负载均衡器根据不同的分配算法选择其中的某一台服务器来提供服务。
对于数据存储的服务器来说,往往通过数据冗余备份和失效转移机制来实现高可用。为了防止存储数据的服务器发生硬件故障而造成数据丢失,我们往往会引入多个数据存储服务器,并且会在数据有更新操作的时候自动同步多个数据存储服务器上的数据。
第二类方法是,灰度发布
假定现在有一个包含 100 个节点的集群需要升级安装新的应用版本,那么这个时候的更新过程应该是:
-
首先,从负载均衡器的服务器列表中删除其中的一个节点;
-
然后,将新版本的应用部署到这台删除的节点中并重启该服务;
-
重启完成后,将包含新版本应用的节点重新挂载到负载均衡服务器中,让其真正接受外部流量,并严密观察新版本应用的行为;
-
如果没有问题,那么将会重复以上步骤将下一个节点升级成新版本应用。
-
如果有问题,就会回滚这个节点的上一个版本。如此反复,直至集群中这 100 个节点全部更新为新版本应用。
第三类方法是,加强应用上线前的测试,或者开启预发布验证
为了避免由于环境差异造成的问题,我们往往会预发布服务器。预发布服务器和真实的服务所处的环境没有任何差别,连接的第三方服务也没有任何差别,唯一不同的是预发布服务器不会通过负载均衡服务器对外暴露,只有知道其 IP 地址的内部人员才可以对其进行访问。
来源于 极客时间 茹炳晟 软件测试52讲