高可用

高可用

高可用,英文叫High Availability(Wikipedia词条),基本上来说,就是要让我们的计算环境(包括软硬件)做到full-time的可用性。在设计上一般来说,需要做好如下的设计:

细节之处全是魔鬼,冗余结点最大的难题就是对于有状态的结点的数据复制和数据一致性的保证(无状态结点的冗余相对比较简单)。冗余数据所带来的一致性问题是魔鬼中的魔鬼:

高可用的定义和度量

高可用定义

可用性7级图表

level description
1 Crash with data corruption, destruction. 崩溃造成数据丢失
2 Crash with new data loss. 崩溃造成新数据丢失
3 Crash without data loss. 崩溃不会造成数据丢失或损坏
4 No crash, but with no or very limited service, low service quality. 通过有限制的服务防止崩溃和低质量
5 Partial or limited service, with good to medium service quality. 部分或者限制级服务具有很好的媒介质量
6 Failover with significant user visible delay, near full quality of service. 对显著延迟故障转移提供全质量服务
7 Failover with minimal to none user visible delay, near full qualityof service. 对最小延迟故障转移提供全质量服务

高可用度量

PTO/PRO

RTO和RPO是传统数据库领域常见的两个衡量高可用的指标。

请求成功率

可用性=成功请求数/总请求数

SLI(Service Level Indicator 服务等级指标)

SLI是经过仔细定义的测量指标,常见测量指标:

SLO(Service level objective 服务等级目标)

指定服务所提供功能的一种期望状态,SLO是用SLI来描述的,如:每分钟平均qps > 100k/s、99% 访问延迟 < 500ms。

SLA

服务级别协议(service-level agreement,缩写SLA)也称服务等级协议、服务水平协议,用于在商业上定义系统的高可用。SLA = SLO + 后果

Percent of Uptime(平均服务时间)

Availability = MTBF / (MTBF + MTTR)

  可用性 数据持久度 除外条款 赔偿条款
阿里云ECS 99.95% 99.9999999% (1)不可使用的服务时间低于5分钟的,不计入不可用时间;(2)阿里云预先通知用户后进行系统维护所引起的,包括割接、维修、升级和模拟故障演练; (3)不可抗力以及意外事件引起的; 不可用时间100倍
阿里云rds 99.95%   同上,高可用版和金融版为1分钟 不可用时间100倍,高可用版和金融版,服务费的15% - 30% - 100% (99.95%-99%-95%)  
AWS EC2 99.95%   无活跃链接,运维不算,不可抗力不算 低于99.95%,赔 10%;低于99%,赔30%
AWS RDS 99.95%   类似阿里,不计时间为1分钟 低于99.95%,赔 10%;低于99%,赔25%
AWS S3 99.99% 99.999999999%    
腾讯云云主机 99.95% 99.999% 5分钟以下不计费,无其他除外条款 不可用时间100倍

高可用解决方案

Google App Engine的co-founder Ryan Barrett在2009年的Google I/O上的演讲《Transaction Across DataCenter》(视频: http://www.youtube.com/watch?v=srOgpXECblk)

主要考虑以下几个问题:

Master-Slave

Master-Master

Two/Three Phase Commit(2PC 两段提交)

Paxos算法

影响高可用的因素

无计划的

有计划的

真正决定高可用系统的本质原因


Yan Peipan 19 September 2018