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

本课程为精品小课,不标配音频
你好,我是文强。
到了第 10 课我们其实就完成了本次课程主体部分的开发。这节课我们主要来看一下如何提升集群的性能和可用性。
集群的性能提升可以分为客户端和服务端两部分,先来看下图:

这是 Placement Center 的读写示意图。从技术上分析,重点可以关注以下三个方面来提升性能和可用性。
客户端基于连接池复用连接,避免连接频繁地创建、删除,从而提升性能。
实现自动化重试机制,以解决当出现可恢复的异常时(比如网络抖动),可以自动进行重试,从而提升请求的成功率。
均摊服务端多个节点之间的压力,由 Leader 节点负责写请求,所有节点负责读请求,避免 Leader 节点的单点瓶颈。
基于 mobc 库实现连接池

如上图所示,连接池的原理本质上就是通过预先创建一批连接,并将可用连接保持在一定数量范围内。当客户端发起访问时,从连接池取出可用连接,从而避免每次创建 / 销毁连接产生的时间和资源开销。
从代码实现角度看,连接池的实现并不复杂,就是细节比较多,比如连接被动关闭时如何自动创建连接,如何保证连接不超过最大可用连接,空闲连接回收,连接心跳保持等等。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

1. 集群性能提升的关键点包括客户端和服务端两部分,其中客户端可以通过连接池复用连接、实现自动化重试机制来提升性能,服务端可以通过均摊多个节点之间的压力来避免单点瓶颈。 2. 在 Rust 中实现 gRPC 的连接池可以使用 mobc 库,通过实现 Manager trait 和创建全局可访问的连接池变量来实现连接池。 3. 使用 DashMap 缓存每个 IP 和 gRPC Service 对应的连接池,通过获取可用连接来访问服务,实现了连接池的管理和使用。 4. 客户端实现统一的自动重试机制,通过封装重试策略的核心代码,统一封装了重试策略,以及对每个 Service 的调用做一个分流。 5. 服务端的性能优化可以通过均摊多个节点之间的压力来避免单点瓶颈。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 实战 · 手写下一代云原生消息队列》
《Rust 实战 · 手写下一代云原生消息队列》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论