网站的可用性描述网站可有效访问的特性。网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。实现这种高可用架构的主要手段是数据和服务的冗余备份以及失效转移。
大型网站使用分层架构以及物理服务器的分布式部署使得位于不同层次的服务器具有不同的可用性特点。
典型的分层模型是三层:应用层、服务层、数据层。
应用层
位于应用层的服务器通常为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,方负载均衡设备通过心跳检测等手段监控到某台应用服务器不可用时,就将其从集群列表中剔除,并将请求分发到集群中其他可用的服务器上,使整个集群保持可用,从而实现应用高可用。
服务层
位于服务层的服务器也通过集群实现高可用,这些服务器被应用层通过分布式服务调用框架访问,分布式服务调用框架会在应用层客户端程序中实现软件负载均衡,并通过服务注册中心对提供服务的服务器进行心跳检测,发现有服务不可用,立即通知客户端程序修改服务访问列表,剔除不可用的服务器。
数据层
位于数据层的服务器比较特殊,为了保证服务器宕机时数据不丢失,数据访问服务不中断,在数据写入时进行数据同步复制,将数据写入多台服务器,实现数据冗余备份。
高可用的应用(应用层)
应用层主要处理网站应用的业务逻辑,其显著特点是应用的无状态性。
1、通过负载均衡进行无状态服务的失效转移
负载均衡软件一般都提供失效转移功能。在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上。
2、应用服务器集群的session管理
应用服务器的高可用架构设计主要基于服务无状态这一特性,但是事实上,业务总是有状态的。Web应用中将这些多次请求修改使用的上下文对象称为会话session。
集群环境下,session管理手段有:
(1)session复制
类似于JBoss,应用服务器开启Web容器的session复制功能,在集群中的几台服务器之间同步session对象,使得每台服务器上都保存所有用户的session信息。
(2)session绑定
session绑定(即会话粘滞)利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上(也可以根据cookie信息)。
缺点:无备份
(3)利用cookie记录session
将session记录在客户端,每次请求服务器时,将session放在请求中发送给服务器,服务器处理完请求后将修改过的session响应给客户端。
一般使用cookie来实现,但是cookie大小有限;每次请求响应都传输cookie会影响性能。
(4)session服务器
利用独立部署的session服务器(集群)统一管理session,应用服务器每次读写session时,都访问session服务器。其本质是将应用服务器的状态分离,分为无状态的应用服务器和有状态的session服务器。
高可用的服务(服务层)
可复用的服务模块为业务产品提供基础公共服务,大型网站中,这些服务通常都是独立分布式部署,被具体应用远程调用。其高可用的服务策略有
1、分级管理
在服务部署上进行必要的隔离,避免故障的连锁反应。低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离;高优先级的服务则需要部署在不同的物理机上;核心服务和数据甚至需要部署在不同地域的数据中心。
2、超时设置
在应用程序中设置服务调用的超时时间,一旦超时,通信框架就抛出异常,应用程序根据服务调度策略,可选择继续重试或将请求转移到提供相同服务的其他服务器上。这样就可以避免失去响应时占用应用程序的资源。
3、异步调用
应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败。
4、服务降级
在网站访问高峰期,服务可能因为大量的并发调用而性能下降,严重时可能会导致服务宕机。为了保证核心应用和功能的正常使用,对服务进行降级,降级有两种手段:拒绝服务、关闭服务。
(1)拒绝服务
拒绝优先级应用的调用,减少服务调用并发数,保证核心应用正常使用;或者随机拒绝部分请求调用。
(2)关闭功能
关闭不重要的服务,或者服务内部关闭不重要的功能,以节约系统开销,为重要的服务和功能让出资源。
5、等幂性设计
应用调用服务失败后,会将调用请求重新发送到其他服务器,但是这个失败可能是虚假的,如:处理成功,但未受到相应。
等幂性设计在服务层保证服务重复调用和调用一次产生的结果相同,即服务据有等幂性。
高可用的数据(数据层)
保证数据存储高可用的手段主要有:数据备份、失效转移机制。
1、CAP原理
CAP原理认为一个提供数据服务的存储系统无法同时满足数据一致性(Consistency)、数据可用性(Availability)、分区耐受性(Partition Tolerance)
2、数据备份
数据热备可分为两种:异步热备方式、同步热备方式。
(1)异步热备方式
异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时,只写成功一份,存储系统会异步地写其他副本。
异步写入方式下,存储服务器分为主存储服务器(Master)和从存储服务器(Slaver)。应用程序正常情况下只连接主存储服务器,数据写入时,由主存储服务器的写操作代理模块将数据写入到本机存储系统后立即返回写操作成功响应,然后通过异步线程将写操作数据同步到从存储服务器。
(2)同步热备方式
同步方式是指多份数据副本的写操作同步完成,即应用程序收到数据服务系统的写成功响应时,多分数据都已经写操作成功。
3、失效转移
失效转移由三部分组成:失效确认、访问转移、数据恢复。
(1)失效确认
系统确认一台服务器是否宕机的手段有两种:心跳检测、应用程序访问失败报告。
对于应用程序的访问失败报告,控制中心还需要再一次发送心跳检测以确认。
(2)访问转移
确认某台数据存储服务器宕机后,将数据读写访问重新路由到其他服务器上。
(3)数据恢复
某台服务器宕机,数据存储的副本就减少,必须将副本的数目恢复到系统设定的值。
【参考文献】大型网站技术架构核心原理与案例分析,李智慧,电子工业出版社