RPC
RPC需要解决的问题有
- 函数映射;函数带有ID
- 数据转换成字节流;客户端和服务端是不同的进程,需要字节转换
- 网络传输:通信协议包含请求/响应数据和额外元数据
优势:
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
OSI网络通信模型中,RPC跨越传输层和应用层,表示层和会话层归并到应用层。再明确的说,我们使用RPC协议写的代码,既包含了应用层的逻辑又包含了发送接收网络数据的接口。编写代码时只要按此开发调用对应接口就可以和服务端通信了。而不必像socket通信一样,在完成业务层代码后,还需要底层搭建TCP传输层通信环境,再把需要发送的包丢进去才能发送。
对于RPC框架,核心包括三层:编解码层 协议层 网络通信层
在协议层中,存在特殊结束符'\r\n';变长协议以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度。
网络库使用socket api。提供易用 API,以封装底层 Socket API、连接管理和事件分发;实现支持tcp、udp 和 uds 等协议: 能够优雅退出、异常处理;性能上,为应用层 buffer 减少 copy
RPC Framework包括Log Metric Tracing,实现观测性。
字节在内的企业采用自研网络库的原因:
- 原生库无法感知连接状态(解决方法:引入epoll)
- 原生库有gorountine暴涨的风险(解决方法:建立池)
微服务与Service Mesh 被称为下一代微服务技术,Sservice mesh是微服务时代的TCP/IP协议。用其发明人的定义,它是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service mesh保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,然而对应用程序透明。 微服务也会出现过微导致传输和序列化开销越来越大的问题,对此,可将远程RPC调用优化为本地IPC