网站的可用性是描述网站可有效访问的特性。大型网站的不可用事故会直接影响公司形象和利益,许多互联网公司都会将网站可用性列入工程师的绩效考核。
1 可用性的度量
对于网站的可用性,业界通常用多少个9来衡量网站的可用性。比如4个9是具有自动恢复能力的高可用,网站年度不可用时间小于53分钟;5个9是极高可用性,网站年度不可用时间小于5分钟。
2 高可用的网站架构
网站高可用架构设计的主要目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够访问。
实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移。一旦某些服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备份的磁盘读取数据。
典型的分层模型是三层,即应用层、服务层、数据层。
位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台应用服务器不可用时,就将其从集群列表中剔除,并将请求分发到集群中其他可用的服务器上,使整个集群保持可用,从而实现应用高可用。
位于服务层的服务器情况和应用层的服务器类似,也是通过集群方式实现高可用,只是这些服务器被应用层通过分布式服务调用框架访问,分布式服务调用框架会在应用层客户端程序中实现软件负载均衡,并通过服务注册中心对提供服务的服务器进行心跳检测,发现服务不可用,立即通知客户端程序修改服务访问列表,剔除不可用的服务器。
位于数据层的服务器情况比较特殊,数据服务器上存储着数据,为了保证服务器宕机时数据不丢失,数据访问服务不中断,需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份。当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。
3 高可用的应用
应用层主要是处理网站的业务逻辑,所以也称为业务逻辑层,应用的一个显著特点就是应用的无状态性。所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例之间完全对等,请求提交到任意服务器,处理结果都是完全一样的。
3.1 通过负载均衡进行无状态服务的失效转移
对于应用服务器集群,实现应用服务器可用状态的实时监测、自动转移失败任务的机制是负载均衡。而不管是开源免费的负载均衡软件还是昂贵的负载均衡硬件,都是提供失效转移功能的。
3.2 应用服务器集群的Session管理
集群环境下,Session管理主要有以下几种手段:
(1)Session复制:对于集群规模比较小的集群还是比较适合的,但对于大型网站,集群规模达到上千台的就不适合这种方案了,因为复制本身也是消耗时间的。
(2)Session绑定:可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一个IP的请求分发到同一台服务器上,但这种方案显然不符合系统高可用的需求。
(3)利用Cookie记录Session:虽然Cookie记录Session有很多缺点,比如受大小限制,存在用户关闭Cookie的可能,但由于Cookie简单易用,可用性高,还是有许多网站在或多或少地使用Cookie记录Session。
(4)Session服务器:这种方案事实上是将应用服务器的状态进行了分离,也就是分为了无状态的应用服务器和有状态的Session服务器。
4 高可用的服务
高可用服务和应用一样,也是无状态的服务,因此使用类似负载均衡的失效转移策略实现高可用的服务。除此之外,还有其他几点高可用的服务策略。
(1)分级管理:核心应用和服务优先使用更好的硬件,同时部署上进行必要的隔离。
(2)超时设置:在应用程序中设置服务调用的超时时间,一旦超时,通信框架抛出异常,应用程序根据服务调用策略,可选择继续重试或将请求转移到提供相同服务的其他服务器上。
(3)异步调用:通过异步调用的方式实现应用调用之间的解耦,防止非核心业务流程影响核心业务流程处理实现。
(4)服务降级:为了保证核心应用和功能的正常运行,可对服务进行降级。而降级有两种手段,拒绝服务及关闭服务。
(5)幂等性的设计:服务层必须要保证服务重复调用和调用一次时产生的结果相同,即服务具有幂等性。
幂等性是指同一个操作无论请求多少次,其结果都相同。幂等操作实现方式有:
(1)操作之前在业务方法进行判断如果执行过了就不再执行。
(2)缓存所有请求和处理的结果,已经处理的请求则直接返回结果。
(3)在数据库表中加一个状态字段(未处理,已处理),数据操作时判断未处理时再处理。
5 高可用的数据
保证数据存储高可用的手段主要是数据备份和失效转移机制。数据备份是保证数据有多个副本,任意副本的失效都不会导致数据的永久丢失,从而实现数据完全的持久化。而失效转移机制则保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。
为了保证数据的高可用,网站通常会牺牲一个很重要的指标:数据一致性。也就是放弃强一致性,而选择数据的最终一致。
(1)数据备份分为数据冷备和热备。冷备是定期复制,缺点是不能保证数据最终一致,存在数据缺失的可能;热备是实时复制,有更好的数据可用性,其又可分为同步热备和异步热备。
(2)失效转移:失效转移操作由三个部分组成,失效确认、访问转移和数据恢复。
6 高可用网站的软件质量保证
(1)自动化测试:回归测试、兼容性测试等。
(2)预发布验证
(3)代码控制与版本管理
(4)基于规则驱动的自动化发布流程
(5)灰度发布:AB测试
7 网站运行监控
7.1 监控数据采集
(1)用户行为日志收集:服务器端日志收集、客户端浏览器日志收集;
(2)服务器性能监控:系统负载、内存占用、磁盘IO、网络IO等;
(3)运行数据报告:缓存命中率、平均响应延迟时间、每分钟发送的短信数.
7.2 监控管理
系统报警、失效转移、自动优雅降级
网友评论