高可用技术

简介: 部署方案: 主从方案,多实例方案 隔离技术:业务隔离;数据隔离;进程隔离/系统隔离;线程隔离;集群、机房隔离;读写隔离;动静分离;热点/爬虫隔离;资源隔离;故障隔离 限流技术:处理机制(拒绝服务;排队或等待;降级);限流手段(限制总并发数;限制瞬时并发数;限制时间窗口内的平均速率);限流算法(计.


 部署方案

系统的部署方案将直接影响系统的可用性;线上环境一般都通过多实例方案确保系统可用性。多实例方案是通过多个备份来保障可用性,即便部分实例失效时,也不会导致整体服务不可用。

1.  主从方案

一般中间件都是用此方案,当主不可用时,让从服务器迅速承接主的工作,或者迅速从从服务器中选举出一个新的主。以下是常用中间件主从方案:

1)   RocketMQ

所有消息都发到master服务器,slave服务器保持和master服务器同步;master失效时,消息不能继续发送到master服务器对应的队列,但可以消费slave服务器的数据。

2)   Kafka

集群内部维护着ISR列表,将所有与leader同步的服务器放在ISR列表中,当leader失效时,从ISR中选举出一个leader服务器来替代失效的leader。

3)   Zookeeper

Zookeeper内置选举算法,通过ZAB协议,当leader失效时快速从所有follower中选举出一个leader服务器,所有flower与leader保持同步。

4)   Redis集群

Redis集群有多中部署方式,每种方式的主从方案都有所不同,基本上都是master不可用时,从slave中选举出一个master,来替代失效的master。

5)   Mysql集群

Slave保持和master同步,所有写操作都到master库中,可以从slave读取数据。Mysql不提供主从方案,一般需要配合数据库中间件一起使用。

2.  多实例方案

一般而言,生产环境中,公司的服务实例都是多实例的,防止单点故障。

1)   无状态部署方案

所有服务器内部不包括状态信息,当服务能力不足时,通过增加服务器的方式水平扩展服务能力;一台服务器不可用,也可以将流量切到其他的服务器。

业务系统一般都是用此方案,系统内部无状态,水平扩展非常方便。

2)   有状态部署方案

服务器内部有状态,需要通过某些方式确定每个服务器的状态。例如上面讨论的RocketMQ、Kafka、Zookeeper等,服务器内部都有主或从标识,鉴于这些中间件的优秀设计,他们都可以通过水平扩展主服务器,可以线性的提升服务能力。

有些场景中,需要将业务系统设计成有状态的,在方案设计和部署时,需要考虑特别注意,以免系统的水平扩展能力受限。

 隔离技术

隔离技术的核心是防止压力、异常等在多系统间传导,导致服务不稳定甚至彻底不可用。常见的处理手段有:

1.  业务隔离

营销活动一般变化块,每次活动各不相同,为了防止对常规业务、核心业务产生影响,可以从业务上就区分开,让他们独立运行、互不干扰。

2.  数据隔离

营销活动的db、缓存、消息和核心业务隔离开,避免营销流量较大时,核心业务无法使用。

3.  进程隔离/系统隔离

营销活动单独拆分为一个系统,这样可以避免开发、运行过程中相互影响。

4.  线程隔离

为不同的任务创建不同的线程池,避免争抢相同的资源。

5.  集群、机房隔离

例如:异地多活方案。

6.  读写隔离

例如:db写主库,主、从都可读。

7.  动静分离

静态内容通过cdn缓存,动态内容通过ajax请求,可以极大的降低带宽。

8.  热点/爬虫隔离

识别并将这些流量导引到单独集群或者直接拦截掉。

9.  资源隔离

防止因为抢夺服务器资源而相互影响。

10.  故障隔离

应规避故障向其他系统传导,例如当交易有问题时,商品页面应该能够正常展示,不受影响。

例如,如果常规业务和营销活动使用的是相同的DB实例,当营销活动的流量过大时,有可能影响到其他业务的正常进行;营销活动的需求往往变化频繁,如果放在同一个系统中,可能会相互影响,甚至影响核心业务的稳定;等等。

 限流技术

限流技术的核心是在流量超过系统承受极限时,以牺牲部分请求为代价,保证大多数请求正常的一种手段;另外,限流也可以用来防刷、

1.  处理机制

1)   拒绝服务

如:定向到错误页或告知资源没有了。

2)   排队或等待

如:比如秒杀、评论、下单。

3)   降级

如返回兜底数据或默认数据,如商品详情页库存默认有货。

2.  限流手段

常见使用场景有:限制远程接口调用速率、限制MQ的消费速率;通过网络连接数、网络流量、CPU或内存负载等来限流。

1)   限制总并发数

如:设置数据库连接池、线程池的最大并发数。

2)   限制瞬时并发数

如nginx的limit_conn模块,用来限制瞬时并发连接数。

3)   限制时间窗口内的平均速率

如Guava的RateLimiter、nginx的limit_req模块,限制每秒的平均速率

3.  限流算法

相关博客见《限流方案》,地址:https://yq.aliyun.com/articles/278092

1)   计数器

有时候我们控制最大并发数、累计调用量,如每个ip、用户调用接口的频率,使用分布是缓存的计数器可以很方便的帮我们实现此需求。

计数器实现的限流器可以有多个变种,可以是某一个维度的限流,如以ip、用户、接口、系统等维度;也可以在这些维度上加上时间窗口,如:每分钟某个ip下的调用量不能超过1000,等等。

2)   令牌桶

令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求。

令牌桶限制的是平均流入速率,允许突发请求,只要有令牌就可以处理,支持一次拿多个个令牌,并允许一定程度突发流量。

3)   漏桶

漏桶则是按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝。

漏桶限制的是常量流出速率,即流出速率是一个固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2,从而平滑突发流入速率。

4)   令牌桶 VS 漏桶

令牌桶允许一定程度的突发,而漏桶主要目的是平滑流入速率;两个算法实现可以一样,但是方向是相反的,对于相同的参数得到的限流效果是一样的。

4.  限流种类

1)   接入层限流

限流总并发/连接/请求数,如tomcat中的 Connector配置。

限流总资源数;例如db最大连接池数目。

2)   应用级限流

限流某个接口的总并发/请求数

限流某个接口的时间窗请求数

3)   分布式限流

基于分布式缓存实现。

在nginx层通过openresty通过计数器、令牌桶、漏桶等算法,可以限制请求到达后端服务器。

在业务系统中,收到请求以后根据计数器、令牌桶、漏桶等算法限制请求。

 降级技术

降级是利用有限资源,保障系统核心功能高可用的一种有损的架构方法。

1.  降级预案设计原则

候选方案要简洁,不要把系统复杂化。

考虑降级的收益和影响成本,设计收益率最高的方案。

降级预案需要定期review:业务复杂度变更;系统重要级别提升。

2.  降级手段

1)   针对上游的降级

梳理上游系统等级;设计限流降级方案和开关。

常见手段有:限流降级;按照用户质量,将高风险用户、爬虫优先降级;按照上游系统等级,将低级别系统的资源调度到高级别系统。

2)   针对下游的降级

梳理依赖的影响程度和范围;设计候选降级方案和开关。

 熔断技术

Hystrix是目前使用的最多的一个熔断器,其他熔断器的原理和Hystrix也基本类似,所以就不过多讨论。下图是Hystrix的工作原理图,更多详细内容可以参考Hystrix文档。

 695aa9d28ece3ed404cb97fc5635b4fe01f085f6

 

 

相关文章
|
4月前
|
存储 容灾 关系型数据库
OceanBase 高可用性架构解析
【8月更文第31天】在大数据和云计算蓬勃发展的今天,数据库作为数据存储的核心组件,其稳定性和可靠性直接影响到整个系统的性能。OceanBase 是由阿里巴巴集团自主研发的一款分布式关系型数据库系统,旨在为大规模在线交易处理(OLTP)场景提供高性能、高可用性的解决方案。本文将深入探讨 OceanBase 是如何通过其独特的架构设计来确保数据的高可用性和容灾能力。
259 0
|
Oracle 关系型数据库 MySQL
OceanBase实践入门:高可用原理和容灾方案
OceanBase的多副本(奇数)设计,以及使用Paxos协议同步事务日志,是OceanBase高可用能做到自动切换(RTO约20s)和不丢数据(RPO=0)的关键。OceanBase在这个设计上还衍生出很多特性:如负载均衡和异地多活等。
5572 0
|
5月前
|
Kubernetes 应用服务中间件 nginx
搭建高可用k8s
搭建高可用k8s
85 6
|
6月前
|
负载均衡 监控 网络协议
高可用架构设计
高可用架构设计
249 1
|
存储 负载均衡 监控
高可用
当今数字化时代,高可用性已经成为许多企业和组织的重要关注点。无论是云计算、大数据、电子商务还是日常生活中的各种应用程序,高可用性都是确保系统稳定运行和用户满意度的关键因素。本文将深入探讨高可用性的概念、重要性以及实现高可用性的方法。
|
7月前
|
消息中间件 缓存 数据库
高可用之故障隔离
【2月更文挑战第21天】
|
容灾 测试技术 数据库
第四章:OceanBase集群技术架构(数据可靠及高可用)
第四章:OceanBase集群技术架构(数据可靠及高可用)
367 0
|
存储 缓存 NoSQL
互联网开发高可用高性能那点事
互联网开发高可用高性能那点事
|
存储 安全 NoSQL
|
设计模式 负载均衡 算法
【高可用架构】高可用性架构模式
随着企业客户部署的任务关键型基于web的服务的数量不断增加,对设计最佳网络可用性解决方案的深入理解的需求前所未有地重要。高可用性(HA)已成为此类系统开发的关键方面。高可用性简单地指的是一个组件或系统持续运行一段时间。