zenoh rpc 内部实现简单说明
以前简单提过zenoh rpc,整体来说功能点很不错,但是目前实现上相对简单,以下简单说明下内部实现处理
整体内部实现
整体上并没有太多特殊的地方,核心还是利用了zenoh 的declare_queryable 能力,对于服务的发现,服务访问,基于了key_exps
Server 处理
- 参考图
如下图,zenoh rpc 对于服务定义了一个rpc 抽象接口,具体的服务需要实现定义(call 进行实际方法的处理,属于一个服务的dispatcher ),每个服务注册基于session zid 作为唯一标识进行区分,会在@rpc/<id>/**
上注册 declare_queryable 处理能力,包含了rpc 实际方法处理以及metadata 的查询,对于实际服务的方法调用都是query.replay 进行数据response 处理,当然还注册了基于服务名的liveliness token(此能力很强大,可以进行实时状态的追踪,但是目前的rpc 实现缺少使用),在内部方法调用处理上基于了server 提供的service_call 会基于key 进行拆分(包含了id,服务名称,方法名称)
client 处理
client 处理部分基于了server 抽象的一个RPCClientChannel,处理上如下图,目前比较多,client 部分需要自己实现一个获取服务id 找服务的方法,实际client 做的事情比较多,官方代码中有一个示例可以参考
说明
基于zenoh 作为rpc 的传输层是一个很不错的选择,可以实现灵活的跨网络访问,目前zenoh rpc 上有利用到zenoh 的一些新特性(比如liveliness)但是目前能力上还是比较弱的,实际上我们可以参考官方的机制,自己扩展,同时也可以实现灵活的跨语言处理(目前zenoh 以及提供了不少语言的sdk),当前源码也相对比较简单,可以阅读学习下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-01-14 caddyserver 新架构
2022-01-14 How Sandstorm Works
2022-01-14 jimfs java 内存文件系统实现
2022-01-14 使用kind 部署k8s in docker
2022-01-14 来自Castled 官方的一篇性能对比
2020-01-14 grok_exporter v1.0 rc 发布
2020-01-14 Linux libreoffice 字体问题解决