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 实战 · 手写下一代云原生消息队列》
《Rust 实战 · 手写下一代云原生消息队列》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论