系统设计基础5:避免单点故障
2019-03-20 本文已影响0人
MeazZa
之前我们已经讲了不少关于服务器水平扩展、负载均衡等的内容,本文我们着重介绍一下单点故障相关的内容。
单点故障
一个典型的系统架构图如下所示,服务部署在一台服务器上,所有客户端请求都发送到这台服务器上。
![](https://img.haomeiwen.com/i10148685/154843d6c19500df.png)
如果这台服务器出现故障,将导致所有客户端的请求失败,那么应该如何避免系统设计中可能出现单点故障的问题呢?
解决方法
下图是一个避免单点故障设计的架构图,其中使用到了多种解决方法,以下将展开介绍。
![](https://img.haomeiwen.com/i10148685/25c7ce869ad495d0.png)
多服务器部署
原本服务部署在单台服务器上,将它部署同样的版本到多台服务器上。将所有服务器接入到Load Balance的组件,这很像我们之前讲过的内容。Load Balancer也可能出现单点故障,因此同样需要部署在多台服务器上。在Load Balancer之前使用DNS,DNS中记录了请求地址的hostname和多个ip之间的映射,客户端的请求将被转发到任意一个Load Balance服务器上。
主从结构
这里我们关注服务使用到的数据库,它同样是可能出现单点故障的。因此,这里我们采用主从结构,每个对主数据库的修改,将同步地发送到从服务器上。当主服务器出现故障时,由从服务器接替主服务器,确保能够持续提供服务。
多地部署
在实现上述的架构后,系统仍然会出现单点故障。当服务器所在地区的网络中断,或发生紧急灾害时,服务将中断。因此,这套架构需要部署在多地,才能避免地域问题导致的单点故障。
小结
本节主要介绍的避免单点故障的几种方法:多服务器部署、主从结构和多地部署等。各种方法的核心都是将任意一个服务进行冗余部署,避免存在单点,从而解决单点故障的问题。
欢迎大家订阅专题,其中包含了系统设计基础系列的全部文章:System Design