在編程語言中,特別是Java中,應該考慮哪些因素以確保應用程序具有可伸縮性?我們舉一個Web應用程序的例子,它可以同時爲1000個用戶提供服務,預計用戶可能會增長到100,000。另外假設目前只提供了特定的功能,並且將來我們可能需要添加更多功能,如報告等。我們是否需要確保某些類型的瓶頸不會發生,或者是否應該避免某些類型的設計,這可能會限制可伸縮性?應該考慮怎樣考慮可伸縮性
0
A
回答
1
瓶頸是IO(磁盤,數據庫......)和網絡。編程語言並不是什麼大問題。
3
- 儘可能避免鎖,尤其是全局鎖。
- 靜態通常會導致鎖定看起來像個好主意,儘可能避免靜態的情況。他們也使測試更加困難。
- 您的數據如何存儲?你在使用Sql數據庫嗎?這將如何擴展?你可以使用NoSql數據存儲嗎?提示會計類型應用程序的答案是否定的,我們需要Sql的transacionality。
- 請注意拉型訂閱,具體取決於您的加載推送類型訂閱可以更好地擴展。例如10個消費者每秒鐘檢查一次狀態變化是沒有問題的,10000個消費者每秒檢查一次狀態變化更具挑戰性。如果數據每分鐘更改一次發佈效率更高,如果更頻繁地更改,則每秒1次發佈者可以選擇批量更改。
- 在你的架構圖中尋找星形,當星星中心的機器過載時會發生什麼?在很多情況下,這將是您的數據存儲區,並且大多數Sql數據庫的成本很高,難以擴展到只有大量只讀副本的讀/寫主機。如果情況確實如此,並且你知道你將會變得越來越大,那麼請儘早考慮分區(在多個讀/寫主分區上分割數據)。
- 緩存 - 是一個像Memcached一樣的共享緩存可以幫助您嗎? (通常不需要粘性會話)
- 儘早聘請專家來審查設計。
1
決定可擴展性對您意味着什麼。
每個應用程序都在某種意義上進行擴展,但「可擴展性」似乎只適用於缺乏在特定問題域中進行擴展的應用程序。您的問題域與我的問題域不同,因此如果我提供可伸縮性建議,則與在應用程序中實際未觀察到的用例優化相同。你現在認識到這是過早的優化(很多非常糟糕的系統設計選擇的根源)。
因此,要弄清楚什麼可能增長,什麼可能不增長,並把你的錢(和時間)放在你痛苦的地方。基準。衡量它。
一旦您瞭解您的應用程序可能無法擴展的感覺,請在嘗試解決該問題時進行一點研究。這樣你就不是完全靠自己,你可以利用大量的可擴展性工作,但爲你的特定情況。
請記住,要實現更好的可伸縮性,您必須在某個地方進行折衷。無論你的程序會在時間,內存,硬件要求或其他方面增長。如果您沒有關於處理時間,內存利用率等的性能指標,則您未滿足先決條件要求而擔心可伸縮性。
0
我想這是浪費時間和空間寫在這裏。我強烈建議您閱讀Scalability Rules,其價格便宜,寫得很好,寫得很好。
相關問題
- 1. 性能考慮
- 2. 我應該考慮反思
- 3. WCF多線程與可伸縮性考慮
- 4. Flex性能考慮
- 5. 排序考慮的情況下考慮
- 6. 設計可伸縮Web架構時需要考慮什麼
- 7. 。應該考慮關鍵尺寸?
- 8. 部署iPads應該考慮什麼?
- 9. 選擇SQL/NoSQL應該考慮什麼?
- 10. 哪個log4j appender應該考慮
- 11. 設計考慮
- 12. 設計考慮
- 13. 考慮到DST
- 14. Java Math.random()考慮
- 15. 考慮JPQL
- 16. 考慮訂婚
- 17. UISlider不考慮
- 18. 與db.BlobProperty性能考慮()
- 19. 登錄C++(性能考慮)
- 20. 性能考慮多次
- 21. 考慮到Azure的可伸縮性,ASP.NET網站是否已經多線程?
- 22. 可分凝Tuxedo服務(性能考慮)
- 23. 我怎麼能把Jbuttons考慮到arraylist考慮他們的名字?
- 24. 不考慮條件
- 25. 不考慮位置
- 26. uitableviewcells,設計考慮
- 27. 考慮使用PHP
- 28. setSearchDisplayController考慮private-API?
- 29. 其考慮以下
- 30. 考慮使用Firebase
這是一個非常廣泛的問題,高度依賴於上下文。提供更多關於什麼類型的應用程序的詳細信息,可能會給你有用的答案。 – kosa 2012-01-31 15:15:04
編輯了問題陳述 – Gaurav 2012-01-31 15:22:44