Segment使用Go、gRPC和Envoy作為後端REST API實現​​​​​​​

banq發表於2018-12-16

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,但實際上不可能採用其他方式。 

相關文章