紐約時報開發出基于Go語言的微服務工具包Gizmo

jopen 8年前發布 | 19K 次閱讀 微服務 Go語言

紐約時報(NYT)開發團隊已經發布了Gizmo,這是一個基于Go語言的開源微服務工具包,這個工具包帶有可配置功能策略和基礎的交互端口,能給用戶提供標準化的配置、日志、質量檢查以及端點指標等功能來提高服務質量期望值。

根據NYT官方網上一篇開發團隊寫的關于代碼和開發的介紹,開發團隊在過去的三年里完全采用了Go編程語言,Go語言在很多開發任務里起到了大作用,尤其是在構建JSON API過程中。專注于創建基于API的Go服務,而創建Gizmo微服務工具包是必不可少的中間環節,現在這一工具包已經開源出來供大家使用。

InfoQ隨后采訪到了NYT首席軟件工程師JP Robinson,問了一些關于創建微服務工具包的動機,因為這一動機直接促使了基于Go語言的微服務框架的發展前景,以及未來的走向。

InfoQ:先簡單介紹一下Gizmo吧,以及創建這一框架的初衷?

Robinson:Gizmo是一個集合,集中了可整合的工具、功能以及交互頁面來幫助開發者構建Go服務,具體來說就是將API和pubsub daemons集合在一起。這個工具包剛開始的時候是由一小群開發者發起的,目的是為NYT構建一個專屬郵件平臺。

InfoQ:相比較用起來更簡單更標準的Go庫,或其他新興的Go微服務框架而言,Gizmo做了哪些簡化來完成編寫微服務的?

Robinson:Gizmo首先能夠打動開發者,讓開發者有開發感覺的就是它的標準庫,但是增加附加功能只會降低微服務成功實施的可能性。舉例來說,Gizmo有一個纏繞著http.Handlers的中間件,這個中間件的終端就是http.HandlerFuncs。這樣的設計就可以幫助開發者來編寫看起來像是標準庫的代碼,只是沒想到他們意外獲得了寶貝,Gizmo能給自動收集關于代碼狀態和請求執行時間的度量值。

重新使用標準庫也賦予了Go語言開發者快速瀏覽代碼并判斷運行狀態如何。另一個優點就是打開Gizmo之后能夠連接到各種依附于標準庫接口的現有開源工具。一個很好的例子就是Gizmo在“github.com/NYTimes/gziphandler”里的使用。

InfoQ:您之前說過Gizmo是向Peter Bourgon開發的Go Kit最好的致意,能解釋一下嗎?對開發者了解這兩個框架有什么好處?

Robinson:當我第一次看到Peter Bourgon介紹Go Kit的時候,我特別激動,立刻開始查看README里的相關項目,尋找是否有些東西可以在內部推廣使用。NYT有多種類型的服務,絕大多數服務都是基于JSON和HTTP服務端的,所以,表單里以RPC(Remote Procedure Call)為中心的服務框架不可能再做到開箱即用。

同時我也感覺到一些可用的框架正在抽象出標準庫,因此我們需要一些簡單、高可用的東西。也正是從那個時候起,我決定采用Go Kit:

  • 重新執行功能可以用來包裝現在的程序包。Gizmo的SimpleServer真的只是一個由Gorilla Toolkit內部的mux、context、 logrusgo-metrics 和標準庫組成的服務器。RPCServer同樣是由這些東西組成的,只不過多了一個gRPC。
  • 支持消息傳遞模式不同于RPC。Gizmo的PubSub程序包提供了簡單的Publisher和Subscriber接口,同時有兩種實現方式。
  • 對過程監控有不一樣的見解。Gizmo服務器暴露出一個可配置和可擴展的質量檢查端點。我們期望服務能夠發現系統并通過它們和Gizmo進行互動。
  • 在配置傳遞上有優勢。Gizmo服務器和PubSub程序包和配置程序包嚴重耦合。同時我們還發現,讓這個程序包靈活快速跨團隊協調服務器完全不一樣,但只要獲得配置,我們的起點就更高。

從這里來看,他們的想法是在Gizmo的服務器程序包里構建一個GoKitServer或GoKitService。我的想法是,希望這個服務器能夠把Go Kit端點和Gizmo里現有的服務器和服務接口工具結合起來。

InfoQ:和GOA框架相比起來,Gizmo似乎和API設計關系并不大。這背后的基本原理是什么?

Robinson:我發現既要保持工具包簡單又要遵守Go語言對軟件開發的靈活性,同時還得確保學習工具包的難易程度平緩。其實構建一個Gizmo應用程序并在現實工作環境中使用它,會遇到很多沒有解決方法的問題。要想知道如何構建、測試、使用Gizmo應用程序的話,可以看這里的博客open.blogs.nytimes.com。

InfoQ:如何讓感興趣的開發者成為Gizmo項目的貢獻者?

Robinson:NYT目前依然過于依賴SimpleService和JSONServices。我們倒是愿意幫助一些人嘗試著使用GoKitServer,這是一個由github.com/julienschmidt/httprouter組成的FastSimpleServer,也有可能是一個由Hugo模板工具組成的WebServer。另外,Kafka pubsub的實現仍然處于試驗階段,還需要更多的測試。

這些任務多的有點嚇人,所以我們欣然接受能夠提高測試水平的任何幫助,最近我們將ContextService和ContextHandlers添加到了工具包里。我也鼓勵人們嘗試使用這些工具包,如果發現bug的話最好能創建問題描述,當然也歡迎用戶在別的論壇渠道上反饋對Gizmo的建議及改進方式。

查看英文原文: Introducing ‘Gizmo’, a Golang-based Microservices Toolkit from The New York Times Development Team

來自: http://www.infoq.com/cn/news/2016/02/gizmo-microservices-toolkit

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!