0

到現在爲止,我們的網站流量已經不大。我們的開發人員都不是大傢伙,但我們一直保持領先,並保持網站的運行速度非常快。也就是說,我們的開發團隊很緊張,我們累積了一些技術債務,而且有很多機會進行優化。在短時間內擴展支持大量的流量

沒有詳細說明,我們只是發現我們將在很短的時間內在不久的將來期待大量的流量。在幾個小時內幾百萬次點擊。縮放是一回事,但這比我們現在看到的要大幾個數量級。

我們是使用ELB和Postgresql在S3上託管的Rails應用程序。

考慮到這種情況,我想提出一些關於擴展和負載測試的廣泛起點的建議。

  • 更新:對不起,EC2,深夜:)
+0

可以緩存的信息,你需要爲靜態網頁? S3會爲那些沒有問題的人提供服務。你是否期待數據庫中有很多操作?讀?寫?這些查詢是特定於單個實體/用戶(不是複雜的查詢還是大量的連接)?谷歌應該幫助您找到許多負載測試應用程序。你看過EC2的自動縮放功能嗎?我相信他們有一些可以觸發CPU /內存。此外,可以使用Cloudfront完成靜態資源。 – 2013-04-04 04:40:54

回答

1

恭喜您,希望您的期望鍋了!

這是一個很難回答的問題,要綜合回答已有的信息。例如,您的網站是否在數據庫讀取,寫入或兩者都很重(並且是與您的db應變一致的分片/複製策略)?帶寬是一個問題,等等?明確的觀點將集中在確保您能夠訪問適當的硬件,並且您用於調配/部署硬件的任何接收都是最新的並且很好。你可以經常拋硬件來突然增加流量,直到你找到你發現的任何瓶頸的根源(是的,你會發現它們在不方便的時間!)

關於縮放你的應用程序,你至少應該:

1)緩存任何你可以。注意緩存過期等。 2)確保你的數據庫有適當的索引設置(基本上,你應該在你正在搜索的任何字段上有一個索引。) 3)密切關注你的日誌以識別潛在的長查詢,N + 1查詢,長視圖渲染等。 4)像Shopify在這篇文章中概述的那樣:http://www.shopify.com/technology/7535298-what-does-your-webserver-do-when-a-user-hits-refresh#axzz2O0gJDotV 5)爲你的堆棧的每一層設置一個好的監控系統(Monit,God等) - 突然流量高峯可能會迅速瓶頸您的應用程序在意想不到的地方,並導致更多的問題。級聯可以很快發生。 6)設置cron以自動執行您目前手動執行的所有這些小任務......您可能會在處理流量峯值時忘記執行此操作。 7)谷歌縮放軌道,你會看到噸的良好信息。 8)等等,等等......

你可以使用一些性能分析工具(rubyperf或類似NewRelic等)無論你從它們得到什麼響應,最好都可以作爲粗略的基準來考慮。簡單的原因是你的配置文件依賴於你的硬件堆棧,這肯定會根據實際的流量模式而改變。如果您擁有一個靜態內容頁面的站點,這非常容易實現......如果您的CMS站點數據庫不斷增長並且流量不斷增長,那麼這種操作非常困難。

祝你好運!

2

@LastZactionHero 非常有趣的問題,讓我詳細回答你,我希望你在談論一些電子商務應用程序,企業或B2B應用程序可以看到尖峯等。既然你已經提到你在s3上託管你的rails應用程序。讓我明確一些事情。 1)你不能在s3上託管一個rails應用程序。 S3是簡單的存儲服務。你只能存儲文件的地方。 2)我想你已經在AWS ec2上託管了你的rails應用程序,並在ec2實例上面附加了一個彈性負載平衡器,這很好。

3)您有一個自我管理的Postgresql部署在ec2實例上。

如果您在AWS上運行,則您可以輕鬆安全地進行擴展並縮小規模。

我可以在你現在的模型中看到一個問題,即你的db。 AWS已經將db作爲一項服務。這就是所謂的關係數據庫服務。它支持Mysql Oracle和MS SQL服務器。

RDS帶有很多的功能,如自動備份您的數據庫,高IOPS等

,但它不支持你的PostgreSQL。您需要擁有或管理自我管理的ec2實例並運行postgresql數據庫,但要確保它的故障安全,並且您確實有正確的備份和恢復系統。

AWS提供自動縮放api和命令行工具,非常簡單。

你不必擔心帶寬問題等,但我也承認安傑洛的答案。

您可以使用彈性內存緩存來緩存您的應用程序。如果需要加快您的應用,請使用CDN。 RDS可以管理高達30000 IOPS,它的一個怪物會爲你做很多工作。

隨意問我是否需要任何幫助。

(聲明:我是一名資深的DevOps工程師工作了一個電子商務公司,在軌道上使用Ruby)

+0

對不起,EC2,深夜:) – LastZactionHero 2013-04-04 13:59:00

+0

謝謝,這是有幫助的,很大程度上證實了我們的方向。我們正在計劃切換到RDS--我們有一些Postgresql特定的查詢需要我們整理,沒有什麼大不了的,大部分我們只是使用ActiveRecord的方法,所以我不會預料到一個巨大的問題。我也會研究Elastic Mem Cache。 – LastZactionHero 2013-04-04 14:02:02