全文共2925字,预计学习时长9分钟
![66b47a2bd42518f4c8f93b695cba5b86.png](https://i-blog.csdnimg.cn/blog_migrate/77dd53f5e818f400e9f3082d264f8bf5.jpeg)
在今天的文章,小芯将带着大家对gRPC进行高层次的了解,还将解释gRPC与网络应用程序通信所遵循的现有协议和体系结构之间的异同。
Are you ready?
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
什么是gRPC?
gRPC是一个开源的远程过程调用框架,用于服务器间的高效对接。通过可插拔接口有效连接不同语言编写的服务器,进行负载平衡、跟踪、运行状况检查和身份验证。默认情况下,gRPC通过一种轻便高效的结构化存储格式,对数据序列化。一般来说,gRPC被认为是微服务架构中REST协议更好的替代方案。gRPC中的“g”来源于最初开发这项技术的谷歌。
在研究更多gRPC细节之前,让我们先看看微服务架构。
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
微服务与单体架构(Monoliths)
单体架构是设计应用程序的传统方式。它包含一个不可分割的代码库,为客户端用户界面、服务器端应用程序和数据库提供服务。项目中工作的所有开发人员将把代码存储进同一代码库。笔者最喜欢对单片架构的类比是把它想象成一个工作室公寓。一间单人房将根据需要分成不同的空间。
单体架构的优势在于,因为只有一个单元,所以像日志记录、性能监控和缓存等的操作可以很容易地完成。此外,开发、测试、调试和部署也很简单。
但是随着应用程序的增长,单片架构变得难以维护、扩展甚至难以理解。此外,它可以变得非常复杂,以至于代码中的一个小变化都会影响到整个应用程序。
单片架构的另一重要缺点是它是对单一技术限制严格。采用一个新的框架或语言就可能需要重新编写一个完整的系统。
接下来说微服务架构!
如果单体架构是一个工作室公寓,那么微服务建筑可以被认为是一个有许多房间的房子。这意味着整个应用程序将被细分为多个较小的应用程序或服务。
这使得开发团队能够灵活地选择最适合他们需求的技术,并且允许独立扩展服务。微服务应用程序中的任何故障只影响特定的服务,而不是整个应用程序。
这些服务可以独立开发、维护和部署,并且通过API (应用编程接口)相互联系。
基于HTTP协议的微服务之间的通信可以通过多种方式完成。最广泛使用的方法是遵循REST协议。gRPC是执行这种通信的另一种方式。它的建立是为了克服微服务通信中REST的局限性。
![ed577356acbb563fbcc737d3f6ca200a.png](https://i-blog.csdnimg.cn/blog_migrate/7b1e1d22b7042bb5c94980bb5216a075.jpeg)
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
REST架构
REST是一个使用HTTP协议的网络架构。它被广泛应用于开发网络应用程序。简而言之,REST是一种客户机-服务器关系,其中后端数据通过简单的表示(如JSON/XML)提供给客户机。如罗伊·菲尔丁所描述,REST代表REpresentational State Transfer。REST是一种协议,不强制执行任何关于它应该如何在较低级别实现的规则。为实现高级架构提供了指导。
为了使任何应用程序真正具有RESTful属性,必须遵循六个架构准则:
1. 统一接口:API接口必须向API使用者呈现网络应用程序中的资源。
2. 客户端/服务器:客户端和服务器必须相互独立,客户端只需知道链接。
3. 无状态该服务器不能存储任何与客户端请求相关的内容。客户端负责维护应用程序的状态。
4. 可缓存:资源必须是可缓存的。
5. 分层系统:架构必须有层次,这意味着架构的组件可以存在于多个服务器中。
6. 按需编码:客户端必须能够获得可执行代码作为响应。这是一个可选约束。
基于REST的网络服务被称为RESTful网络服务。在这些应用程序中,每个组件都是一个资源,并且这些资源可以基于HTTP标准方法,通过一个通用接口来访问。以下四种HTTP方法通常在REST结构中使用:
· GET—对资源的只读访问。
· POST—创建新资源。
· DELETE—删除资源。
· PUT—更新现有资源/创建新资源。
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
RPC架构
RPC代表远程过程调用。顾名思义,可以在远程服务器上调用一个函数/方法。不管在哪里执行,RPC协议允许以相同的格式获得问题的结果。可以是本地服务器,也可以是使用更好资源的远程服务器。
RPC是一个比REST还要早的协议。自20世纪70年代ARPANET问世以来,它就一直用于执行网络操作。1981年,布鲁斯·杰伊·纳尔逊首次创造了RPC这个术语。但是正如我们将要看到的,RPC仍然是相关的,并且以不同的方式在基于API的现代应用程序中实现。
理念是的。通过定义公共方法来构建一个应用编程接口。然后用参数调用这些方法。RPC只是一堆函数,但对于HTTP API,它需要将方法放在URL中,将参数放在查询字符串或正文中。
RPC API将使用类似POST /deleteResource的方法,其主体为{ “id”: 1 } ,而不是REST方法,即DELETE /resource/1.
RPC非常受物联网设备和其他需要为低功耗设备定制通信的解决方案的欢迎,因为许多计算操作可以转移到另一个设备。传统上,远程过程控制可以用于RPC-XML和RPC-JSON。
gRPC是在RPC协议上创建的最新框架。它充分利用了传统RPC的优点,试图解决传统RPC的问题。
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
那什么是gRPC?
截至目前,我们所读到的都可以重新定义gRPC。它是对传统的RPC框架的改编。那么,它与现有的RPC框架有什么不同呢?
最重要的区别是gRPC使用协议缓冲区作为序列化和通信的接口定义语言,而不是JSON/XML。协议缓冲区可以描述数据的结构,代码可以从描述中生成,以生成或解析表示结构化数据的字节流。这就是为什么gRPC更适合多语言编写(用不同的技术实现) 的网络应用程序。二进制数据格式允许通信更轻量。gRPC也可以与其他数据格式一起使用,但是首选格式是协议缓冲区。
此外,gRPC建立在HTTP/2之上,支持双向通信以及传统请求/响应。gRPC允许服务器和客户端之间的松散耦合。实际上,客户端建立一个与gRPC服务器的长期连接,并为每个RPC调用建立一个新的HTTP/2流。
![66e8735208719e0f8fb8ec11c1f26ecd.png](https://i-blog.csdnimg.cn/blog_migrate/6813f8ed9805647b51d6a1b1b0924879.jpeg)
![e4c43bc7bd40c2cb5352f925a1a55826.png](https://i-blog.csdnimg.cn/blog_migrate/0d2fbad54d35d42417c519643e6c159b.jpeg)
REST与gRPC
与大多数使用JSON的REST不同,gRPC使用协议缓冲区,这是一种更好的数据编码方式。由于JSON是一种基于文本的格式,它将比protobuf格式的压缩数据占用更多的存储。
与REST相比,gRPC的另一个重要改进是它使用HTTP 2作为传输协议。REST使用的HTTP 1.1基本上是一个请求-响应模型。gRPC利用了HTTP 2的双向通信特性以及传统的响应请求结构。在HTTP 1.1中,当多个请求来自多个客户端时,它们将按顺序提供服务。这会降低系统速度。HTTP 2允许多路复用,因此可以同时处理多个请求和响应。
基于以上观点,可以得出结论,当用例涉及使用惯用的API的多语言通信或大规模微服务通信时,gRPC是一个很好的选择。
![4e735f7b093efcf49187111b5536a33b.png](https://i-blog.csdnimg.cn/blog_migrate/49ab6d981ac356b29e17e3f4dea584b5.jpeg)
留言点赞关注
我们一起分享AI学习与发展的干货
如转载,请后台留言,遵守转载规范