通讯

一个RPC服务客户端代理中间件的设计过程的回顾

淺唱寂寞╮ 提交于 2019-12-03 22:55:33
一个RPC服务客户端代理中间件的设计过程的回顾 0 前言 近两年来,负责重新设计和开发一组RPC服务调用的中间件的通讯模块,包括RPC服务端模块(RPC服务容器I/O通讯模块),以及一个RPC客户端代理模块。 在整个设计开发过程中,经历了多次模块重构,终于实现预设的功能以及性能目标。 写这篇文章的目的,一是觉得有必要对这两年的思考、设计和开发过程做一次阶段总结,将这段时间的经验和尝试,以文字的形式沉淀下来,二是为了给将来的进步设定一个认知的基线。 1 设计需求 RPC服务通讯中间件的需求,主要设定了功能和性能两方面的内容。总的来说,实现一个高性能、低延迟的RPC服务中间件, 将客户端的业务处理请求,相对均衡地分配到后端服务执行。 1.1 功能需求 RPC服务中间件的通讯模块,主要包括客户端代理和服务端I/O通讯模块两部分组成,实现分布式服务的透明调用。 客户端代理中间件模块的主要功能包括: 接收业务请求并组成RPC请求消息,并发送到远端服务。 监听Socket连接获取服务端回复消息,从回复的RPC消息提取业务对象,返回给业务模块。 服务的发现。客户端可以动态的获取到指定服务实例的地址。 服务Socket连接的动态维护。如运行过程中关闭异常连接、新增连接等。 1.2 性能需求 性能需求主要在于整个通讯模块整体的吞吐量,以及单个消息的处理延时指标上。这些指标主要包括: