gorouter調研

jopen 9年前發布 | 29K 次閱讀 gorouter 網絡技術


最近在公司調研docker集群方案,涉及到 router這一層,有兩個可選方案,源于cloudfoundry的 gorouter & 源于dotcloud的 hipache , 因為對golang實現的gorouter比較有好感,就主要調研了下。

gorouter介紹

項目地址: https://github.com/cloudfoundry/gorouter/

Gorouter來源于CloudFoundry,后文簡稱為router。它是整個平臺的流量入口,負責分發所有的http請求到對應的 instance。它在內存中維護了一張路由表,記錄了域名與實例的對應關系,所謂的實例自動遷移,靠得就是這張路由表,某實例宕掉了,就從路由表中剔 除,新實例創建了,就加入路由表。

Gorouter依賴

  1. Go

    Gorouter使用golang編寫,因此環境需要預先安裝go編譯環境

    Golang Url: https://golang.org/dl/

  2. Gnatsd

    來源cloudfoundry,是一個開源輕量高性能的消息系統,gorouter依賴它來作為消息系統,進行PUB/SUB操作。

    官方地址: http://nats.io/

    項目地址: https://github.com/apcera/gnatsd

Gorouter架構中所處的位置

無論是在cloudfoundry還是在我們設計的容器體系中,都是作為流量入口存在。

  • 在CloudFoundry架構中的位置:
    gorouter調研
  • 在設計的容器方案中的位置:
    gorouter調研

Gorouter性能

需要了解兩個組件的性能,一個是gorouter本身,另一個是他依賴的Gnatsd,總體感覺性能不錯。

Gorouter,官網沒有它的proxy性能數據,只是說它的邏輯簡單,性能很好,后期可以專門對它的轉發性能做一下測試。

Gnatsd:性能數據來自其官方:

With gnatsd (Golang-based server), NATS can send up to 6 MILLION MESSAGES PER SECOND.

Here's a detailed Performance Comparison between NATS, Redis, NSQ, RabbitMQ, and more. The below chart compares throughput for 4k payloads:

gorouter調研

Gorouter部署

一個比較典型的gorouter部署架構為:

gorouter調研

其中,需要關注的是RouteFlush這一塊,他的作用是將需要進行proxy的uri rule publish給gnatsd,從而使gorouter可以從gnatsd處sub到&生效,同時,以一定的頻率對現有rule進行 publish 刷新,因為gorouter只對rule保留時間T(在config中配置,默認120s)。

Routeflush需要自行實現。

Gorouter使用

  • Goroute監聽router.register、router.unregister等幾個頻道。

    Publish router.register&router.unregister的數據體格式為:

{
"host": "127.0.0.1", //后端映射的host
"port": 4567, //后端映射的port
"uris": [
"my_first_url.vcap.me", //對應的域名1
"my_second_url.vcap.me" //對應的域名2
],
"tags": {
"another_key": "another_value",
"some_key": "some_value"
},
"app": "some_app_guid",//app id
"private_instance_id": "some_app_instance_id" // instance id
} 

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