大多数状况,在测验自己电脑能否上网时,咱们都会用浏览器翻开百度主页,如果不能翻开百度主页,那便是咱们电脑的网络没有连通,如果能够翻开百度主页,那阐明咱们电脑的网络是连通的。之所以咱们会拿百度主页来测验网络的连通性,是由于百度网站做到了高可用,咱们信任只需网络正常就必定能翻开百度主页。
一起,关于百度来说, 每次搜索查询都能够发明广告收入,服务不行用就意味着金钱的丢失,意味着用户的流失。同理,服务不行用关于其他网站而言,也是公司的丢失。网站的可用性这么重要,那咱们怎样来衡量网站的可用性呢?有哪些办法能够用来进步网站的可用性?
网站可用性衡量指标
一个高可用网站不能一再呈现毛病,只需发作毛病,即便是很短时刻的中断,都会影响事务运营。其次,高可用网站,即便呈现毛病,也应该能很快康复。如果一个网站一年不出一次毛病,但一次毛病需求几个小时,甚至几天才干康复,那么这个网站也算不上一个高可用网站。
网站可用性(availability)也即网站正常运转时刻的百分比,业界用 N 个9 来量化可用性, 最常说的便是类似 “4个9(也便是99.99%)” 的可用性。 百度网站的可用性号称是5个9,即99.999% 。下表是N个9的详细阐明。
描述通俗叫法可用性等级年度停机时刻根本可用性2个999%87.6小时较高可用性3个999.9%8.8小时具有毛病自动康复才能的可用性4个999.99%53分钟极高可用性5个999.999%5分钟
如何进步网站的可用性?
关于大型网站来说,网站可用性越高越好。互联网架构的高可用规划能够从以下方面去考虑:
1)根据负载均衡的毛病搬运
关于事务逻辑服务,一般会规划成无状况化的服务,无状况化也便是服务模块只处理事务逻辑,而无需关怀事务恳求的上下文信息。所以无状况化的服务器之间是彼此平等和独立的。
毛病搬运便是在某一个应用服务器不能服务用户恳求的时候,经过必定的技能实现用户恳求搬运到其他应用服务器上来进行事务逻辑处理。
互联网架构规划:高可用
如上图所示,用户恳求经过负载均衡器分发到详细的应用服务器上,应用服务器进行事务逻辑的处理。当应用服务器1呈现毛病不能对外供给服务时,负载均衡器能够探测到应用服务器的状况,然后将事务恳求负载均衡到应用服务器2和应用服务器3上去,然后到达应用服务器毛病时,不影响服务的运用。
2)冗余备份
冗余备份便是针对某一个服务经过服务器集群或多机房部署来到达服务器冗余和彼此备份的意图。
互联网架构规划:高可用
在上一末节中的根据负载均衡器的失效搬运方案,其实也一种冗余备份容灾的方法。一起有三台服务器组成一个集群来对外供给服务,三台服务器之间是彼此备份的联系,仅仅三台服务器是在同一机房。
为了到达更高的可用性,咱们还能够考虑经过多机房的冗余备份,如上图所示。正常状况下,负载均衡器将恳求都分发到机房1的服务器上去,在机房1处理毛病,或许处理性能比较高时,负载均衡器能够将恳求切换到机房2上来,然后到达机房之间的容灾备份。
冗余备份能够到达防止单点,体系容量备份,多方法容灾等意图。
3)超时设置
一般网站服务都会有主调服务和被调服务之分。超时设置便是主调服务在调用被调服务的时候设置一个超时等候时刻Timeout,主调服务发现超时后,自动进入超时处理流程。
例如:主调服务A调用被调服务B时,设置超时等候时刻为3秒,或许由于B服务宕机、网络状况欠好或程序BUG而导致B服务不能及时回复A服务的调用,此刻A服务在等候3秒后,将触发超时逻辑而不再关怀B服务的回复状况。A服务的超时逻辑能够依据状况而定,比方能够采取重试,或到另一个对等的B服务去恳求,或直接放弃直接对外进行回包。
超时设置的优点在于当某个服务不行用时,不至于整个体系发作连锁反应。
4)异步调用
选用异步调用的方法调用被调服务,有利于将主调服务和被调服务进行解耦,一起进步体系的处理性能。
例如:当你在微信发布朋友圈时,微信APP的后台服务器需求把文字和图片存储到不同的服务模块上去,这时后台服务收到恳求后,将两种不同的数据以异步调用的方法分发到不同的功能模块,这样的后台服务处理睬更高效,一起即便图片存储模块响应时刻长也不会影响到文字存储进程。
注:简化朋友圈宣布逻辑举例仅为阐明问题,不代表实践的做法。
5)服务分级和降级
在一个大体系中,一般会有中心服务和非必须服务之分,那么关于不同的服务能够选用不同的处理方案,呈现毛病时应该优先保证中心服务的运转。再者便是针对一个完善的服务,或许需求1-2-3 三步才干完结,可是1-2两步也能够满足根本需求,那么能够将1-2 两步完结的服务是 1-2-3三步完结的服务的降级。
互联网架构规划:高可用
假如朋友圈宣布逻辑,需求将用户宣布的朋友圈中的文字进行存储(进程1),一起也需求将图片进行存储(进程2),还需求处理用户的地舆位置(进程3),三个进程都成功完结后,用户的朋友圈就算成功发布。在某些状况下,地舆位置服务或许呈现毛病,那么朋友圈宣布逻辑模块在成功执行文字和图片的存储后,对用户回来牵强发布成功,虽然用户看到的信息不够完好,可是还牵强可用,比发布失利仍是要好一些的。这便是服务降级的进程。
6)监控告警
大型网站体系的服务模块很多,经常会由于各种原因呈现进程core掉,网络质量欠好,机器宕机等现象,咱们规划的体系应该具备监控上报和告警的才能,运维和开发能够经过监控报表实时的查看体系的运转状况。服务一旦呈现问题能够及时发现,经过自动化处理,或许人工介入处理,然后到达缩短体系的不行用时刻,进步可用性。
常见的监控指标有:CPU、带宽、内存运用率、网络连接状况,体系调用过错,成功率,PV,UV等
7)防雪崩机制
关于规划的任何一个体系,都需求进行容量的预估和最大容量设置,当外部恳求量超越最大容量时,应该启动防雪崩机制,以防止大量外部恳求把服务压跨而不能对外供给服务。
例如A服务的最大QPS是5W/S,那么当外部恳求到达5W/S时,A服务只服务5W/S的QPS,超越的部分直接拒绝服务,而不是强吞下导致A服务彻底不行用。
8)流量缓冲机制
在服务内能够树立队列,当流量过大时,贮存必定的用户恳求到队列,当流量偏小时再拿出来快速处理,然后到达削峰填谷的效果。在恳求数据库时,这个方案运用得很多,防止写入高峰时压跨数据库。
互联网架构规划:高可用
9)自动化测验
关于每一次代码的提交,都能经过自动测验程序对整个服务进行整体的回归测验,这样能够快速地防止代码修改引进新的问题,而导致服务不稳定。
10)灰度发布和回滚机制
关于网站体系要发布的服务,能够选用灰度发布的方法来进行发布。所谓灰度发布便是先在出产环境中选取一小部分机器进行发布,然后再测验验证,验证成功后再持续加大发布范围。如果遇到发布的版别存在严重BUG需求能快速的启动服务回滚机制,敏捷康复到发布前的稳定版别。
11)代码控制
关于大型体系来说,一般会有多个团队或许工程师一起进行开发。需求对相同的代码库进行版别办理和发布办理。现在大部分开发团队都选用SVN和Git等工具来进行代码办理和发布。
Git是一个开源的分布式版别控制体系,能够有用、高速的处理从很小到非常大的项目版别办理,是现在最盛行的代码办理工具之一。