网站稳定性的建设是一项综合的系统工程,就像人的健康一样,假如平常不注意健康饮食、不注意训练,时间一长身体一定会出问题,对稳定性的考量也是贯穿整个研发生命周期的。
在网站的构造设计时就要考虑稳定性:考虑到互联网光纤大概被挖断,假如只有一个机房那就悲剧了,100%的流量都没了,甚至要考虑自然灾害的影响而多地建设机房。
稳定性的建设中有两个要紧原因:一是思想上看重,开发职员对稳定性的看重(也就是敬畏之心)可以防止70%~80%6的问题;二是规范和工具的建设,用以保障稳定性。
(1)构造阶段的稳定性建设项目
一个网站要有好的稳定性,需要在构造设计阶段就做长远考虑,就像建房屋要先打好地基一样,不然楼建得越高越危险。建设高稳定性的构造需要注意以下几个方面。
防止单点。高可用构造设计的第一条就是要防止单点,从概率出发来看,无论是机器还是人,没什么东西是不会犯了错误的,尽可能防止某个完整的环节成为单点是构造设计的原则。但,在某些场景中,有的功能需要放在同一个应用中,比如统一登录、网关、安全过滤等,此时要保证尽可能根据人群来划分,不要在逻辑上出现单点;或者尽可能把服务拆成组件迁到不一样的端上实行,比如,可以把安全服务作为一个模块集成到 Nginx或者应用机器中,而不是把它做成一个远程服务接口。
分组隔离。把应用拆得更细一点,不一样的功能模块做成单独的分组,每一个分组占用一部分机器集群,如此可以做到服务分组隔离,防止不太要紧的分组对要紧分组的影响。目前很时尚的微服务就是一种很好的分组隔离的实践。异步化。在系统设计中要让尽量多的远程调用异步化,这也是一项要紧原则。有时候会由于一个不太要紧的功能的强依靠拖垮了整个应用,所以要尽可能把不太要紧的依靠改成异步调用,防止影响主调用链路的稳定性。
异地容灾。考虑到不少不可抗力原因的影响,大家需要设计网站的异地容灾甚至全球部署方案,这类不可抗力的事件总是会干扰网站的整个构造,需要做长远计划
(2)编码阶段的稳定性建设
编程阶段的稳定性建设特别要紧,一个好的程序在编码阶段就决定了整个应用系统的水平,所以在编码阶段应该注意下面一些规则。
错误捕获。一个高雅的系统势必有一套高雅的异常处置机制,在适合的地方如1O处置、远程调用、多线程等重点处捕获异常尤为重要,防御性编程可以更好地保证系统的健壮性。
异步线程。在一些批处置调用的地方使用异步线程可以保证主请求的正常返回,同样也可以做到部分的隔离,预防部分请求挂起整个应用。
超时处置。在远程调用或者调用外围设施时,很有必要设定超时时间,如此可以保证所有些请求都有一个可预测的返回结果。
限流保护。每一个应用都有一个承载极限,超越这个极限就会带来非常大的不确定性,因此,设置自我保护机制可以保证程序的健壮性。
(3)测试阶段的稳定性建设
测试是程序上线前的最后一道保障,测试也是验证程序是不是达到预期功能的方法,在本阶段应该注意以下事情。
智能化对比测试。对比测试就是用线上真实的环境和数据与预发环境对相同的业务接口做返回值的比较,以此判断新上线的代码是不是符合预期。Beta测试。在线上的真头坏境中远取着个言机器上的数据,以此验证程序是不是正确。
(4)发布阶段的稳定性建设
发布阶段稳定性建设应注意以下事情。
分批发布。分批发布可以减少发布风险,不仅能够降低系统部署重启引起的RT抖动,也可以在发现问题时立即终止发布。
多版本发布。合并部署是将多个应用系统同时部署在同一个Web容器实例中、共享同一个进程,每一个应用之间相互隔离,但应用之间的RPC是通过当地调用而不通过互联网调用。
(5)运行阶段的稳定性建设项目
运行阶段稳定性建设要做好几件事:实时监控报警、过载保护和自动降级、实时数据对账,核心原则是实时发现问题,提供必要的保护手段。
实时监控报警。线上监控需要包括系统监控,主如果监控服务器的CPU、Load磁盘、内存等一些系统指标的异常状况;应用监控主如果监控响应时间、QPS异常错误等;业务监控主如果监控一些业务指标是不是有异常(如实时的下单量、司机和乘客的在线数目业务指标)。
过载保护和自动降级。线上运行中的系统需要有一些保护手段,如系统的某些指标达到瓶颈时要有必要的保护;当Load达到系统的高瓶颈时需要拒绝些请求,以预防系统被压垮;涉及一些远程调用时可以设置大并发数,一旦超越该阀值就自动 fast fail以保护系统。
实时数据对账。这是业务监控范围。在涉及一些敏锐信息时,为了确保正确性,需要有实时的对账校验,最典型的就是资金数据,与涉及跨单元数据复制时对数据一致性的对账检查。(6)问题发生时的稳定性建设
一旦发生问题,非常重要的就是迅速止损、定位问题并迅速恢复。根据经验,当问题发生时,第一反应就是迅速回滚知道问题现象,依据问题现象判读问题缘由,进而找出解决方法。
降低问题的定位时间和迅速恢复方案在问题发生时是至关要紧的。
迅速定位障可以缩短问题的复时间。怎么样定位问题?据统计,90%6的问题都是由变更所致,所以迅速采集变更信息和线上机器的异常数据尤为重要,但难题在于这类数据总是散落在每个地方,并且格式多样。
迅速恢复。影响问题恢复时间的一是问题定位时间,二是所使用的迅速恢复的方法。比如在多版本部署出现问题时,可以通过迅速网站制作切换版本来恢复;在异地多活的状况下可以把流量切换到不一样的单元来止损。
新闻标题稳定性网站制作思路