现如今微服务很流行,而微服务很有可能是使用不同语言进行构建的。而微服务之间通常需要相互通信,所以微服务之间必须在以下几个方面达成共识:
需要使用某种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都能解决。。?
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的进化也很简单
今天先到这。。