高可用性指你提供的服务要始终可用, 不管天灾(停电, 断网, 磁盘空间满, 服务器硬件损坏等), 人祸(软件bug, 黑客破坏, 误操作等), 甚至地震, 洪水抑或战争.
高可性性的指标就是可用时间与总时间之比
availability = uptime/(uptime + downtime)
现在普遍要求可用性至少达到两个九, 最好在四个九以上, 也就是说你的服务要达到如下要求
为了达到高可用性, 必须在设计, 实现, 运维等各个方面着手, 才到达到随时可用的目标.
根据我的经验, 分以下三个方面来谈谈
高可用性设计
高可用性实现
高可用性运维
高可用性和高扩展性相关, 另外再深谈关于扩展性的话题
高可用性设计
高可用的不二法宝是冗余, 也就是说, 为了避免单点失败(Single Point Failure), 会增加一到多个点, 而且最好放在不同的物理位置, 降低多点失败的概率.
具体来说, 服务器之间的关系有主从(primary/slave)关系, 主主(active-active)关系.
再细分的话有一主多仆, 多主多仆, 对等自治等关系, 是一个服务器集集群还是多个服务器集群.
举例来说, 我有一个聊天服务器, 提供公司内部的机密对话聊天服务
通过 Web App 经 Web Socket 通过 TLS 和服务器进行通讯.
这台服务器放在北京总部, 时而由于断网和断电造成服务器不可用, 于是我又增加了一台服务器, 为避免总部大厦停电可能造成其他分公司的服务不可用, 后来又在上海分公司搭建了两台服务器. 最终的拓扑结构如下:
数据存储采用 Cassandra , LoadBalancer 用 HAProxy, ChatService 是自己写的应用服务器, 数据