分布式系统:FastRPC eRPC

数据中心的RPC可以既通用且快

这篇是2019年NSDI会议的最佳论文[1]。看到6.824的2020年课程也即将讲这篇文章,安排在明年4月17日。这里先自己试着读一下。

作者要达成什么目标?

  • 不用特殊的硬件。(比如RDMA,比如不丢包的网络,比如FPGA)——只用普通的网卡,普通的交换机,达到高速RPC。
    • 小消息速率快
    • 大消息带宽高
    • 能上规模scales well
  • 可以很通用——可以作为一个drop-in的网络库,直接用在现有的软件中。
  • 在UDP(或者InfiniBand的不可靠数据报传输协议)之上实现。能处理丢包、网络拥堵、RPC请求在背景执行(异步?)。

基本思路

optimize for the common case

  • 针对普通情况(common case)做优化。对于小概率事件则不优化,故而导致小概率事件发生时可能更慢。
  • 普通情况的假设是:
  1. 网络不丢包(不需要重发)。
  2. 消息都很小——1个UDP包就装得下。
  3. 网络不拥堵。
  4. RPC处理程序都很小。
  • 疑问:刚才不是说不用特殊硬件吗?怎么又假设网络不丢包?
    • 答:数据中心内会丢包都是因为交换机缓冲区满了!eRPC限制每台机outstanding的网络流量,最多不能超过带宽延迟乘积(19k)。这既保证了用满带宽,又足够小,不会造成交换机缓冲区(12MB)满——也就极少会有丢包情况发生。

关键数据结构:msgbuf

消息缓冲区。

  1. 支持DMA。用户程序、eRPC和网卡共享这块内存。
  2. 零拷贝。就是说CPU不需要把数据从内存的一个区域拷贝到另一个区域。应用程序将数据写入到msgbuf以后,数据由网卡以DMA方式直接读取。
  3. 1个msgbuf存放1条消息。这条消息可以是单个UDP包,也可以是多个,根据消息长度决定。假定通常情况是1个包的小消息。
    Figure 2
    这张图解释了msgbuf的排列。
  • 数据区是连续的,所以应用程序只要把数据区当成一个连续区域,尽管放数据就好了。
  • 如果1个UDP包无法发送完整个RPC request,数据区就会被拆分成N块(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值