2017-02-06 20 views
1

我有領事管理的幾個後端微服務,並得到一個服務的一些數據,另外一個,我用的領事服務發現功能 - 就像讓所有健康的服務器,然後從檢索得到服務器地址和端口入口等。但我應該如何從前端做到這一點?只需調用需要的微服務器使用它的實際ip或使用docker容器的名稱空間調用它?從知道如何做到甚至更好的人那裏得到任何迴應會非常有幫助,因爲我堅持了一下。領事:SD架構。從前端訪問微服務的正確方式是什麼?

回答

0

在調查過程中,我發現有幾個方法:

  1. 客戶端服務發現 - 假設你有領事,它知道所有關於可用的服務器及其狀態,在客戶端 你應該寫一個服務層,它可以調用領事的API,獲取 健康的服務器,然後再做一個HTTP請求到服務器所需。 (當然,它可以是一個位聰明並具有能力例如緩存 健康服務器等)。

  2. 服務器端的服務發現(負載平衡器) - 領事上述的附加層 - 它可以是或的haproxy nginx的,它會請求轉發到 需要服務器。 (從前端您可以使用領事館名稱 或碼頭集裝箱DNS名稱)。

  3. 服務器端的服務發現(API網關) - 最後一個,你可以寫一個詳細的microService檢查其狀態的領事之後將處理到所需的服務器的所有請求,並代理他們。

但現在還有一個問題 - 您應該使用哪種方法? - 我認爲這取決於項目的複雜性,服務器負載和微服務的數量。

恕我直言,如果你有幾個微服務和低服務器負載,您可以使用其中任何一個,但在任何其他情況下,我認爲這是更好的選擇方法二路。

1

通過「前端」你的意思的Javascript在網頁瀏覽器或一個軟件,你已經得到了同一個數據中心內運行的運行?我假設我們並不是在這裏談論網絡瀏覽器場景。

我認爲客戶端發現智能高速緩存和循環負載平衡秤最好的,因爲是無單一故障點,並非常快速反應集羣內的任何干擾。但是它將更多的邏輯推向客戶端,使得日誌記錄比Nginx的普通訪問日誌更難。

第二個選項是非常規範和易於理解的,並且Nginx的和HAProxy的設計爲這個工作量。需要注意的是,你應該有一個可用的少數人不具有單一故障點,並提升它們的可執行文件(特別是如果你在泊塢運行它們)會導致停機時間短的時間。無論如何,客戶需要以某種方式發現這些負載平衡器,DNS是最常見的選擇。如果情況非常靜態,並且所有內容都在默認端口上運行,則DNS工作良好,因此您無需使用TTL和SRV記錄進行過多修補。

第三選項使客戶端邏輯簡單,因爲API網關可以作爲一個「說法」你已經得到內部提供的服務行爲。但是,您仍然需要爲客戶找到服務,以便他們不會真正解決原始問題。

歡迎任何反饋,這是一個非常廣泛的話題,你的里程可能會有所不同。

更新:另外如果您使用的是HTTP協議,您可能需要通過HTTPS來保護它。有了負載平衡器,您就有機會在那裏終止HTTPS,並且在VPC內或防火牆後面有更簡單的非加密流量。

相關問題