DMicro
背景
DMicroGoswoolebeegogoframegingo-microgo-zeroerpc
golang
tcpwebsocketquicunixsocket
erpcgoframeDMicro
概述
DMicrodrpcerpc
drpcDMicroDMicroerpc
DMicrogoframegoframe
DRpc
对等通信对等Api高性能非阻塞异步IO自定义Proto兼容http协议自定义CodecHook点插件系统Push消息session管理Socket抽象断线重连过载保护负载均衡心跳机制平滑重启...
DServer
快速构建平滑重启多进程支持单/多进程一致预定义命令行ctrl命令管理服务可观测可控制应用沙盒
DMicro
RegistrySelectorEventbusSupervisorCode genTracingMetricsBrokerOpenAPI
架构
设计理念
DMicro
- 面向接口设计,保证代码稳定,提供灵活定制。
- 抽象各组件的接口,高内聚,低耦合。
- 分层设计,自上而下逐层封装,利于稳定和维护。
- 高性能,高可用,低消耗。
- 对开发友好,封装复杂度。
- 提供丰富的组件及功能,让开发专注业务。
DMicro
Clarity(清晰)Simplicity(简单)Productivity(生产力)
无论工作,还是做开源项目,都应该保持这三个原则,养成良好的习惯。
面向接口设计
DMicro
下图展示的是消息的发送的流转流程,可以看到,所有的功能点都被抽象成了接口,每个功能点都提供了不同的实现.
会话 Session
Rpcsessionsessiondrpcsession
EndpointClientServerApi服务端客户端服务端多个客户端一个多个文件描述符数据/属性
SessiondrpcSocketMessageContextsession
- 获取连接信息
- 控制连接的生命周期(超时时间)
- 控制单次请求的生命周期(超时时间)
- 接收消息
- 发送消息
- 创建消息的上下文
- 绑定会话的相关信息(如用户信息)
- 断线重连
- 主动断开会话.
- 健康检查
- 获取连接关闭事件
- 为会话设置单独的id
Sessioninterface{}EarlySessionBaseSessionCtxSessionSessionSession
EarlySessionBaseSessionCtxSessionSession
SessionCtxSession
Message
MessageHeaderBody
Message interface{}
SizeTransfer-Filter-PipelineSeqMTypeServiceMethodMetaBodyCodecBody
协议 Proto
消息MessageProto
接口的定义如下:
Version()PackMessageUnpackMessage
HttpJsonRawProtobufJsonRpc
RAW
其他协议可以参考代码.
编码 Codec
drpcCodec
接口的定义如下:
IDNameMarshalUnmarshal
FormJsonplainProtobufXML
连接 Socket
Socketnet.Conn
SocketSessionSessionSocket
Socket
TCP V4TCP V6Unix SocketKCPQUIC
支持对连接的性能调优.
SetKeepAliveSetKeepAlivePeriodSetReadBufferSetWriteBufferSetNoDelayControlFD
有机的组合
DMicroDMicro
接下来我们要讲到实现这些能力的基础.插件系统.
插件 Plugin
插件系统给框架带来了极大的扩展性和灵活性,是整个框架的一个灵魂模块,有了它,框架就有了无限可能。
什么样的插件系统才能算是优雅呢?我能想到的有以下几点:
hookhookhookhook
drpcEndpoint
钩子 Hook
组件
有了插件,就能通过插件的组合,编写综合功能的组件,目前框架提供一些内置的组件,
服务端 Rpc Server客户端 Rpc Client服务注册 Registry服务发现 Selector事件总线 EventBus进程管理 Supervisor
即将提供:
链路追踪 Tracing统计告警 Metrics限流熔断 Broker
限于篇幅的原因,具体组件的实现,这里就不深入讲解,请关注后续的文章.
未来展望
DMicro
接下来的方向主要是往易用性和可靠性方向发展.
易用性:
dmctl
可靠性:
- 可观测性
- 链路追踪
- 指标信息
- 日志流
- 生产可用
- 测试用例的完善
- 代码覆盖率
- 性能调优
DMicro
DMicroDMicroDMicroForkpr