Introduct

    网站的可用性(Availability)描述网站可有效访问的特性。

    DNS被劫持、CDN服务肯能挂掉、网站服务器宕机、网络交换机失效、硬盘损坏、网卡损坏、网卡松掉、机房停电、空调失灵、程序bug、黑客攻击、促销引来大量访问、第三方服务不可用… …要保证一个网站永远完全可用几乎是一件不可能完成的使命。

image

网站可用性的度量和考核

  • 网站可用性度量

    网站不可用也被称为网站故障,通常用几个9来衡量网站的可用性。

    网站不可用时间(故障时间) = 故障修复时间点-故障发现(报告时间点)

    网站年度可用性指标 = (1-网站不可用时间/年度总时间) * 100%

    对于大多数网站,2个9是基本可用,3个9是较高可用,4个9是就有自动恢复能力的高可用,5个9是极高可用。

    Twitter网站的可用性不足2个9.

  • 网站可用性考核

    可用性指标是网站架构设计的重要指标,对外是服务承诺,对内是考核指标。从管理层面,可用性指标是网站或者产品的整体考核指标,具体到每个工程师的考核,更多的是使用故障分。

    所谓故障分是指对网站故障进行分类加权计算故障责任的方法。

分类 描述 权重
事故级故障 严重故障,网站整体不可用 100
A类故障 网站访问不顺畅或核心功能不可用 20
B类故障 非核心功能不可用,或核心功能少数用户不可用 5
C类故障 以上故障以为的其他故障 1

    故障分的计算公式为:故障分 = 故障时间(分钟) * 故障权重

  • 高可用的网站架构

    网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。

    实现高可用架构的主要手段就是数据和服务的冗余备份及失效转移,一旦某些服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备份的磁盘读取数据。

网站三层架构

    在复杂的大型网站架构中,划分的粒度会更小、更细,架构更加复杂,服务器规模更加庞大,但通常还是能够把这些服务划分到这三层中。

  • 高可用的应用

    无状态应用是指应用服务器不保存业务的上下文信息,而根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例(服务器)之间完全对等,请求提交到任意服务器,处理结果都是完全一样的。

  1. 通过负载均衡进行无状态服务的失效转移
  2. 应用服务器集群的Session管理
    1. Session复制
    2. Session绑定:hash,同一用户请求都在同一台服务器
    3. 利用Cookie记录Session
    4. Session服务器:独立部署Session服务器同一管理
  • 高可用服务
  1. 分级管理:核心服务与其他服务分级管理
  2. 超时设置:宕机、死锁导致请求失去响应
  3. 异步调用:如消息队列
  4. 服务降级:拒绝及关闭服务
  5. 幂等性设计:在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性
  • 高可用的数据

    保证数据存储高可用的手段主要是数据备份和失效转移机制。

    高可用的数据含义: 数据持久性、数据可访问性、数据一致性

  1. CAP原理

    CAP原理认为,一个提供数据服务的存储系统无法同事满足数据一致性(Consistency)、数据可用性(Availibility)、分区耐受性(Partition Tolerance,系统具有跨网络分区的伸缩性)三个条件。

    为保证数据的高可用,通常会牺牲:数据一致性。

    数据一致性分为: 数据强一致、数据用户一致、数据最终一致

  1. 数据备份
  2. 失效转移
    1. 失效确认
    2. 访问转移
    3. 数据恢复
  • 高可用网站的软件质量保证
  1. 网站发布
  2. 自动化测试
  3. 预发布验证
  4. 代码控制
  5. 自动化发布
  6. 灰度发布
  • 网站运行监控
  1. 监控数据采集
    1. 用户行为日志收集
      1. 服务端日志收集
      2. 客户端浏览器日志收集
    2. 服务器性能监控
    3. 运行数据报告
  2. 监控管理
    1. 监控报警
    2. 失效转移
    3. 自动优雅降级