GDP Streaming RPC 设计

导读:GDP (Go Develop Platform)是百度内使用的 RPC 框架,具备完善的 RPC Client 和 RPC Server 能力,可以用来开发 API、Web 后端服务等各种应用。GDP Streaming RPC 是基于 GDP RPC 能力开发的流式 RPC 框架,在实现功能的基础上设计的一套面向流式传输场景的传输框架,提供了流式传输应用场景的方案。百度内使用流式 RPC 方案首选为 baidu-rpc (开源项目为 brpc)streaming,GDP streaming 是 brpc streaming 的 Go 版本,为 Go 的开发者提供的接口方案。

一、streaming 介绍

1.1 解决的问题

在一些数据传输场景中, client / server 需要向对方发送&接收大量有序数据,这些数据非常大或者持续地在产生以至于无法放在一个 RPC 的消息体中。比如:分布式系统不同节点间传递的副本(replica) 或者语音数据。一个订单导出接口有 10 万条记录,如果使用传统 rpc,那么需要一次性接收到10万记录才能进行下一步的操作。

如果我们使用streaming rpc那么我们就可以接收一条记录处理一条记录,直到所有的数据传输完毕。client / server 虽然可以通过多次RPC把数据切分后传输过去,但存在如下问题:

  1. 如果并行发送,无法保证接收端有序地收到数据,拼接数据的逻辑相当复杂。
  2. 如果串行发送,每次传递都得等待一次网络RTT + 处理数据的延时,特别是后者的延时可能是难以预估的。

RPC 常见的通信方式有 简单 RPC、服务端流式 RPC、客户端流式 RPC、双向流式 RPC。它们主要的特点是:

简单 RPC:传入一个请求,返回一个响应。

服务端流式 RPC:客户端传入一个请求,服务端可以持续的返回多个响应,一个典型的例子是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。

客户端流式 RPC:客户端传入多个请求,服务端返回一个结束的响应,典型的例子是接收并处理日志文件。

双向流式 RPC结合前两者RPC的特点,双端都可以传入多个请求,返回多个响应。

图 1. rpc 常见的四种通讯模式

streaming 交互模型就是为了让大块数据以流水线的方式在 client / server 之间传递。实现的是双向流式 RPC。


1.2 设计目标

  • 协议兼容 brpc
  • 流状态可查询
  • 接收消息的顺序和发送消息的顺序一致,不同流程消息并行
  • 自定义序列化方式
  • <
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值