gRPC简单实践
CNCF
CNCF 是一个开源软件基金会,致力于使云原生计算具有普遍性和可持续性。 云原生计算使用开源软件技术栈将应用程序部署为微服务,将每个部分打包到自己的容器中,并动态编排这些容器以优化资源利用率。 云原生技术使软件开发人员能够更快地构建出色的产品。
CNCF 项目成员主要有:Kubernetes
、Prometheus
、OpenTracing
、Fluentd
、gRPC
、containerd
、Rkt
、CNI
、Envoy
、Jaeger
、Notary
、TUF
、Vitess
、CoreDNS
、Nats
、Linkerd
等。
gRPC
gRPC 是由 Google 开发的高性能 RPC(远程过程调用)框架,针对连接跨语言、云和数据中心的服务以及将移动设备连接到后端的云原生计算环境的大规模、多平台性质进行了服务优化。 gRPC 支持 10 种流行语言,并被全球一些领先的企业、技术供应商和大学所使用。 gRPC改善了分布式计算环境中远程调用的延迟性,同时支持多语言编程,并包括 iOS 和 Android 的客户端库以及后端服务器。
安装
安装Protocol Buffers v3
安装用于生成gRPC服务代码的protoc编译器。
-
从
https://github.com/google/protobuf/releases
下载预编译二进制文件,并解压文件; -
执行下列命令:
cd protobuf-3.6.1/ ./configure make sudo make install
-
执行命令
go get -u github.com/golang/protobuf/protoc-gen-go
安装 Protobuf Golang 插件;
安装gRPC
使用以下命令安装gRPC:
go get -u google.golang.org/grpc
但事实是由于墙的原因上述命令并不能成功执行,查阅资料我们通过依次执行以下命令可以成功安装:
wget https://github.com/grpc/grpc-go/archive/master.tar.gz
tar zxvf master.tar.gz
mv grpc-go-master/ grpc
go install google.golang.org/grpc
若在安装过程中出现了部分包缺失的问题,请在https://github.com/golang
下载相应包到对应的路径;google.golang.org/genproto
在https://github.com/google/go-genproto/archive/master.tar.gz
页面下载。
简单的gRPC服务:helloworld
在$GOPATH/src/google.golang.org/grpc/examples
路径下找到示例helloworld
。
构建示例
切换到示例目录:
cd $GOPATH/src/google.golang.org/grpc/examples/helloworld
gRPC服务在.proto
文件中定义,用于生成相应的.pb.go
文件。该.pb.go
文件是由使用protoc
协议编译器编译的.proto
文件生成的。
示例中该helloworld.pb.go
文件已经生成(通过编译helloworld.proto
),它位于$GOPATH/src/google.golang.org/grpc/examples/helloworld/helloworld
目录。
该helloworld.pb.go
文件包含:
- 生成的客户端和服务器代码;
- 用于填充,序列化,以及检索
HelloRequest
和HelloReply
信息类型的代码。
编译运行
执行下面的命令编译与运行客户端、服务端代码:
go run greeter_server/main.go
go run greeter_client/main.go
结果如下:
- 客户端:
- 服务端: