grpc是目前使用很广泛的远程过程调用库,在使用过程中,我们通常会使用protoc命令将proto文件转成特定的代码进行使用。那一些复杂点的应用有没有可以支撑的工具或类库呢。
前段时间在进行自定义grpc tls证书认证的过程中,知道了有一个github项目,叫gRPC Ecosystemhttps://github.com/grpc-ecosystem
这个项目里提供了很多和grpc相关的支撑库,今天去了解了大概,写一篇文章记录一下,方便有需要的同学可以按图索骥。
项目名称 | 所属分类 | 开发语言 | Star数量 | 介绍 |
grpc-ecosystem/grpc-gateway | 网关服务 | Go | 15000+ | gRPC到JSON网关 该库为生成器,也就是通过proto在生成grpc服务器的同时,生成一个json的网关程序 同时,该生成器还会生成openapiv2版本的网关功能描述文件 |
grpc-ecosystem/grpc-health-probe | 健康探测服务 | Go | 1200+ | A command-line tool to perform health-checks for gRPC applications in Kubernetes etc. 该客户端主要是探测gRPC服务的健康度,依循GRPC Health Checking Protocol 按介绍的说法,使用的前提是服务器段要是实现该协议的服务器。 |
grpc-ecosystem/protoc-gen-grpc-gateway-ts | 网关服务 | Go(实现语言) Typescript(目标语言) | 102 | protoc-gen-grpc-gateway-ts is a Typescript client generator for the grpc-gateway project. It generates idiomatic Typescript clients that connect the web frontend and golang backend fronted by grpc-gateway. 和第一个Gateway项目配合的Typescript版本的客户端的生成器。 有点绕,就是说生成的客户端的语言是Typescript,生成器本身是Go 本质是一种代码生成器,生成的Typescript库可以直接引用,并对外暴露gRpc描述的函数方法。 |
grpc-ecosystem/go-grpc-middleware | 扩展支持库 | Go | 5200+ | Golang gRPC Middlewares: interceptor chaining, auth, logging, retries and more. (github.com) 为grpc服务器提供增强功能的扩展库,使用后,会方便TLS客户端认证等服务器高级使用的体验感,这个库应该对grpc开发会比较有帮助。 具体功能见附录1 |
grpc-ecosystem/grpcdebug | 调试工具 | Go | 59 | 一个命令行的调试工具,关注人较少,和第二个类似,也需要服务器端整合到代码里一个服务器端,这个工具作为一个客户端,连接后,获得服务端的调试信息 |
grpc-ecosystem/java-grpc-prometheus | 扩展支持库 | Java | 212 | Java interceptors which can be used to monitor Grpc services using Prometheus. (github.com) 和gRPC java实现相配合的Prometheus日志整合库 |
grpc-ecosystem/awesome-grpc | 样例 | 多种 | 6200+ | 学习资料库 |
GitHub - grpc-ecosystem/grpc-httpjson-transcoding | 网关服务 | C++ | 143 | 另一个C写的提供JSON网关的库,Star数量很少,要配合istio使用,看起来用的人不多 |
grpc-ecosystem/polyglot | 通用客户端 | Java | 10 | 一个采用Java的通用grpc客户端实现,奇怪,干嘛不用go |
更多用处不大的库 | 列表见此,gRPC Ecosystem (github.com) |
这里面第一个gRPC JSON Gateway应该是用处比较大的一个了,如果需要直接把gRPC服务作为常见API服务提供给用户的话,可以使用。
另外就是Middlewares在自定义认证,扩展日志功能等方面用处较大,自定义认证主要是面向采用TLS进行客户端认证的gRPC服务,如果需要对客户端证书进行自定义的认证过程,或者采用http basic auth等方式进行客户端认证,会需要用到这个库提供的功能,再进行二次开发。
而扩展日志引用后,会把grpc内部流程进行日志的存储,对于方便调试错误用户较大。
附录1:go-grpc-middleware主要功能项
Auth
- grpc_auth - 用于自定义认证过程的帮助库
Logging
- grpc_ctxtags - 在Content种增加一个Tag,用于增强信息交换
- grpc_zap - zap 日志集成.
- grpc_logrus - logrus 日志集成
- grpc_kit - integration of go-kit/log 日志集成
- grpc_grpc_logsettable - 一个运行运行时替换日志器的封装库
Monitoring
- grpc_prometheus⚡ - Prometheus 监控集成
- otgrpc⚡ - OpenTracing 监控集成
- grpc_opentracing - OpenTracing 监控集成
- otelgrpc - OpenTelemetry 监控集成
Client
- grpc_retry - 客户端重试机制的辅助类(grpc客户端确实有必要实现重试,因为并不能保证100%成功,且失败后因为grpc封装较深,不太好追踪)
Server
- grpc_validator - 检验器
- grpc_recovery - gRPC失败恢复机制(避免panic)
- ratelimit - grpc限速