gRPC in ASP.NET Core 3.0 -- 前言

现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识:

  • 需要使用某种API

  • 数据格式

  • 错误的模式

  • 负载均衡

  • 。。。

现在最流行的一种API风格可能是REST,它主要是通过HTTP协议来传输JSON数据。

但是现在我们可以看看gRPC(https://grpc.io/)。gRPC来自Google,并且支持众多主流的语言包括:Go,Dart,C#,C/C++,Nodejs,Python等等。

下面就简单介绍下gRPC。

01

gRPC能解决哪些问题?

构建(Web)API是挺麻烦的,因为构建API时我们得考虑:

  • 数据的格式是JSON、XML还是二进制的;

  • 端点地址以及GET还是POST等;

  • 如何调用API以及对异常的处理规则;

  • API的效率:一次调用读取多少数据?是否太多了或太少了?太少的话可能会导致多次API的调用;

  • 延迟;

  • 扩展性,是否能支持成上千个客户端

  • 负载均衡

  • 与其他语言的互操作性

  • 如何处理身份认证、监控、日志等等

以上这些问题据说gRPC都能解决。。:scream:

02

再次介绍一下gRPC

之前说了gRPC来自Google,它是一个开源的框架;它同时也是Cloud Native Computation基金会(CNCF)的一部分,就像Docker和Kubernetes一样。

gRPC允许你为RPC(Remote Procedure Call)定义请求和响应,然后gRPC会帮你处理一切剩余问题。

它速度快,执行效率高,基于HTTP/2构建,低延迟,支持流,与开发语言无关,并且可以很简单的插入身份认证、负载均衡、日志和监控等功能。

03

RPC是啥

RPC是(Remote Procedure Call)远程过程调用。

在客户端代码使用RPC调用的时候,就像直接调用了服务端的一个函数一样。

例如在服务器端代码是这样的:

而在“遥远”的客户端它是这样调用服务器端的逻辑的,就像调用本地方法一样:

客户端在调用这个方法的时候,是通过网络进行通信的。

RPC它不是一个新的概念,很早它就出现了。但是它存在很多的问题。而gRPC它是对RPC一种非常简洁的实现并且解决了很多RPC的问题。

04

如何学习gRPC?

首先,你得学习 Protocol Buffers (https://developers.google.com/protocol-buffers/),简单的说,它可以用来定义消息和服务。

然后,你只需要实现服务即可,剩余的gRPC代码将会自动为你生成。

.proto这个文件 可以适用于十几种开发语言(包括服务端和客户端),并且它允许你使用同一个框架来支持每秒百万级以上的RPC调用。

gPRC使用的是合约优先的API开发模式,它默认使用Protocol buffers (protobuf) 作为接口设计语言(IDL),这个.proto文件包括两部分:

  • gRPC服务的定义

  • 服务端和客户端之间传递的消息

看一个官网的例子(protobuf):

在这里定义了一个Greeter服务,它里面定义了一个SayHello的rpc调用。SayHello会发送HelloRequest这个消息,接收HelloReply这个消息。

为什么使用Protocol Buffers?

因为:

  • 它和开发语言无关

  • 可以生成所有主流开发语言的代码

  • 数据是二进制格式的,串行化的效率高,Payload比较小

  • 也很适合传递大量的数据

  • 通过设定某些规则,是的API的进化也很简单

今天先到这。。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章