系统的高可用(纯理论)

专注服务端首先要专注的是关于高可用。

有的时候高可用系统并不是简单的技术方案,会包含很多其他的东西。

什么是高可用?

基本来讲是为了让我们的计算机(硬件/软件)做到full time可用。设计上一般有下面的方法:

  1. 对软/硬件冗余,消除单点故障。任何系统都有一个或多个冗余系统做standby。
  2. 对故障的检测和恢复。检测故障使用备份的节点接管故障点。就是failover。
  3. 需要可靠的交汇点。一些不易冗余的节点,或者被看做是单点的节点,比如域名解析,负载均衡。

冗余的问题

系统软硬件冗余可以保证高可用,但是冗余之后的问题是多个节点状态的数据复制和数据一致性的保证。

一致性问题:

  1. 系统的数据镜像到冗余节点是异步的。在failover的时候会出现数据差异。
  2. 数据镜像到冗余节点是同步的,会导致冗余节点越多性能越差。

所以在选择中会有取舍,依照业务特点来。

高可用设计原理:

  1. 数据不丢失就需要持久化。
  2. 服务高可用,需要做备份(副本),包括应用节点和数据节点。
  3. 节点之间复制就会有数据一致性问题。
  4. 不可能做到100%高可用,达到常说的9个SLA。

常见的高可用方案有:

  1. M/S,MM实现起来简单存在一些问题;
  2. 2PC,3PC有一定的性能问题;
  3. Paxos较为复杂,比如zk;

高可用问题:

  1. 最终一致性来讲,宕机情况下会出现数据没有完全同步,出现数据节点数据差异。
  2. 强一致性来讲,使用两阶段提交/三阶段提交方案,需要结合Paxos协议实现。

当今的开源软件中,缓存,消息系统,数据库都有持久化和复制的设计,实现了自身的高可用。

以MySql为例:

  1. MySql Repleaction是传统的异步数据同步方式/半同步(只有一个Slave收到更新就返回成功)这个本质上不到2个9。
  2. MySql Fabric就是数据分片下的M/S读写分离模式。高可用可以达到99%。
  3. DRBD通过底层的磁盘同步方案来解决数据同步问题,及时RAID 1把两台以上的主机的硬盘镜像成一个。这个方案不到3个9。
  4. Solaris Clustering/Orical VM,这个机制监控了包括硬件,操作系统,网络和数据库。方案会伴随节点间心跳,还会用到SAN或本地的分布式存储系统,用到虚拟化技术。是一个全栈式的方案。
  5. MySql Cluster是官方的开源方案,把MySql的集群分成Sql Node和Data Node,Data Node是一个自动化sharing和复制的机器NDB,为了高可用,MySql Cluster采用了完全同步的数据复制来冗余数据节点,也是采用比较多的方案。接近于5个9。

系统可用性%

宕机时间/年

宕机时间/月

宕机时间/周

宕机时间/天

90% (1个9)

36.5 天

72 小时

16.8 小时

2.4 小时

99% (2个9)

3.65 天

7.20 小时

1.68 小时

14.4 分

99.9% (3个9)

8.76 小时

43.8 分

10.1 分钟

1.44 分

99.99% (4个9)

52.56 分

4.38 分

1.01 分钟

8.66 秒

99.999% (5个9)

5.26 分

25.9 秒

6.05 秒

0.87 秒

比如,99.999%的可用性,一年只能有5分半钟的服务不可用。感觉很难做到吧。

影响高可用的因素

处理设计系统的高可用,还需要面对硬件,第三方服务,建筑施工队的因素。

意外因素:

  1. 系统的故障:主机,操作系统,中间件,数据库,网络,电源,外设设备。
  2. 数据和中介:人员误操作,硬盘故障,数据异常。
  3. 自然灾害,人为损坏,供电。

计划内因素:

  1. 日常任务:备份,容量规划,用户和安全处理,后台批处理。
  2. 运维日常:数据库维护,应用维护,中间件维护,操作系统维护,网络维护。
  3. 升级相关:数据库,应用,中间件,操作系统,网络,硬件升级。

小团队没有这么多资源,还是实用一些靠谱的云服务吧。

原文发布于微信公众号 - 服务端技术杂谈(ITIBB2014)

原文发表时间:2017-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

浅谈web网站架构演变过程

前言   我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。   该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品...

1.9K610
来自专栏lulianqi

为什么需要多线程

对于这个问题可能很多朋友会说是为了高性能,个人觉得这是误解,多线程不等于高性能,从cpu(单核)的角度上看单线程才能带来最高性能。

18720
来自专栏EAWorld

API管理的正确姿势--API Gateway

数字化生态,以创新客户体验为核心,所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错,需要不断的升级,并且创新往往与我们熟知的功能分离开来分别呈现。...

50020
来自专栏咸鱼与梦想

Spring Cloud 系列-Ribbon

负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高...

4410

API-First,Kubernetes上微服务的一种方法

对那些曾经使用更传统方式构建应用的开发者来说,转向容器化微服务不是一个容易的转变。当开发者设计分布式应用时,微服务应用也正是分布式的,其中有许多新的概念和细节需...

45140
来自专栏程序员互动联盟

【专业技术】Android如何实现推送?

存在问题: 现在各种实时推送消息不时的在我们手机通知里闪烁,而windowphone搞了那么久在加上,实时消息要求的是实时性。在我们开发中如何掌握这种实时模式呢...

64050
来自专栏开源项目

实用的国产优秀开源中间件 | 码云周刊第 52 期

在系统软件之中,操作系统、数据库、中间件的三驾马车,中间件是最神秘的,而且是一个专业化非常强的细分产业。中间件技术主要用来支撑分布式软件的开发,在大型分布式软件...

51280
来自专栏芋道源码1024

MongoDB、HBase、Redis 等 NoSQL 优劣势、应用场景

NoSQL数据库在整个数据库领域的江湖地位已经不言而喻。在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从...

41540
来自专栏服务端技术杂谈

海量日志数据存储用 elasticsearch 和 hbase 哪个?

首先看两者的简单介绍: ElasticSearch:是一个基于Lucene的搜索引擎; HBase:是一个开源的,非关系的,分布式的数据模型存储引擎; 两个框...

54250
来自专栏EAWorld

微服务来了,配置怎么办?

配置管理是个简单的小话题,程序员都已经非常熟悉,咋就跟微服务挂上钩了呢? 前些年没提微服务架构的时候,大家也都会做配置管理相关的事情,比如我接触过的很多项目都做...

37660

扫码关注云+社区

领取腾讯云代金券