3

我有一個典型的無狀態Java應用程序,它提供了一個REST API並在Postgresql數據庫中執行更新(CRUD)。如何使用REST API和數據庫擴展Java應用程序?

但是客戶的數量在不斷增長,我覺得有必要

  • 增加冗餘,這樣,如果一個失敗,另一個發生
  • 爲此,我可能會需要一個負載均衡?
  • 通過不淹沒網絡和只有一臺服務器的CPU來提高響應速度(但是,負載平衡器如何不會被淹沒?)
  • 也許我需要分發數據庫?
  • 我希望能夠無縫更新我的應用程序(我已經看到了啄叫kubernetes這樣做):殺死每個冗餘節點逐一併立即用一個更新版本來替換它
  • 我的應用程序也存儲了一些圖像文件,這在磁盤大小生長快,我需要能夠進行發放
  • 所有這一切都必須在備份能夠

這是什麼,我現在有圖(包括Java應用程序和DB上相同的服務器):

enter image description here

對此進行縮放的最佳/正確方法是什麼?

謝謝!

回答

4

的Web服務器:

在多個服務器上運行你的應用程序,背後負載平衡器。使用AWS Elastic Beanstalk或使用EC2 +自動調整羣組+ ELB推出自己的解決方案。

您提到了關於負載平衡器「氾濫」的問題,但如果您使用Amazon的Elastic Load Balancer服務,它將自動擴展以處理您獲得的任何流量,這樣您就不必擔心這種擔憂。

數據庫服務器:

移動你的數據庫RDS,並實現多AZ故障切換。這將創建一個熱備份服務器,當您的主服務器出現問題時,您的數據庫將自動進行故障切換。可以選擇添加只讀副本以擴展數據庫容量。

如果您尚未在Redis中開始緩存數據庫查詢。有很多插件可以很容易地用Hibernate來做到這一點。如果您的應用程序定期執行相同的查詢,這會佔用數據庫服務器的巨大負擔。將AWS ElastiCache或RedisLabs用於您的Redis服務器。

圖片:

停止存儲在Web服務器的圖像文件!這造成了很多可伸縮性問題。將這些移動到S3並直接從S3提供服務​​。 S3爲您提供無限的存儲空間,自動備份以及從S3直接提供圖像的能力,從而減少Web服務器的負載。

部署:

有這麼多的解決方案,在這裏,它只是成爲一個問題,關於哪種方法有人喜歡。如果您使用Elastic Beanstalk,那麼它會爲部署提供解決方案。如果你不使用EB,那麼有數百種解決方案可供選擇。我建議先設計你的環境,然後選擇一個自動化的部署解決方案,它可以與你設計的環境一起工作。

備份:

如果你這樣做對你應該不會有太大您的Web服務器進行備份。使用Elastic Beanstalk,您將需要重建您的Web服務器的是您檢入Git的代碼和配置文件。如果最終不得不備份EC2服務器,則需要查看EBS快照。

對於數據庫備份,RDS將自動執行每日備份。如果你想在RDS之外進行備份,你可以使用pg_dump和cron作業來安排你自己。

對於圖像,您可以啓用S3版本控制和多區域複製。

CDN:

你沒有提到這一點,但你應該尋找到一個CDN。這將允許您的應用程序更快速地服務,同時減少服務器的負載。 AWS提供CloudFront CDN,我也建議您查看CloudFlare。

相關問題