06 | RPC实战:剖析gRPC源码,动手实现一个完整的RPC
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
gRPC是一款高性能、跨语言的RPC框架,采用HTTP/2协议和Protocol Buffer序列化方式,充分利用HTTP/2的多路复用特性,解决了HTTP/1.X的性能问题。本文通过剖析gRPC源码,以HelloWorld示例为例,介绍了如何使用Protocol Buffer定义接口、生成消息对象和gRPC通信所需的基础代码。在调用端代码中,通过生成的Stub对象发起RPC调用,实现了RPC通信的透明化。文章深入讲解了gRPC的请求发送原理,包括对象序列化、HTTP/2协议的特点以及构造HTTP/2 Frame等细节。此外,还介绍了服务提供方收到请求后的处理流程,以及开启Netty Server并绑定编解码逻辑的步骤。通过本文,读者可以快速了解gRPC的工作原理和实现一个完整的RPC框架的方法。文章还提到了gRPC的负载均衡、服务发现等功能,以及通过Stream方式来调用服务以提升调用性能。整体而言,本文通过深入剖析gRPC源码和示例代码,使读者能够全面了解gRPC的技术特点和工作原理。
《RPC 实战与核心原理》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- 雨霖铃声声慢InputStream封装了底层传输的字节缓冲区实现,它通常是一组通过指针连接起来的内存块的集合,这些内存块由网络的零拷贝获取的。由于不能保证能够从内存块中获取一个byte[],我们不能传递一个简单的byte[]或byte[][],并且可能需要一个目标byte[]来从缓冲区中获取数据。 另外byte[]的缺点是需要从缓冲区中复制一个大的、连续的数据,而实际上没有什么方法可以使它执行得更好。当使用压缩时,我们也不知道消息未压缩的长度,它是动态解压缩的。
作者回复: 没错,避免二次拷贝
2020-03-03468 - 超威丶难道http2的核心实现不就是基于流实现?
作者回复: stream传输是建立在多路复用的基础上
2020-03-029 - 忆水寒老师,有个疑问。按道理客户端发起一次rpc调用,通过序列化、网络传输、服务端处理再响应,这期间有时间差的。上面客户端代码除非是阻塞的,否则不可能立马得到结果吧。
作者回复: 是的,例子里面的需要在客户端等待
2020-03-027 - 飞翔老师 有说法是内部调用用rpc 外部用http 这是为什么呀
作者回复: 内部应用之间通信更强调性能
2020-03-0453 - cricket1981以流的方式处理请求数据,适合请求数据数据量大情况。好比Sax和Dom区别。
作者回复: 在传输层也需要用stream,避免二次拷贝
2020-03-022 - 钱我们讲到,在 gRPC 调用的时候,我们有一个关键步骤就是把对象转成可传输的二进制,但是在 gRPC 里面,我们并没有直接转成二进制数组,而是返回一个 InputStream,你知道这样做的好处是什么吗? 这个不知道哎😂 猜测是为性能故,看评论区的讨论,猜测是正确的,不过细节还是不太清楚,需要后补一下。 Inputstream——避免二次拷贝(序列化+encode)——更高的性能。
作者回复: 👍
2020-05-131 - 密码123456为什么能避免二次拷贝?
作者回复: 序列化和encode
2020-04-271 - eason2017老师好,可以把 为客户端和服务器端生成消息对象和 RPC 基础代码 的命令提供出来吗?谢谢。
作者回复: 可以看下grpc官网或者搜索一下
2020-03-2921 - 蚂蚁内推+v这样跟HTTP2有什么区别呢
作者回复: grpc是用http2来传输的
2020-03-06 - tulip老师可以出一期go 的嘛2020-03-29228