0

我需要來自曾在高度可擴展系統中工作的人的建議,其中4年或更多,其中每秒接收數千條消息,指令或事務。我的建築規模將在高層?

我的項目涉及一個潛在的數百萬用戶羣,其中活躍用戶通過網絡發出請求。這些請求可以是簡單的,例如閱讀我的消息,發佈消息,查看我的照片,上傳照片等,我們預計至少有85%的時間。另外15%(或更少的5%)可能涉及交易,例如與第三方系統集成或處理用戶的批准請求,例如,針對某種工作類型進行審查。

我的簡單架構設定如下:

Tomcat --> Spring MVC (REST)/Java --> Hibernate DB framework --> MySQL 

或其他替代架構,可能是:

JBoss --> Spring MVC (REST)/Java --> Hibernate DB framework --> InfiniSpan --> MySQL 

有沒有人有經驗的可擴展性,性能比較和realiability提供DB框架的和後端數據庫(無論是RMD​​S還是NoSQL),並確認上述兩種架構中的任何一種架構是否會按照上述規定提供測試平臺?簡單的「是」或「否」以及簡短的解釋就足以滿足我的需求,這樣我就可以完成上述具有挑戰性的架構。注:我已經知道負載平衡器,集羣和有效的編程技術。

謝謝先進。

+0

將標記或正文中的「已編輯」等標記放在問題中是不必要的。關於Stack Overflow的每個問題都附有詳細的編輯歷史記錄;你的在這裏:http://stackoverflow.com/posts/19387370/revisions –

+0

@RobertHarvey感謝您指出。然而,我想表達我的感受,即這個問題(即使它已被編輯爲遵守條款和條件),我不滿意你決定擱置這個問題作爲我的問題(我相信)是相當的具體。當然,一個簡單的是沒有答案是有用的,但關於如何解決這個主要的可擴展性問題的小提示肯定不會違反_broad_方面,因爲它本身(即架構,性能和可伸縮性)本質上是廣泛的。因此,我懇請您重新考慮。 –

回答

1

我沒有所有的答案,但這裏有一些注意事項:

  1. 春季數據REST(下一版本)會更快,基於非阻塞IO,那麼可能要開始播放而不是Spring MVC

  2. 確保您使用最快的JVM(可能是Oracle的,可能不是OpenJDK)和SSD驅動器。

  3. 請記住,您可以使用InnoDB主寫入/事務並複製到MyISAM從站(更快)以進行讀取/全文搜索。 MySQL適用於非常大型的網站,例如維基百科。

  4. 考慮在Tomcat之前的Nginx的靜態文件和SSL。您需要權衡更強大的SSL密碼與性能相比的優勢。

  5. 休眠速度很快。確保你加載懶惰(可能需要javassist),正確的提取連接,並有很多緩存。但Eclipselink或DataNucleus可能會更快。您始終可以從ORM開始運送更快,並測量性能並在熱點中切換到純JDBC。

  6. 很明顯,使用JMeter測試性能,你去。

  7. 爲您的靜態資源使用不同的無Cookie cookie域(如media.example.com)。緩存他們的垃圾。這將要求您使用www.example.com而不是example.com作爲您的主要網站域名。這將使您可以在靜態資源上使用SSL壓縮和HTTP壓縮(通過SSL),因爲在任何暴露會話或CSRF數據的域中,您都不應該使用SSL進行任何類型的壓縮。

  8. 根據人們需要查看更新的速度,可以考慮在您的API之前使用Squid緩存。

+0

我肯定會考慮Spring Data REST,謝謝你。你會說Hibernate的緩存是否足夠,或者我應該考慮任何補充產品? –

+0

非常感謝您的意見 –

1

它不是像是或否一樣簡單。 Hibernate將是一個瓶頸,因爲每次請求時都必須弄清楚如何存儲/讀取每個對象。雖然這並不像以前那麼慢,但它仍然是一個瓶頸。 您可能也會從分解數據庫中受益。你不可以。 你的整體策略在一個過於普通的答案中確定是有用的方式,是的。 我是否會將它作爲我在系統中的第一次切割,是的,一開始就沒有無窮無盡的感覺。 我的下一步是什麼?這取決於我的瓶頸在哪裏。

+0

感謝您的回答。你會推薦什麼來避免Hibernate瓶頸,直接JDBC或者你會推薦使用類似Datanucleus的NoSQL方法? –

+0

這完全取決於你的用例。沒有簡單的答案。 –