我想從擁有大規模生產系統的經驗豐富的Java專業人員那裏知道,需要做些什麼來構建Web應用程序來擴展每天可以處理一千萬個以上的請求?在Java中開發高度可擴展的Web應用程序需要做些什麼?
例如,如果需要進行某種緩存,那麼生產質量庫用於緩存?
我想從擁有大規模生產系統的經驗豐富的Java專業人員那裏知道,需要做些什麼來構建Web應用程序來擴展每天可以處理一千萬個以上的請求?在Java中開發高度可擴展的Web應用程序需要做些什麼?
例如,如果需要進行某種緩存,那麼生產質量庫用於緩存?
這是一個很大的話題,不能輕易回答 - 通常需要針對特定類型的負載仔細設計非常大規模的應用程序,以便處理它們的特定類型的負載。
例如:如果您的架構主要處理只讀頁面視圖(易於通過複製大量廉價應用程序服務器進行擴展)與處理複雜財務事務(您需要某種方式協調大量的同時交易)。
幾點提示:
BTW - 每天10萬個請求是實際上並沒有那麼大。這僅僅是每秒115個請求。有了合理嚴格的編碼,一個現代化的服務器就可以搞定......
最重要的是您的應用程序應該具有一定的可預測性。至於「如何」,如果沒有對需求和體系結構進行更深入的分析,這是不可能的。緩存通常是某種形式或其他形式的關鍵組件。取決於幾個因素,如數據的波動性和變化率,可以採取不同的方法。最簡單的方法是隻有本地緩存,但要記住緩存數據的更改不會立即反映到所有節點上,除非添加了一些緩存同步。另一方面,您擁有完全分佈式緩存,如Terracotta BigMemory或其他分佈式/集羣緩存解決方案。
我建議你儘早建立性能測試基線。這將允許您測試您正在開發的系統的可擴展性。針對一個,兩個,三個等負載均衡節點運行基準測試並測量吞吐量。還要標識所有節點之間必須共享的資源或數據,以及如何正確地同步這些資源或數據以實現最佳可伸縮性。
將通常通過編寫和維護大型應用程序所獲得的內容壓縮爲以論壇帖子形式出現的答案是非常困難的。通常,人們通過這種專業知識向其他人支付大量的金錢。
您需要了解應用程序的想法。一些陷阱在分析階段變得顯而易見,尤其是在基礎設施(什麼是在什麼地方服務),其他的則是數據處理(同步如何工作?)。
其他將在稍後出現,如「我們將在X崩潰時做什麼」(插入X的基礎結構的任何部分)。根據這些情況檢查並重新檢查恢復時間。
然後你寫下整個想法的各個部分,測試失敗情況和用例。最後,如果你認爲一切都已經想到,那麼你就把它交給一個和你一樣有經驗的人,甚至更多,然後寫下他們所看到的所有問題,測試他們的抱怨,並改變他們的組織結構。適應所有用例的應用和/或基礎設施。
有**是關於這個主題**整本書。多本書。所以這個問題對於這種格式可能太寬泛了。 –