micro-mesh icon indicating copy to clipboard operation
micro-mesh copied to clipboard

gRPC微服务架构实践

Micro Mesh

micro-mesh

环境

  • OSX
  • GKE 1.12.5-gke.10
  • Go 1.11.1
  • Istio 1.1.0
  • protoc libprotoc 3.6.1

目录

  • TODO
  • Protoc

框架

  • registry
    • istio
    • go-micro
      • k8s
      • consul
      • etcd
  • tracing
    • opentracing
      • jaeger + ES / kafka
  • metrics
    • prometheus
      • ES / kafka

TODO

  • hb-chen/grpc-gateway
    • [x] gen-grpc-gateway扩展,支持gRPC服务本地调用,在service中启动http server,已在v1.10.0并入社区版本
    • [ ] gen-istio-gateway通过grpc-gateway API自动生成istio gateway的.yaml配置
    • [ ] swagger-codegen
  • Istio部署
    • [x] k8s.yaml脚本
    • [x] JWTGateway认证
    • [x] RBAC服务间访问控制
    • [x] 自定义auth-adapter
  • 服务
    • [x] gRPC ClientConn对象池
    • [ ] 并发
      • [ ] 并发控制WaitCancel
      • [ ] 超时控制Timeout
    • [ ] 流处理
    • [ ] 同步&异步调用
    • [ ] 配置中心
    • [ ] CI/CD

Protoc

安装

envoyproxy/protoc-gen-validate

go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go get -u github.com/golang/protobuf/protoc-gen-go

# 自定义代码生成
# 1.导出grpc.ServiceDesc
# 2.注册中心接口
go get -u github.com/hb-go/grpc-contrib/protoc-gen-hb-grpc

~~使用fork grpc-gateway的protoc-gen-grpc-gateway~~

cd $GOPATH/src/github.com/grpc-ecosystem
git clone github.com/hb-chen/grpc-gateway
make bin/protoc-gen-grpc-gateway
mv bin/protoc-gen-grpc-gateway $GOPATH/bin/protoc-gen-grpc-gateway

代码生成

# go+grpc
# grpc-gateway
# swagger
# hbgrpc-gateway
# hb-grpc
protoc -I$GOPATH/src/ -I./ \
--go_out=plugins=grpc:. \
--grpc-gateway_out=logtostderr=true,grpc_api_configuration=proto/gateway.yaml:. \
--swagger_out=logtostderr=true,grpc_api_configuration=proto/gateway.yaml:. \
--validate_out=lang=go:. \
--hb-grpc-gateway_out=logtostderr=true,grpc_api_configuration=proto/gateway.yaml:. \
--hb-grpc_out=plugins=registry+desc:. \
proto/*.proto