《即时消息技术剖析与实战》学习笔记11——IM系统如何保证服务高可用
IM 系统的不可用主要有以下两个原因:
一是无法预测突发流量,即使进行了服务拆分、自动扩容,但流量增长过快时,服务已经不可用了;
二是业务中依赖的这些接口、资源不可用或变慢时,比如发消息可能需要依赖“垃圾内容识别”的 API 来进行消息内容的过滤,下推图片消息可能需要依赖图片服务获取缩略图来进行推流,会导致业务整体失败或者被拖慢而造成超时,影响服务的整体可用性。
如何保证系统的高可用呢?
一、流量控制
在即时消息系统中,突发超高流量时,为了避免服务器整体被流量打死,我们可以通过流控来扔掉或者通过排队的方式来保护系统在能力范围内的运转。
流控算法主要有漏桶算法和令牌桶算法。
二、熔断机制
当下游服务因访问压力过大而响应变慢或失败,依赖于下游的上游服务也会受到影响,出现整体性能被拖累变慢的情况,最终可能导致系统整体性能的雪崩。这种当下游服务出问题时,为了保护系统整体的可用性而暂时切断对下游服务的调用的行为就是“熔断”。
自动熔断机制主要通过持续收集被依赖服务或者资源的访问数据和性能指标,当性能出现一定程度的恶化或者失败量达到某个阈值时,会自动触发熔断,让当前依赖快速失败(Fail-fast),并降级到其他备用依赖,或者暂存到其他地方便于后续重试恢复。在熔断过程中,再通过不停探测被依赖服务或者资源是否恢复,来判断是否自动关闭熔断,恢复业务。
关于“熔断”,可以看这篇博客文章,写得很形象:分布式系统关注点(8)——99%的人都能看懂的「熔断」以及最佳实践
三、总结
限流、熔断机制和缓存,是应对系统高并发、保证系统高可用的有效利器。
后记
这篇文章于我的意义更多的是拓宽我的知识层面,让我不至于那么孤陋寡闻🤔
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现