使用gRPC和protobuf建立高性能的API

API是现代应用的主要技术。API能够增强web客户端与移动客户端和后端的交互通讯,无需顾及他们的技术和平台的不同。当你构建基于web的api时,你通常选择rest风格的api。使用JSON作为应用程序之间交换数据的标准。

现在我们构建云时代的云原生应用时,微服务能够有非常好的扩展性能。我们需要在各种微服务之间有一种高性能的通信机制。那么,基于JSON的api能否提供高性能和高扩展性将会是一个问题。JSON是应用之间快速交换数据的格式吗?rest风格的架构有能力建立复杂的api吗?我们能够很容易地使用Restful架构建立双向的流API?http2提供了比他以前版本更多的功能,这样我们需要平衡这些新技术来构建下一代的api,这就需要使用gRPC和protocol buffers。

介绍Protocol Buffers
也称protobuf,是谷歌的语言中立、平台中立的可扩展的序列化结构数据。Protocol buffers更小,更快,更简单,相比XML和JSON提供了更高性能。

利用protobuf,,你可以定义你的结构化数据,然后生成你选择编程语言的源代码,使用称为protoc的编译器编译,编写和读取你的结构化数据。当前protocol buffers是proto3,支持C++, Go, Java, Python, Ruby, 和 C#

为了从protocol buffers定义文件生成代码,按以下步骤:
1.从https://github.com/google/protobuf.下载protoc编译器,将本地protoc库包文件加入PATH环境,这样能调用protoc编译器。

2.安装protoc语言插件,Go语言使用:
go get -u github.com/golang/protobuf/protoc-gen-go

gRPC介绍
gRPC是一个高性能开源远程过程调用RPC框架,可以运行在客户端或服务器端等各个地方,只要想建立通讯。gRPC框架是由Google开发,他们在各种云产品中使用它已经很长一段时间。

gRPC遵循HTTP/2语义,它允许您建立带有同步和异步的通信模型的服务。它支持传统的请求/响应模型和双向流。它能够建设全双工流,让您在各种超强场景下使用:客户端和服务器应用程序可以异步发送数据流。带有GRPC移动客户端了会给你很多性能优点和易于消费的API。

默认gRPC使用 Protocol Buffers作为其接口定义语言IDL,也作为其底层的消息交换格式。不像JSON和XML,Protocol Buffers
不仅是消息交换格式,它也用于描述服务接口(服务端点)。因此,它既可用于服务接口也可用于高效的消息结构。

在gRPC中,你能使用payload消息定义服务和它的方法,像一个客户端应用程序和一个RPC系统之间的典型的通信,客户端应用程序可以直接调用在远程服务器上方法,好像是在调用客户端应用程序的本地对象一样。

参考下文学习使用gRPC和Protocol Buffers基于Go语言建立一个API案例:
Building High Performance APIs In Go Using gRPC An

该API案例源码:github
[该贴被admin于2016-10-25 13:40修改过]