Remote Procedure Call as a Managed System Service

Remote Procedure Call as a Managed System Service
复制标题

DOI:
10.48550/arxiv.2304.07349
复制
发表时间:
2023-04
期刊:
ArXiv
影响因子:
--
通讯作者:
Jingrong Chen;Yongji Wu;Shih-Kai Lin;Yechen Xu;Xinhao Kong;T. Anderson;Matthew Lentz;Xiaowei Ya
Jingrong Chen;Yongji Wu;Shih-Kai Lin;Yechen Xu;Xinhao Kong;T. Anderson;Matthew Lentz;Xiaowei Ya
中科院分区:
其他
文献类型:
--
作者:
Jingrong Chen;Yongji Wu;Shih-Kai Lin;Yechen Xu;Xinhao Kong;T. Anderson;Matthew Lentz;Xiaowei Ya

文献摘要

相似文献

远程过程调用 (RPC) 是云计算广泛使用的抽象。程序员为每个远程过程指定类型信息,编译器生成链接到每个应用程序的存根代码,以将参数编组和解组到消息缓冲区中。然而,应用程序和服务运营团队越来越需要对服务之间的 RPC 流具有高度的可见性和控制力,导致许多安装使用 sidecar 或服务网格代理来实现可管理性和策略灵活性。这些 sidecar 通常涉及对存根编译器刚刚仔细组装的 RPC 数据进行检查和修改,从而增加了不必要的开销。此外,升级不同的应用程序 RPC 存根以使用 RDMA 或 DPDK 等高级硬件功能是一个漫长且复杂的过程,并且通常与 sidecar 策略控制不兼容。在本文中,我们提出、实现和评估了一种新颖的方法,其中 RPC 编组和策略执行作为系统服务而不是作为链接到每个应用程序的库来完成。应用程序像以前一样向 RPC 系统指定类型信息,而 RPC 服务执行策略引擎并仲裁资源使用,然后编组根据底层网络硬件功能定制的数据。我们的系统 mRPC 还支持实时升级,以便策略和编组代码都可以透明地更新到应用程序代码。与使用 sidecar 相比,mRPC 将标准微服务基准 DeathStarBench 的速度提升高达 2.5$\times$,同时具有更高水平的策略灵活性和可用性。
Remote Procedure Call (RPC) is a widely used abstraction for cloud computing. The programmer specifies type information for each remote procedure, and a compiler generates stub code linked into each application to marshal and unmarshal arguments into message buffers. Increasingly, however, application and service operations teams need a high degree of visibility and control over the flow of RPCs between services, leading many installations to use sidecars or service mesh proxies for manageability and policy flexibility. These sidecars typically involve inspection and modification of RPC data that the stub compiler had just carefully assembled, adding needless overhead. Further, upgrading diverse application RPC stubs to use advanced hardware capabilities such as RDMA or DPDK is a long and involved process, and often incompatible with sidecar policy control. In this paper, we propose, implement, and evaluate a novel approach, where RPC marshalling and policy enforcement are done as a system service rather than as a library linked into each application. Applications specify type information to the RPC system as before, while the RPC service executes policy engines and arbitrates resource use, and then marshals data customized to the underlying network hardware capabilities. Our system, mRPC, also supports live upgrades so that both policy and marshalling code can be updated transparently to application code. Compared with using a sidecar, mRPC speeds up a standard microservice benchmark, DeathStarBench, by up to 2.5$\times$ while having a higher level of policy flexibility and availability.