百度 RPC 框架 brpc 简介

JAVA herman 1349浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

9 月 14 日,百度正式在 GitHub 上基于 Apache 2.0 协议开源了其 RPC 框架 brpc。brpc 是一个基于 protobuf 接口的 RPC 框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有 RPC 协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc 的性能领跑于其他同类 RPC 产品。

brpc 类似于阿里的 dubbo,腾讯的 tars。

brpc 开发于 2014 年,主要使用的语言是 C++ 和 Java,是百度内部使用最为广泛的 RPC 框架,它经受了高并发高负载的生产环境验证,并支撑了百度内部大约 75 万个同时在线的实例。

brpc 在百度中使用的最常见的RPC框架,拥有60万个实例和500多种服务,在百度之内称为“baidu-rpc”。

什么是RPC?

互联网上的大多数机器通过TCP / IP互相通信。然而,TCP/IP只保证可靠的数据传输,我们需要抽象更多的来构建服务:

  • 数据传输的格式是什么?不同的机器和网络可能有不同的字节顺序,直接发送内存中的数据是不合适的。数据中的字段逐渐添加,修改或删除,新服务如何与较旧的服务进行交流?
  • TCP连接可以重用于多个请求以减少开销吗?多个请求可以通过一个TCP连接同时发送吗?
  • 如何与许多机器的集群谈话?
  • 当连接断开时应该怎么办?如果服务器没有响应怎么办?

RPC通过将网络通信抽象为“服务器上的客户端访问功能”来解决上述问题:客户端向服务器发送请求,等到服务器接收到 – >进程 – >响应请求,然后根据结果执行操作。

rpc

让我们看看问题如何解决。

  • RPC需要由protobuf完成的序列化。用户以protobuf :: Message的格式填写请求,做RPC,并在protobuf :: Message中从响应中获取结果。protobuf具有良好的前向和后向兼容性,用户可以逐步更改字段和构建服务。对于http服务,json用于广泛的序列化。
  • 连接的建立和重新使用对于用户是透明的,但是用户可以做出选择,说出不同的连接类型:短,池,单。
  • 机器被命名服务,可以通过执行发现的DNS, ZooKeeper or etcd。在百度里面,我们使用BNS(百度命名服务)。brpc也提供了“list://”和“file://”。用户指定负载均衡算法为所有机器的每个请求选择一台机器,包括:循环,随机,一致的哈希(murmurhash3或md5)和本地化感知。
  • 当连接断开时,RPC重试。当服务器在给定的时间内没有响应时,客户端失败,超时错误。

哪里场景可以使用RPC?

几乎所有的网络通信。

RPC无法做到一切,否则我们不需要TCP / IP层。但是在大多数网络通信中,RPC满足要求并隔离底层细节。

RPC常见疑问:

  • 我的数据是二进制的,使用protobuf很慢。首先这可能是一个错误的感觉,你必须用剖析器证明它,第二个许多协议支持携带二进制数据以及protobuf请求,并绕过序列化。
  • 我正在发送不能由RPC处理的流数据。实际上,RPC中的许多协议可以处理流数据,包括http中的ProgressiveReader,h2中的流,流rpc和作为专用流协议的RTMP。
  • 我不需要回复 有了一些引导,我们知道,在您的场景中,请求可以在任何阶段丢弃,因为客户端始终不了解情况。你真的确定这是可以接受的吗?即使您不需要回复,我们建议您发回小尺寸的回复,这些回复是不太可能的性能瓶颈,并且在调试复杂的错误时可能是有价值的线索。

brpc 是什么?

百度中使用的RPC框架遍布百度,其中有600,000多个实例(不包括客户端)和500多种服务,在百度中称为“ 百度rpc ”。现在只有C ++实现被打开了。

您可以使用它:

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 百度 RPC 框架 brpc 简介