brpc学习笔记之概述

本文以官方文档为蓝本,摘取其中的关键点及自己欠缺的知识点。想获取全面了解,请阅读文末的官方文档连接。

https://github.com/apache/incubator-brpc/blob/master/docs/cn/overview.md

什么是RPC

RPC将网络交互类比为“client访问server上的函数”。

  • 数据序列化采用protobuf。
  • 用户无需关心连接如何建立,但可以选择不同的连接方式:短连接、连接池、单连接。
  • 服务发现(例如京东的jsf)。

哪里可以使用RPC

几乎所有的网络交互。RPC既可以解决问题,又能隔离更底层的网络问题。

常见质疑(可用于和杠精的辩论)

  • 数据非常大,用protobuf序列化太慢
    • 得用profiler证明慢了才是真的慢。
    • brpc中很多协议支持携带二进制数据,以绕过序列化。
  • 传输的是数据流,RPC表达不了
    • brpc中很多协议支持传递流式数据。
  • 我的场景不需要回复
    • 简单推理可知,你的场景中请求可丢可不丢,可处理也可不处理,因为client总是无法感知。这样不好。
    • 即使场景真的不需要,仍然建议用最小的结构体回复,通常不会是瓶颈,且有利于追查复杂bug。

什么是brpc

百度开源出来的工业级RPC框架,目前只有C++版本。业界口碑还不错。

brpc的优势

  • 接口友好
    • Server类,对应server端。
    • Channel类,对应client端。
    • Controller类,对应参数集合。
  • 服务可靠
    • 久经实战考验。
    • 可以curl查看server内部状态。
    • 分析在线服务的cpu热点、内存分配和锁竞争。
    • 通过bvar统计各种指标并通过/vars查看。
  • 性能好
    • 对不同客户端请求的读取和解析是完全并发的,用户也不用区分“I/O线程”和“处理线程”。
    • 对同一fd和不同fd的写出是高度并发的。
    • 尽量少的锁。
    • 服务器线程数自动调节。

References

https://zhuanlan.zhihu.com/p/95514207

https://github.com/apache/incubator-brpc/blob/master/README_cn.md

posted @ 2020-05-05 22:53  不写诗的诗人小安  阅读(899)  评论(0)    收藏  举报