CNCF
CNCF(Cloud Native Computing Foundation)于 2015 年 7 月成立,隶属于 Linux 基金会,初衷围绕“云原生”服务云计算,致力于维护和集成开源技术,支持编排容器化微服务架构应用。
CNCF项目内容
CNCF 包含的明星项目有 Kubernetes、Prometheus 和目前炙手可热的 gRPC
- Kubernetes :集群中管理跨多台主机容器化应用的开源系统;
- Prometheus :专注于时间序列数据,为客户端依赖及第三方数据消费提供广泛集成支持的开源监控解决方案;
- OpenTracing:与厂商无关的分布式追踪开源标准;
- Fluentd:创建统一日志层的开源数据收集器。
- Linkerd:为微服务提供可靠性支持、自动化负载均衡、服务发现和运行时可恢复性的开源“服务网格”项目;
- gRPC:现代化高性能开源远程调用框架;
- CoreDNS:快速灵活的构建 DNS 服务器的方案;
- containerd:将容器运行时及其管理功能从 Docker Daemon 剥离的镜像管理和容器执行技术;
- rkt:帮助开发者打包应用和依赖包,简化搭环境等部署工作,提高容器安全性和易用性的容器引擎。
参考链接:关于CNCF
gRPC
RPC(Remote Procedure Call)远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
gRPC也是定义一个服务,指定其能够被远程调用的方法,包含参数和返回类型。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用,在客户端拥有一个存根能够像服务端一样的方法。
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
gRPC优势
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
参考链接:中文版官方文档
gPRC安装
前期准备:安装 Git
安装gPRc
#翻墙
$ go get -u google.golang.org/grpc
#不翻墙
$ go get -d github.com/grpc/grpc-go
# 创建文件夹
$ mkdir -p $GOPATH/src/google.golang.org/
$ mv $GOPATH/src/github.com/grpc/grpc-go
$ GOPATH/src/google.golang.org/grpc
获取例子,例子链接:https://github.com/grpc/grpc-go/tree/master/examples
$ go get -u github.com/grpc/grpc-go/examples/helloworld/greeter_client
$ go get -u github.com/grpc/grpc-go/examples/helloworld/greeter_server
切换当前目录到 examples/helloworld
运行例子
#运行服务器
$ greeter_server &
#运行客户端
$ greeter_client
在这里发现可以下载go语言的安装Go语言的代码生成器
$ go get -u github.com/golang/protobuf/protoc-gen-go
再次编译运行例子
#编译
$ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld
#运行
$ go run greeter_server/main.go
$ go run greeter_client/main.go
如果成功,client可以看到:Greeting: Hello world
gRPC简单分析
服务器
greeter_server/main.go
创建了gRPC 服务器,将我们实现的 Greeter
服务绑定到一个端口。然后启动服务器:服务器此时现在已准备好从 Greeter
服务客户端接收请求。grpc.NewServer()
开启一个gRPC
server;pb.RegisterGreeterServer()
注册一个protobuf
服务;
const (
port = ":50051"
)
...
func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
s.Serve(lis)
}
客户端
客户端需要创建一个 gRPC 频道,指定要连接的主机名和服务器端口。然后用这个频道创建存根实例。
在 gRPC Go 使用一个特殊的 Dial() 方法来创建频道;pb.NewGreeterClient()
创建一个protobuf
客户端;
const (
address = "localhost:50051"
defaultName = "world"
)
func main() {
// Set up a connection to the server.
conn, err := grpc.Dial(address)
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGreeterClient(conn)
...
}
更多资料:http://doc.oschina.net/grpc?t=58008