簡體   English   中英

分離Node.js應用程序中的關注點並處理不同進程之間的負載

[英]Separation of concerns in Node.js app and dealing with load across different processes

我有一個Node應用程序,可將數據持久存儲到MongoDB數據庫中。 這些數據大部分在手,例如User集合的數據。 但是,該應用程序還具有“ Website收集”的概念,對於此收集,必須先從某個位置下載數據,然后再保存。

我想知道如何在應用程序中分離上述問題。 在服務層,我有UserWebsite類的東西。 它們提供基本的CRUD操作。 在完全相反的另一端,有一個用戶界面,用戶可以通過該界面輸入網站URL。 在此UI和應用程序之間將數據持久保存到MongoDB(服務層)的某個位置,應用程序必須對此URL發出請求以收集一些數據。 提取數據后, Website服務將保留該數據。

潛在地,可能一次輸入成千上萬個此類URL,並且由於負載問題,我不想降低處理Web服務器的Node進程。 因此,我認為將工作抽象到另一個過程並使用某種消息傳遞總線將應用程序綁定在一起將是一個好主意。

看來您已經正確地分解了系統-並在持久性“服務”層上創建了這種分離-但是,我將朝着分布式系統體系結構(即SOA /微服務)進行進一步的分離。

構建分布式系統的第一步是確定滿足應用程序總體業務目標所需的每個功能,並將這些功能映射到服務端點。 然后,每個松散耦合的服務終結點將服務於一個小的隔離的工作/功能,並將充當該業務目標的抽象。

通過將職責分離一直延續到服務端點,您可以為伸縮性,吞吐量,容錯,安全性,部署等創建小的獨立邊界。

例如-RESTful講,這可能意味着用戶(例如/users/{userid} )和網站(例如/websites/{websiteid|url} )的服務端點……可能還需要一個額外的資源來維護關系/兩者之間的鏈接(例如/users/{userid}/userwebsites : {websiteid:1234,url:blah.com )。

這種分離意味着您可以獨立處理網站處理責任,這不僅具有處理不同負載特性的好處,還有很多好處。

暫無
暫無

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

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