1、前言说明
因为业务系统使用了Tars实现服务的注册、发现等分布式应用。需要了解其原理以及相关实现方法,方便故障的排除、性能优化等。
本文档基于Tars官方资源仓库https://github.com/TarsCloud/TarsCpp.git学习,重点描述rpc模块客户端以及服务端的网络模型。方便其它开发人员学习。
如果有错误欢迎指正。
2、服务端网络结构
Connection:一个连接的信息以及相关操作,支持Tcp、Udp。包含两个发送队列:普通队列、高优先级队列。消息包收、发,以及协议解析等操作。完整包解析后添加到业务线程的队列中,如果队列满则丢弃。
ConnectionList:管理所有Connection。
NetThread:收发包,连接管理,多线程(可配置),采用epoll ET触发实现收发包,连接管理,多线程(可配置),采用epoll ET触发实现。
BindAdapter:绑定端口类,用于管理servent对应的绑定端口的信息操作。
HandleGroup:管理BindAdapter,可以实现Adpater分组管理,Handle即业务线程(个数可配置)。同一组消费同一个消息队列。
Servant:进行业务消息的处理,由此派生出业务类实现自己的业务逻辑。
ServantHandle:Handle的子类,管理Servant。
3、客户端网络结构
AdapterProxy:具体服务器某个节点的本地代理,管理到服务器的连接,以及请求超处理。
EndpointManager:管理AdapterProxy。
ObjectProxy:远程对象代理,负责路由分发、负载均衡、容错,支持轮询/hash/权重。
ServantProxy:远程对象调用的本地代理,支持同步/异步/单向,Tars协议和非Tars协议。
AsyncThread:异步请求的回调处理线程。
CommunicatorEpoll:客户端网络处理。
Communicator:网络线程管理。