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

05|逻辑功能开发:网络层Server端如何选型?

本课程为精品小课,不标配音频
你好,我是文强。
前面我们完成了项目初始化和基础模块的开发,这节课我们正式进入逻辑功能部分的开发。我们第一个要做的就是网络 Server 模块。
开发网络 Server 模块的核心是:从业务需求视角出发,分析 Server 应该具备哪些能力,从而根据这些信息选型出技术层面网络层和应用层的协议
前面我们讲到,第一阶段我们会完成消息队列中的“元数据服务”那么接下来我们就来看一下这个元数据存储服务的网络 Server 怎么选型。

网络 Server 模块选型

先来看一下元数据服务(Placement Center)的架构图。
在前面的定义中,我们的元数据服务有两个功能:
分布式的 KV 存储能力:需要给 Broker 集群提供分布式的 KV 存储能力,从性能来看,需要支持较高并发的读写。
集群管控和调度能力: 根据运行信息对 Broker 集群进行管控、调度,比如元数据更新、Leader 切换等等。
所以从网络模块的角度来看,就需要能支持:较高的吞吐和并发能力。那协议怎么选择呢?
从技术上来看,很多开源组件会选择 TCP + 自定义协议来完成网络 Server 的开发。我们最终选择的是基于 gRPC 协议来实现我们的 Server。考虑如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. gRPC协议在网络Server模块选型中具备现成的Server端库和多语言SDK,以及基于HTTP2和Protobuf实现的高吞吐性能。 2. 元数据服务需要提供基于gRPC协议的数据面Server和基于HTTP协议的管控面Server,以支持Broker集群的服务和管理操作。 3. 在Rust中使用Axum框架实现HTTP Server,需要提供Restful规范的接口、多版本接口管理、返回JSON格式的请求和处理各种业务逻辑。 4. 使用select语法等待多个并发分支,以正确处理进程停止信号,而panic语法用于退出进程的信号。 5. HttpServerState结合app.with_state允许将自定义变量传递给业务逻辑,如MySQL driver,以执行数据查询。 6. Route merge语法方便管理多个route,而success_response方法使用serde_json将数据编码成json格式进行返回。 7. API版本管理的实现逻辑简单,通过自定义函数实现。 8. gRPC Server的实现需要编写protobuf文件、编译protobuf文件、实现RPC Service、启动gRPC Server和运行测试用例。 9. 使用tokio::spawn异步运行HTTP Server和gRPC Server,以避免阻塞主进程,并通过signal::ctrl_c()阻塞主进程等待接收ctrl + c信号,执行相关回收逻辑.

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《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
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)