gRPC and RESTful

什么是gRPC
  • gRPC是RPC框架中的一种,那什么是RPC框架?
    教科书式定义(最好背会):RPC(remote procedure call 远程过程调用)框架目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。
  • 总结:
    RPC是一种设计理念,而gRPC是基于此种设计理念设计的真实框架。用RPC就是为了调用远程机器节点的方法而开发者不需要去关心协议,网络、传输、编码解码、安全性等,将中间过程透明化,就像调用自己的机器上的方法一样。
gRPC与RESTful的区别:
  • 相同点:两者都是用于网络之间进行信息传输的某种风格
  • 不同点:
    1)传输方式:gRPC采用http2.0,RESTful采用http1.1作为传输协议
    2)传输主体:gRPC采用protoBuf格式,RESTful采用json或xml格式
    3)序列化:gRPC双端序列化方式相同,但中间人不知。RESTful信息被中间人截取可根据json反序列化解析出原内容,相对来说安全性更高。
因为不同,所以独特

性能gRPC碾压RESTful
1)http1.1和http2.0的不同造成了性能的差异
2)protoBuf是面向机器的文字格式,人很难读懂,但是机器序列化和反序列化(编码、解码)起来效率较高。而json或xml这样的文本格式面向开发者,容易读懂,但序列化反序列化相对低效。
安全性相对传统RESTful方式较高
3)允许公共访问服务,但是希望以固定格式的方式来访问,此时protobuf接口有更严格的约束,来保证服务器更安全。

gRPC需要解决:
  • 1)建立连接:
    使用http/2协议,它比http1.x的特色在于采用新的二进制格式,多路复用,header压缩。这些特点都有利于提高传输效率。
  • 2)寻址:
    客户端需要知道服务器端的网络端口号和方法名。当然gRPC做好了映射,本地只管调用方法即可,就会自动调用请求,中间过程是透明的。
  • 3)序列化与反序列化:
    序列化就是将对象的信息转换为可存储或可传输二进制流。那我们进行远程方法调用时,就需要对传输对象进行序列化,因为形参是没有用的,所以需要进行序列化。在gRPC框架中,自动进行序列化与反序列化,开发者只需要定义好request,response对象内容即可。
gRPC为什么适合微服务:
  • 1)gRPC没有View层,不需要数据展现,纯逻辑进行节点交互,所以更适合为服务,分布式。

  • 2)gRPC序列化将内存中的数据进行序列化,然后将收到的数据进行反序列化时,将对象直接反序列化存储到内存中,所以适合高频交互,与微服务需求相符。

微服务有什么好处:

微服务最大的特点即是多点和异构。可以把一个复杂的业务拆分成多个服务模块,每个服务模块根据自己所负责的业务选择合适的框架和语言等,而框架之间通过gRPC进行连接,protoBuf定义,完成了服务之间的低耦合以及每个服务自身的高内聚,每个服务之间调用远程方法就像在本地一样,就相当于一个机器内存突然扩大,并且是内存扩大,可以进行频繁交互。各个服务各司其职,却又浑然一体

本篇文章仅仅是微服务的凤毛麟角,但却是从大局上宏观上把握微服务的一些必不可少的理解。
参考文章:
https://zhuanlan.zhihu.com/p/113125410
https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/78601747

你可能感兴趣的:(RPC)