大型网站高可用架构!

img

可用性度量与考核

如何度量网站可用性?

  • 一个神奇的数字—9!你有几个9,就代表了你的可用性
  • 例如QQ可用性达到了4个9:99.99%

如何考核网站可用性?

  • 广泛采用故障分的,它是对网站故障进行分类加权计算故障责任的方法

高可用的架构

设计的目的?

  • 保证服务器硬件故障服务依然可用,数据依然保存并能够被访问

主要的手段?

  • 数据和服务的冗余备份以及失效转移:

    • 对于服务而言,一旦某个服务器宕机,就将服务切换到其他可用的服务器上

    • 对于数据而言,如果某个磁盘损坏,就从备份的磁盘(事先就做好了数据的同步复制)读取数据

高可用的应用

应用层处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性

通过负载均衡进行无状态服务的失效转移

应用服务器集群的Session管理

高可用的服务

高可用的服务模块为业务产品提供基础公共服务,在大型站点中这些服务通常都独立分布式部署,被具体应用远程调用

在具体实践中,有以下几点高可用的服务策略可以参考:

  • 分级管理:

    • 核心应用和服务具有更高的优先级,比如用户及时付款比能否评价商品更重要
  • 超时设置:

    • 设置服务调用的超时时间,一旦超时后,通信框架抛出异常
      • 应用程序则根据服务调度策略选择重试or请求转移到其他服务器上
  • 异步调用:

    • 通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况
  • 服务降级:

    • 网站访问高峰期间,为了保证核心应用的正常运行,需要对服务降级

降级有两种手段:

  • 一是拒绝服务,拒绝较低优先级的应用的调用,减少服务调用并发数,确保核心应用的正常运行

  • 二是关闭功能:

    • 关闭部分不重要的服务,或者服务内部关闭部分不重要的功能,以节约系统开销,为核心应用服务让出资源

幂等性设计:

  • 保证服务重复调用和调用一次产生的结果相同

高可用的数据

对于大多数网站而言,数据是其最宝贵的物质资产

保证数据高可用的主要手段有两种:一是数据备份,二是失效转移机制

数据备份:

  • 又分为冷备份和热备份,冷备份是定期复制,不能保证数据可用性

失效转移:

  • 若数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都要重新路由到其他服务器
    • 保证数据访问不会失败

高可用的QA

网站发布:

  • 在柔性的发布过程中,每次关闭的服务都是集群中的一小部分,并在发布完成后立即可以访问

自动化测试:

  • 使用自动测试工具或脚本完成测试

预发布验证:

  • 引入预发布服务器,与正式服务器几乎一致,只是没有配置在负载均衡服务器上,外部用户无法访问

代码控制:

  • 目前大多数网站采用SVN,分支开发,主干发布模式

另外,目前开源社区广泛采用Git作为版本控制工具,正逐步取代SVN的地位

网站运行监控

不允许没有监控的系统上线

监控数据采集

监控管理:

系统报警:

  • 配置报警阀值和值守人员联系方式,系统发生报警时,即使工程师在千里之外,也可以被及时通知

失效转移:

  • 监控系统在发现故障时,主动通知应用进行失效转移

自动优雅降级:

  • 为了应付网站访问高峰,主动关闭部分功能,释放部分系统资源,保证核心应用服务的正常运行

网站柔性架构的理想状态