
我有一個應用程式正在運行:
- 一個 nginx 實例作為前端(提供靜態文件)
- 用於後端的 Node.js 應用程式叢集(使用 cluster 和expressjs 模組)
- 一個 Postgres 實例作為資料庫
如果應用程式需要可擴充性(僅適用於 HTTP / REST 請求),那麼此架構是否足夠:
每秒 500 個請求(每個請求僅從 DB 中獲取數據,這些數據可能是幾個 ko,並且在獲取後不需要大量計算)。
20000個用戶同時連接
瓶頸可能在哪裡?
答案1
一個 nginx 實例每秒可以毫不費力地處理數千個小型靜態檔案。
應用程式層的可擴展性更多地取決於您的應用程式而不是node.js - 如果它在本地儲存檔案/會話資料/等,事情可能會變得棘手,但如果您將所有儲存放在像資料庫這樣的中心位置(或可能是類似的東西) Redis 用於儲存會話資料),然後透過添加更多節點來擴展應用程式層應該很容易。
資料庫幾乎總是最難擴展的;如果您主要進行讀取操作,那麼 postgres 9.1 有一些非常好的熱備用功能,允許您擁有一個讀/寫主資料庫和多個只讀從資料庫,這些資料庫可以處理大量的讀取工作。
發展寫入密集型資料庫系統可能是最難的可擴展性問題;當一個超級強大的資料庫伺服器無法跟上時,大多數人最終會完全重新思考和重寫他們的應用程式(除非從一開始就計劃這樣做,但計劃多個主資料庫將使很多事情開始變得更困難和更慢) ,而且很少需要-stackoverflow 網路都在一個資料庫上 IIRC)