学习博客地址:https://www.cnblogs.com/shizhiyi/p/7750530.html
一、什么是高可用
高可用是分布式系统架构设计中必须考虑的因素之一,它是指通过设计减少系统不能提供服务的时间。很多公司的高可用目标是4个9,即99.99%的时间系统可用,年停机时间为8.76小时。
二、如何保障系统高可用
单点是高可用最大的敌人,集群+自动故障转移来保证系统的高可用性。
三、常见的互联网分层架构高可用实践
【客户端层->反向代理层】
常见的实践是keepalived存活探测,相同virtual IP提供服务。
故障自动转移
【反向代理层->站点层】
nginx.conf里能够配置多个web后端,并且nginx能够探测到多个后端的存活性。
【站点层->服务层】的高可用
自动故障转移:当service挂了的时候,service-connection-pool能够探测到,会自动的进行故障转移(个人感觉是不是注册中心的工作)
【服务层>缓存层】
缓存层也可以通过支持主从同步的缓存集群来解决缓存层的高可用问题。
自动故障转移:当redis主挂了的时候,sentinel能够探测到,会通知调用方访问新的redis,整个过程由sentinel和redis集群配合完成,对调用方是透明的。
【服务层>数据库层】
【服务层>数据库层“读”】
自动故障转移:当读库挂了的时候,db-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的读库,整个过程由连接池自动完成,对调用方是透明的(所以说DAO中的数据库连接池是很重要的基础组件)。
【服务层>数据库层“写”】
以mysql为例,可以设置两个mysql双主同步,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。