Gizmo 微服务工具包
此工具包提供了将服务器和 pubsub 守护程序组合在一起的软件包,具有以下功能:
- 标准化配置和日志
- 带有可配置策略的健康检查端点
- 用于管理 pprof 端点和日志级别的配置
- 定义期望值(expectations)和词汇表(vocabulary)的基本接口
- 包含基本请求信息的结构化日志记录
- 端点的有用度量
- 优雅的关闭
安装
注意大写!
go get github.com/NYTimes/gizmo/...
导入路径变更通知
《纽约时报》最近将 github 组织从"NYTimes"改为"nytimes"。这应该不会影响安装,只要您使用正确的包 NYTimes,而不是按照上面的安装说明 nytimes。
然而,其目的是迁移导入路径,使其与在 GitHub 上显示的一致。这将是一个突破性的更改,我们将在更新代码时引入一个主要标记。因此,导入路径将从 github.com/NYTimes/gizmo/server 转到 github.com/nytimes/gizmo/v2/server。这确保人们不会在导入路径更改之间存在类型不匹配。
包
server
server
包是工具包的主要部分, 服务器依赖于 server.Config
来管理 Server
实现。
它提供1个服务器实现:
SimpleServer
,它能够通过5个可用的 Service
实现处理基本的HTTP和JSON请求:SimpleService
, JSONService
, ContextService
, MixedService
和一个 MixedContextService
。
server/kit
server/kit
包体现了 Gizmo 与 go-kit 结合的目标。
- 在这个包中你会发现:
- 一个更有主见、选择更少的服务器。
- go-kit 用于服务 HTTP/JSON;gRPC 用于服务 HTTP2/RPC
- 如果在App Engine、Kubernetes Engine、Compute Engine 或 AWS EC2 实例中运行,监视、跟踪和度量将自动注册。
- 要更改错误报告和跟踪的名称和版本,请使用
SERVICE_NAME
和SERVICE_VERSION
环境变量。
- 要更改错误报告和跟踪的名称和版本,请使用
- 在 GCP 中,日志转到本地 stdout 或直接转到 Stackdriver。
- 使用 Go 的 1.8 优雅 HTTP 关闭。
- 使用此软件包的服务预计将部署到 GCP。
observe
observe
包为度量提供可观察性帮助,并通过 OpenCensus 进行跟踪
server/kit
(很快就是 SimpleServer)利用这个包创建一个具有合理默认值的 StackDriver 导出器GoogleProjectID
和IsGAE
可以帮助您决定底层平台
auth
auth
包提供了验证入站身份验证令牌的原语
PublicKeySource
接口用于从 JSON Web Key Sets 提供*rsa.PublicKeys
。Verifier
结构使用自定义解码器和验证器函数组合关键源实现,以简化服务器端令牌验证。
auth/gcp
auth/gcp
包提供了2个基于谷歌云平台 auth.PublicKeySource
和 oauth2.TokenSource
实现:
- "Identity" 标识密钥源和令牌源依赖于 GCP 的 identity JWT mechanism for asserting instance identities。这是在 GCP 上断言实例标识的首选方法。
- "IAM" 密钥源和令牌源依赖 GCP 的 IAM 服务来 signing 和 verifying JWTs。如果需要,这个方法可以在 GCP 之外使用,并且可以为用户从第一代 App Engine(其中身份令牌不可用)运行时过渡到第2代 App Engine 提供桥梁。
config
config
包包含一些有用的函数,可以从 JSON 文件或环境变量加载到配置结构。
还有许多用于不同云服务和数据库的公共配置选项和凭据的结构。
pubsub
pubsub
包中包含两个 (publisher
和 subscriber
) 通用接口,用于将数据发布到队列以及订阅和使用这些队列中的数据。
pubsub
接口有4种实现方式:
-
对于通过亚马逊的 SNS/SQS 的 pubsub,您可以使用
pubsub/aws
包; -
对于通过 Google 的 Pubsub,您可以使用
pubsub/gcp
包; -
对于通过 Kafka topics的 Pubsub,您可以使用
pubsub/kafka
包; -
要通过 HTTP 发布,您可以使用
pubsub/http
包;
pubsub/pubsubtest
pubsub/pubsubtest
包包含 pubsub.Publisher
、pubsub.MultiPublisher
接口的测试实现,并且 pubsub.Subscriber
接口允许开发人员轻松地模拟和测试他们的 pubsub
实现。
示例
如果您遇到任何问题,请创建一个问题,并在 Gophers Slack Workspace 工作空间的 #gizmo 频道上找到您的发现。
Gizmo 徽标基于 RenéeFrench 设计的 Go 吉祥物,并根据 Creative Commons Attribution 3.0 许可证拥有版权。
(First edition: vz edited at 2019.09.075)