Segment使用Go、gRPC和Envoy作为后端REST API实现​​​​​​​

18-12-16 banq
                   

Segment刚刚启动了Segment Config API在这里自己试试) - 一组公共REST API,可以让您管理Segment配置。在这个Config API的后面是使用Go,GRPC 和Envoy构建的。

在Segment,我们 默认在Go中构建新服务,Go语言很简单,因此新的团队成员很快就会加入代码库。工具链很快,因此如果开发人员打破了代码、或在测试或在与其他系统集成时出现问题时都会立即得到反馈,运行时很快,因此它在大规模上表现出色。

对于最新一轮的API,我们采用了GRPC 服务框架

借助于API标准的Google API设计指南,uber/prototool格式化、linting .protos以及lyft/protoc-gen-validate定义字段验证以及grpc-gateway定义REST映射等生态系统工具,Protocol Buffer服务定义语言可以轻松设计类型安全且一致的API 。

通过精心设计的.proto,它可以轻松生成Go 服务器接口和TypeScript 客户端,在语言之间提供类型安全的RPC。

对于API网关和RPC,我们采用了Envoy服务代理

面向互联网的segmentapis.com端点是一个Envoy 前端代理,可对每个请求进行速率限制和验证。然后,它将REST/JSON 请求转码为上游GRPC 请求。上游GRPC 服务器运行着为Datadog微服务统计配置的Envoy边车代理。其结果是API 的安全性、可靠性和一致观察性通过Envoy配置,而不是代码。

我们尝试过Swagger服务定义,但规范非常庞大,生成的客户端和服务器存根有很多不足之处。GRPC和.proto以及Go 实现感觉设计和实现更好,由于GRPC工具和生态系统,您可以从.protos生成Swagger,但实际上不可能采用其他方式。