Segment使用Go、gRPC和Envoy作為後端REST API實現
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,但實際上不可能採用其他方式。
相關文章
- Envoy 中的 xDS REST 和 gRPC 協議詳解RESTRPC協議
- REST 的替代者:Envoy + gRPC-WebRESTRPCWeb
- Envoy、gRPC和速率限制RPC
- Go 語言實現 gRPC 的釋出訂閱模式,REST 介面和超時控制GoRPC模式REST
- Go-grpc 實現GoRPC
- Go基於gRPC實現客戶端連入服務端GoRPC客戶端服務端
- REST : rest_framework.decorators.api_view 實現PATCHRESTFrameworkAPIView
- 重拾後端之Spring Boot(四):使用JWT和Spring Security保護REST API後端Spring BootJWTRESTAPI
- Envoy實現.NET架構的閘道器(三)代理GRPC架構RPC
- 使用NFS作為Glance儲存後端NFS後端
- 使用postgresql作為 bootstrap tree view 後端SQLbootView後端
- go使用grpcGoRPC
- SharePoint REST API - 使用REST API和jQuery上傳一個檔案RESTAPIjQuery
- 如何使用Spring Boot,Spring Data和H2 DB實現REST APISpring BootRESTAPI
- SharePoint REST API - 確定REST端點URLRESTAPI
- Elasticsearch 入門實戰(8)--REST API 使用二(Search API)ElasticsearchRESTAPI
- 【Go】Golang實現gRPC的Proxy的原理GolangRPC
- PHP熟手使用Rust作為後端開發語言PHPRust後端
- 使用 Spring Security JWT 令牌簽名實現 REST API 安全性SpringJWTRESTAPI
- 基於乾淨架構使用原始SQL和DDD實現.NET Core REST API開源案例架構SQLRESTAPI
- 使用OAuth保護REST API並使用簡單的Angular客戶端OAuthRESTAPIAngular客戶端
- 在 ASP .NET Core 中實現冪等 REST APIRESTAPI
- 使用gRPC和protobuf建立高效能的APIRPCAPI
- Harbor配置Swagger遠端REST APISwaggerRESTAPI
- [譯 ] 如何使用 AJAX 和 REST API 建立一個圖表(How To Make A Chart Using AJAX & REST API's)RESTAPI
- 使用Node.js和Koa框架實現前後端互動Node.js框架後端
- GO後端開發+VUE實列Go後端Vue
- Go gRPC 系列三:流式客戶端和服務端GoRPC客戶端服務端
- rest apiRESTAPI
- go語言gRPC系列(三) - 使用grpc-gateway同時提供HTTP和gRPC服務GoRPCGatewayHTTP
- go語言gRPC系列(二) - 為gRPC新增證書GoRPC
- go語言下快速使用GRPCGoRPC
- 使用 Laravel Passport 為你的 REST API 增加使用者認證功能LaravelPassportRESTAPI
- GitHub-zlabjp/envoy-spire-opa-service-mesh: 使用Envoy作為資料平面以及SPIRE和OPA作為控制平面在Kubernetese上構建Service Mesh的演示案例原始碼Github原始碼
- go-kit結合gRpc的使用和學習GoRPC
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- 深入 Go 的 Map 使用和實現原理Go
- 使用swoole作為MQTT客戶端並接收實現即時訊息推送MQQT客戶端