如何构建高可用的系统(三):服务治理篇

本文探讨如何构建高可用系统,重点在于服务治理,包括下游管理的降级、超时和熔断策略,资源隔离的实现以及限流的多种算法和应用场景。通过这些方法,确保系统在面对不可靠的下游服务和高负载时仍能保持高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何构建高可用的系统(一):Overview中, 我提到了以下几点:

  1. 系统依赖的一切下游系统都是不可靠的, 它们随时可能出问题
  2. 系统的上游可能有多个, 而且每个上游的行为都是不可预知的。如果某个上游抽风把我的系统搞崩, 那么就会影响所有的上游
  3. 高可用是有前提条件的,一个系统对当前的负载能提供高可用, 不代表负载上升之后仍然高可用

如果把这几个问题,映射到现在非常流行的“微服务架构”下,就可以统一用“服务治理”来概括。 下面我们具体探讨下,如何解决这几个问题。

1. 下游管理

系统所依赖的各个下游系统是不可靠的, 它们随时可能会出问题。 比如我们开发了一个用户服务, 会访问数据库、缓存等, 那这些下游的数据库、缓存出问题的时候, 我们该怎么办呢?

1.1 降级措施

当下游出现问题时, 我们的服务或多或少都会受影响。 为了保证核心场景仍然高可用, 我们需要把相关功能降级,以减少损失。 比如以下场景:

当数据库挂掉的时候,所有对数据库的读写都会失败。 为了使创建用户的功能仍然对外可用, 我们可以选择打开降级开关, 把创建用户的请求发到消息队列中, 在数据库恢复之后, 从队列中拉取消息, 再把数据写入数据库中。

对上游来说,写入成功之后, 当然得能通过读接口获取到数据。 因此, 我们还得把数据写入到缓存中, 这样即使数据库挂了, 上游也能够尽量不受影响。

这里只是随便举了个降级的例子, 在实际场景中, 降级处理方案还是得仔细思考,具体问题具体分析。

1.2 超时

在很多场景下, 服务接收到一个请求后, 会调用非常多的下游, 当调用某个下游的请求迟迟没有得到响应, 会造成两个结果:

  1. 整个请求的响应时长上升, 调用方在等待一段时间后,不再等
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值