Rust 实战 · 手写下一代云原生消息队列
15
15
1.0x
00:00/00:00
登录|注册

11|性能提升:优化客户端访问和服务端读写性能

本课程为精品小课,不标配音频
你好,我是文强。
到了第 10 课我们其实就完成了本次课程主体部分的开发。这节课我们主要来看一下如何提升集群的性能和可用性。
集群的性能提升可以分为客户端和服务端两部分,先来看下图:
这是 Placement Center 的读写示意图。从技术上分析,重点可以关注以下三个方面来提升性能和可用性。
客户端基于连接池复用连接,避免连接频繁地创建、删除,从而提升性能。
实现自动化重试机制,以解决当出现可恢复的异常时(比如网络抖动),可以自动进行重试,从而提升请求的成功率。
均摊服务端多个节点之间的压力,由 Leader 节点负责写请求,所有节点负责读请求,避免 Leader 节点的单点瓶颈。
第 5 课我们基于 gRPC 框架实现的网络层的基础上,我们来看一下在 Rust 中如何实现 gPRC 的连接池。

基于 mobc 库实现连接池

如上图所示,连接池的原理本质上就是通过预先创建一批连接,并将可用连接保持在一定数量范围内。当客户端发起访问时,从连接池取出可用连接,从而避免每次创建 / 销毁连接产生的时间和资源开销。
从代码实现角度看,连接池的实现并不复杂,就是细节比较多,比如连接被动关闭时如何自动创建连接,如何保证连接不超过最大可用连接,空闲连接回收,连接心跳保持等等。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 集群性能提升的关键点包括客户端和服务端两部分,其中客户端可以通过连接池复用连接、实现自动化重试机制来提升性能,服务端可以通过均摊多个节点之间的压力来避免单点瓶颈。 2. 在 Rust 中实现 gRPC 的连接池可以使用 mobc 库,通过实现 Manager trait 和创建全局可访问的连接池变量来实现连接池。 3. 使用 DashMap 缓存每个 IP 和 gRPC Service 对应的连接池,通过获取可用连接来访问服务,实现了连接池的管理和使用。 4. 客户端实现统一的自动重试机制,通过封装重试策略的核心代码,统一封装了重试策略,以及对每个 Service 的调用做一个分流。 5. 服务端的性能优化可以通过均摊多个节点之间的压力来避免单点瓶颈。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 实战 · 手写下一代云原生消息队列》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)