簡體   English   中英

NodeJS中的微服務架構

[英]Microservices Architecture in NodeJS

我正在進行一個側面項目,並且我將我的Skelton項目重新設計為微服務,到目前為止我沒有找到任何遵循這種模式的開源項目。 經過大量的閱讀和搜索,我總結了這個設計,但我仍然有一些問題和想法。

在此輸入圖像描述

以下是我的問題和想法:

  • 如果我有來自同一微服務的2個節點,如何使API網關足夠智能加載請求加載?
  • 如果其中一個微服務失效,發現應該知道什么?
  • 有沒有類似的實施? 我的設計是對的嗎?
  • 我應該使用尤里卡或類似的東西嗎?

你的設計似乎沒問題。 我們還使用API​​網關方法構建我們的微服務項目。 包括網關服務(GW)在內的所有服務都是容器化(我們使用 docker )Java應用程序( spring bootdropwizard )。 也可以使用nodejs構建類似的體系結構。 與您的問題相關的一些主題:

  • 身份驗證/授權: GW服務是客戶端的單一入口點。 使用具有nodejs libray的JSON Web令牌(JWT)在GW中處理所有身份驗證/授權操作。 我們在JWT令牌中保留用戶角色等授權信息。 一旦在GW中生成令牌並返回到客戶端,在每個請求時客戶端在HTTP頭中發送令牌,然后我們檢查令牌是否客戶端具有調用特定服務或令牌已過期所需的角色。 在這種方法中,您不需要在服務器端跟蹤用戶的會話。 實際上沒有會話。 所需信息位於JWT令牌中。
  • 服務發現/負載均衡:我們使用的碼頭工人碼頭工人群這是在泊塢窗引擎(碼頭工人v.12.1后)捆綁一個碼頭工人的發動機集群工具。 我們的服務是碼頭集裝箱。 使用docker的容器化方法可以輕松部署,維護和擴展服務。 在項目開始時,我們一起使用Haproxy,RegistratorConsul來實現服務發現和負載平衡,類似於您的繪圖。 然后我們意識到,只要我們創建一個docker網絡並使用docker swarm部署我們的服務,我們就不需要它們來進行服務發現和負載平衡。 通過這種方法,您可以通過為每個環境創建不同的網絡,輕松地為一台或多台計算機中的dev,beta,prod等服務創建隔離環境。 創建網絡並部署服務后,您不關心服務發現和負載平衡。 在同一個docker網絡中,每個容器都有其他容器的DNS記錄,並且可以與它們通信。 使用docker swarm,您可以使用一個命令輕松擴展服務。 在每次請求服務時,docker會將請求分配(加載平衡)到服務實例。

你的設計還可以。

  1. 如果您的API網關需要實現(可能就是這種情況)CAS /某種Auth(通過其中一種服務 - 即某種用戶服務),還應跟蹤所有請求並修改標頭以承載請求者元數據(對於內部ACL /作用域使用) - 您的API網關應該在Node中完成,但應該在Haproxy下,它將關心負載平衡/ HTTPS

  2. 發現處於正確的位置 - 如果你找到一個適合你的設計的東西,但是領事

  3. 您可以使用consul-template或將自己的微發現框架用於服務和API網關,以便它們在引導時共享端點數據。

  4. ACL /授權應該按服務實現,API Gateway的第一個請求應該受所有授權中間件的約束。

  5. 使用API​​網關跟蹤請求是明智的,為每個請求提供請求ID,以便在“內部”系統中跟蹤生命周期。

  6. 我會添加Redis用於消息傳遞/工作者/隊列/快速內存中的東西,比如緩存/緩存失效(你無法處理所有的MS架構) - 或者如果你有更多的分布式事務和很多消息傳遞,那就選擇RabbitMQ

  7. 在容器(Docker)上旋轉所有這些,這樣就更容易維護和組裝。

  8. 至於BI為什么你需要一個服務呢? 您可以擁有外部ELK Elastisearch,Logstash,Kibana)並同時擁有儀表板,日志聚合和巨大的大數據倉庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM