RPC、Dubbo 和网络通讯

     之前给同事解释 RPC,由于紧张,语言没有组织好,解释得很乱,现在重新组织一下语言之后书面化记录下来。

     RPC 的全称是远程过程调用(Remote Produce Call),本质上应该将其看作是一种编程范式,这种编程范式,规定了这样的一件事情:RPC 方案应该能够让我们像调用本地方法一样,去调用远程的一个函数,它可以帮助开发人员屏蔽底层的通讯细节,从而专注于业务开发。RPC 是分布式应用系统的核心解决方案之一。

RPC

     RPC 描述的是这样的一种,在分布式场景下的编程范式,实际上和网络协议是没有强关联的关系——既不是对立或并列,也不是包含与被包含的关系。分布式应用开发必然牵涉到多台机器之间的通讯,RPC 客户端调用远程过程,也必须基于某种网络通讯协议,因此才和网络协议扯上关系。

     可是为什么有了 http 之类的应用层通讯协议,RPC 框架往往还会自己去实现一套通讯协议,例如 Dubbo 默认实现的 dubbo 通讯协议,Sofa RPC 实现的 bolt 通讯协议。这是因为 http 通讯是无状态的,这意味着 http 通讯的参与方之间是短连接的,每次通讯都需要重新握手与挥手,这在性能上是一种很大的损失。RPC 框架基于 TCP 协议重新设计的通讯协议,能够定制更加精简的报文结构和更加简单的通信次序,往往还会被设计成长连接的,因此具有更高的性能。但是大多数的 RPC 框架其实都支持多种通讯协议,例如 Sofa RPC 除了支持内置的 bolt 协议,还支持 http、hession2 等。

     我们在理解 Dubbo 的时候,不能只将其简单理解为一个 RPC 通讯框架——通过为应用层动态生成 RPC 的网络通讯代理,使网络通讯细节对业务开发人员透明化,这仅仅只是 dubbo 的数据面作为一款通讯工具最基本的功能而已,在过去几年,Dubbo 早就发展成一个完善的微服务开发框架,拥有完善的服务治理能力。

RPC

     给同事解释 RPC 的背景是如下图 mPaaS 中,手机客户端与移动网关之间的 RPC 通讯方式(图中的步骤 7):

RPC

     我问了蚂蚁负责 mPaaS 的开发同学,对方提醒我网关后管生成并向客户端分发的 SDK,实际上就包含了网络通讯代理,只不过这种场景下的 RPC 通讯方式,采用的通讯协议是 http。因此 mPaaS 能够提供“让我们像调用本地方法一样,去调用远程的一个函数”的编程体验,却并不能为了我带来 RPC 框架直接基于 TPC 协议实现的通讯协议的性能提升。

打赏
  • Copyrights © 2017 - 2025 杨海波
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信