尽管grpc-go自己也自带一些云原生能力,好比负载均衡,可是还远远不够,而且须要使用者本身来编写代码实现。git
go chassis是一个统一的微服务开发框架,可以集成不一样的通讯协议,并使用统一的路由管理,负载均衡,熔断降级,限流,监控等功能。github
随着grpc的流行,go chassis决定将grpc集成到本身的框架中,为grpc-go带来更加丰富强大的功能缓存
关于go chassis可以提供的能力能够从这篇来开始了解。服务器
go chassis的设计容许任意协议的接入框架
不管协议如何,均可以经过实现client与server接口来接入到go chassis框架ide
https://github.com/go-chassis/go-chassis/blob/master/core/client/client.go
微服务
https://github.com/go-chassis/go-chassis/blob/master/core/server/server.go
post
每种请求都会被转换为统一的抽象Invocation,而invocation是微服务治理中的标准模型,因此就可使用标准的功能,例如负载均衡,熔断,路由管理等,最终再次使用标准协议将请求发送出去,协议与原生协议彻底兼容。spa
使用go chassis编写grpc程序须要听从必定的标准,并不与原生的编写方法相同,完整的例子在https://github.com/go-chassis/go-chassis-examples/tree/master/grpc
本次将使用Apache ServiceComb Service Center做为注册中心
1. 编写proto描述文件
go chassis内部有schema与operation的概念: 其中helloworld.Greeter就是schema, SayHello为operation
2. 生成helloworld.pb.go
protoc –go_out=. helloworld.proto
以后的步骤就与原生grpc-go有所不一样了
3. 手动更改helloworld.pb.go中的一个变量
必须将_Greeter_serviceDesc改成Greeter_serviceDesc
1. 编写业务逻辑
2.将业务逻辑注册到go chassis,此时就须要更改的那个变量Greeter_serviceDesc
第一个参数表示你要向哪一个协议服务器注册,第二个为业务逻辑,第三个为grpc serivce desc
3. 修改配置文件chassis.yaml,最小配置项须要配置服务中心,以及指定须要启动的协议服务器
4. 修改microservice.yaml,为这个微服务起个名字
5. 启动服务
1. 拿到pb文件生成go代码
protoc –go_out=. hello.proto
2. 修改配置文件chassis.yaml
3. 修改microservice.yaml, 为consumer起个名字
4. main中调用服务端,指定微服务名(RPCServer),schema,operation与参数和返回
那么如今grpc已经拥有了基本的负载均衡能力,服务端向Service Center注册
而consumer将周期缓存provider实例列表,进行负载均衡
更多高级特性,可参考文档进行配置
http://go-chassis.readthedocs.io/en/latest/