.Net Core gRPC 是怎么样的?

深入研究Microsoft平台(如.Net)的主要版本附带的协议和服务总是很有趣。 .Net Core 3.0的发布没有什么不同,增加了对相对较新的但同样重要的协议gRPC的本地支持。

gRPC最初是作为Google协议缓冲区序列化技术的扩展而开发的,它采用了熟悉的远程过程调用概念,并将其带入了现代分布式系统开发。 它是用于将微服务彼此链接以及将客户端应用程序链接至后端的强大工具。 现在,由Cloud Native Computing Foundation支持的 gRPC是开源的,可以在大多数熟悉的语言和平台上实现。

内部gRPC

gRPC的核心是基于协议缓冲区的服务描述。 远程过程调用始终需要一种方法来定义客户端所针对的服务接口:期望作为请求的内容,以及作为响应发送的内容。 这些接口定义是gRPC的核心 。 它们构成了我们围绕云服务构建的基于API的分布式计算世界的基础。

远程过程调用具有自己的设计模式,而gRPC支持四种最常见的服务描述。 首先是熟悉的单一过程调用,其中单个请求接收单个响应。 然后有两种受控的流式RPC选项:一种是服务器发送数据流以响应请求,另一种是客户端发送数据流而服务器发送响应。 最后,在双向流传输中,客户端和服务器都发送独立的数据流,其中可能包含多个请求和响应。

gRPC将使用协议缓冲区接口定义自动创建RPC连接每一端所需的客户端和服务器代码。 您将需要在服务器上实现方法并在客户端上实现调用,以实现gRPC API。 gRPC并不限制您进行同步或异步RPC调用; 您可以选择同时使用两者。 实际上,您可能更希望使用异步调用,因为它们更适合使用公共Internet的现代应用程序。

按合同设计是API开发的关键概念。 您从API定义(此处为协议缓冲区接口定义)开始,定义要构建的服务及其支持的消息。 协议缓冲原型文件的语法非常简单:一行定义了服务,其调用和返回。 文件的其余部分定义了服务使用的消息。

将gRPC添加到.Net Core

NuRPC提供了gRPC的.Net Core版本grpc-dotnet ,可与.Net Core 3.0 SDK的发行版本一起使用。 尽管已经存在第三方.Net gRPC实现,但此版本使gRPC成为一流的.Net公民,并且是在应用程序中构建API的重要工具。 grpc-dotnet用C#编写, 很容易添加到您的代码中 ,可以使用命令行工具来构建服务或在熟悉的Visual Studio中工作。 .Net Core 3.0的发布为Visual Studio添加了对协议缓冲区的支持,因此您可以在与代码相同的环境中创建和编辑接口定义。 将定义另存为protobuf文件后,相同的工具将生成客户端和服务器代码。

如果要向.Net Framework应用程序添加gRPC支持,则还有一个替代的C#gRPC软件包,其中提供了许多相同的API。 微软表示,该软件包将继续可用,因为grpc-dotnet仅适用于.Net Core。

使gRPC支持成为可能的.Net Core 3.0中的关键更改是其对HTTP / 2的直接支持。 gRPC旨在利用HTTP / 2功能,默认的.Net Core HTTP服务器不支持该功能。 这样可以更轻松地将gRPC支持包括在ASP.Net Core中,以使用它托管您的微服务。 在客户端,客户端程序包建立在.Net现有的HttpClient API的基础上,使其成为越来越多的可使用.Net的HTTP和HTTP / 2支持的程序包的一部分。

gRPC-dotnet入门

微软正在GitHub上开发其gRPC平台 ,并且可以在此处找到许多所需的文档。 一旦安装了.Net Core 3.0 SDK,入门就非常容易。 首先在Visual Studio中创建一个gRPC Service项目。 这将为您的接口定义以及该服务的代码创建一个原型文件。 在生成代码之前,您需要从NuGet下载并安装gRPC客户端软件包,Google Proto Buffers和Grpc.tools软件包。 现在,您可以在为客户端和服务器编写代码之前,创建原型文件并生成gRPC服务和客户端 。 如果您需要随时更改接口定义,请编辑原型文件并保存,然后Visual Studio会为您生成代码。

如果您过去使用过Windows Communication Foundation(WCF),则应该找到gRPC一个不错的选择。 它比WCF更适合跨数据中心边界的应用程序,因为它是针对HTTP / 2连接而设计的,不但简化了应用程序体系结构,而且简化了防火墙策略。 除了使用复杂的防火墙规则,您还可以在类似Azure Front Door的环境中使用Web应用程序防火墙,并使用其负载平衡器来实现可伸缩性。

.Net中gRPC支持的真正好处不是让您的代码与其他服务更容易互操作,而是从代码中删除处理的各个层次。 您无需管理序列化为JSON或XML或管理REST调用。 一旦在协议缓冲区中定义了接口,其他所有事务都会为您处理。 您所需要做的就是构建服务器方法和客户端调用,并且gRPC会为您填补两个端点之间的空白,无论它们是在同一网段还是在世界的相反端。

像最好的远程过程一样,gRPC是一种将客户端和服务器桥接的方式,将它们视为单个应用程序。 在微服务中使用gRPC可简化整个应用程序架构,使您有机会在方法级别分离服务。 每次更改protobuf文件时,Visual Studio都会自动生成新的gRPC接口,因此无需重新构建整个应用程序就可以添加新服务。

From: https://www.infoworld.com/article/3442216/grpc-in-net-core.html

你可能感兴趣的:(.Net Core gRPC 是怎么样的?)