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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号