HA狭义与广义论

Author: Darren Wang(fujohnwang)数据库

Date  : 2010-070-08负载均衡


  HA概念自己平淡无奇, HA者, High Availability的简称嘛!不过, 或许真的是自身愚笨, HA, HA的听多了, 还真没把它当回事。 不少年以后才真正“吃”出点儿味儿来。spa

我得说, 你们一般挂在嘴边的HA应该属于狭义概念上的HA, 它一般指代某种Active+Standby的Pair Service, 最长见的固然就是数据库的主备结构。反正你们每天这么招呼, 在狭义的HA层面上也能达成必定的共识, 不过, HA概念自己其实简单背后蕴含着更多的玄机。ci

从更广义的角度来讲, HA就是HA(这可能听着有点儿绕), 为了让咱们的系统能够高可用(High Availability), 咱们有许多手段或者说方式来达成这个目的, 而咱们经常挂在嘴边的HA, 实际上只是其中的一个手段或者几个手段的代称而已。it

为了保证系统的高可用, 咱们有许多种手段和方式, 下面是几种较为常见的手段和方式(不限于):io

  1. 复制与备份(Replication And Backup). 这主要是从存储的角度保证状态的可用性, 好比采用RAID(冗余磁盘阵列)经过冗余的数据备份存储保证数据的高可用性; 好比, 异地数据中心之间的数据备份与灾难恢复; 又好比当下KV engine实现中采用的 R+W > N 的原则等均可以属于这个范畴。class

  2. Failover. 为了保证系统的高可用性, 咱们还能够引入Failover机制, 好比应用程序运行期间的hot swap, 或者Virtual IP之间的切换等,都属于Failover的范畴。集群

  3. Cluster. 集群也是经过冗余来保证系统的高可用性, 只不过, 它侧重的是服务的冗余, 而不是状态的冗余(虽然也包含)。 集群内部能够存在交互,也能够不存在交互, 存在交互的集群内部各个结点一般是不对等的, 而不存在交互的集群内部各个结点一般则是对等的。 集群内部的交互, 简单的机制固然是Heart Beat, 复杂的机制可能有组播, 广播等。总之就是, 挂了我一个, 还有后来人, 预备役多着那。高可用

  4. Load balance. 负载均衡扔这里可能会感受牵强附会,不过, 从其所起的做用来看, 把它看做保证系统高可用的一种手段也不为过。负载均衡能够减轻单一或者多个结点的负载压力, 将总体负载均衡的分配到多个结点上去,你想啊, 若是没有负载均衡, 将整个的负载都压到一个结点上去, 那这个结点不废废才怪那, 还谈啥高可用性啊, 连用都用不了了。程序

其它的手段和方式欢迎补充, 很少扯了。

另外, 若是实在不能达成系统某种程度的高可用性, 咱们还能够选择某些妥协方案, 好比, 考虑系统的“优雅降级”(又是一个长挂嘴边的词儿), 或者容许系统小部分的不可用等。

总之那, HA就是HA(仍是那么绕), 简单又不简单。为了这么个简单的概念, 诸君却须要付出不简单的努力。