• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

百度 RPC 框架 brpc 简介

JAVA web前端中文站 2年前 (2017-10-13) 3843次浏览 已收录 0个评论
文章目录[隐藏]

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

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

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

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

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

什么是 RPC?

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

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

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

百度 RPC 框架 brpc 简介

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

  • 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 ++实现被打开了。

您可以使用它:

  • 构建可以在多个协议(在同一端口进行通话或者访问各种服务的服务器

 

  • 安静的 http / https,h2 / h2c(兼容 grpc,将很快被打开)。在 brpc 中使用 http 比 libcurl 更友好。
  • redis 和 memcached,线程安全,比官方客户更友善和更好
  • rtmp?/?flv?/?hls,用于构建实时流服务。
  • hadoop_rpc(尚未打开)
  • 通过 openucx 支持 rdma(即将开放)
  • 百度使用的各种协议:baidu_std,streaming_rpc,hulu_pbrpc,sofa_pbrpc,nova_pbrpc,public_pbrpc,ubrpc 和基于 nshead 的协议。
  • 使用 HTTP + json 访问基于 protobuf 的协议,可能来自另一种语言。
  • 使用 RAFT 协商一致的算法构建分布式服务(将在快速启动时启用)
  • 丰富的处理模式 
    • 服务可以同步或异步处理请求。
    • 同步或异步访问服务,甚至半同步访问。
    • 使用组合通道以声明方式简化复杂的客户端模式,包括分片和并行访问。
  • 通过 http 调试服务,并运行?cpu,堆和争用分析器。
  • 获得更好的延迟和吞吐量。
  • 使用您组织中使用的协议快速扩展 brpc,或自定义组件,包括命名服务(dns,zk,etcd),负载均衡器(rr,random,一致散列)

参考资料

  • https://github.com/brpc/brpc

【注:本文源自网络文章资源,由站长整理发布】


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:百度 RPC 框架 brpc 简介
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址