2016-01-23 91 views
4

我希望這個問題是正確的排序(如果沒有,而不是隻是向下投票,有人可以指示我在哪裏可以得到這個答案)。AWS S3,速度和服務器負載

我想成爲一名前瞻思考者,並在問題出現之前解決問題。

方案

我有一個小的郵件列表的網站,我每週都發布相關的,我喜歡的鏈接網頁的東西和發現有用的。

有一個最新的文章頁面,顯示當月我添加到數據庫中的所有內容。目前有6個部分;介紹,新聞,設計,開發,微博,Q & A.該網站顯示了這些像這樣:用於匹配所有條目{}月& & {

  • 檢查數據庫第}

  • 的foreach {}節回{標題} {}說明的{link}

我通常每節有大約3個鏈接。這也意味着每個頁面查看db請求的。

關注

  • 當/如果流行網站的收益,比方說,我得到一個5K遊客秒殺這就是我不認爲我的服務器主機要麼喜歡也沒有正眼看30000分貝請求,可能會導致我收費很多,而且我的網站崩潰。

問題

哪個這些解決方案之一,你認爲會是最明智的在速度方面,降低服務器資源,請求:

  • 1)使用PHP,使1分貝請求獲取所有條目,將它們添加到數組中,然後遍歷數組生成部分

  • 2)使用cron生成所有月份條目,將它們變成JSON f Ile和解析在頁面加載時,主機是JSON我的服務器

  • 3)上使用cron來產生所有月份的條目,使它們成爲一個JSON文件,並解析JSON在頁面加載,主機他們在AWS S3

  • 4)使用cron將所有條目生成爲單獨的文本文件,例如february-2016-intro-one。TXT並保存在S3上,那麼最新的文章頁面上得到每一個文本文件,並分析它們

討論

  • 如果您有任何其他想法,我會很高興聽到他們:)

感謝您的耐心閱讀此,期待您的答覆。

+0

不要擔心更多信息

更多的信息,是幸福的。真。 – user2182349

+0

謝謝,我總是很開心。你也一樣 。 – JamesG

回答

0

構建緩存!

當您執行其中一個查詢時,將結果與當前時間一起存儲在緩存中。當你下一步去做其中一個查詢時,檢查緩存 - 如果它在期望的時間範圍內(例如10個小時?),只需使用存儲的結果;如果時間已過,則再次執行另一個查詢並存儲結果。

這樣,您只會在每個時間段執行一次這樣複雜的查詢。對於製作緩存 - 它可能像將結果存儲在文件中一樣簡單,但它可以更好地將其保存在內存中(全局變量?)。我不是一個PHP人員,但似乎有一個apc_store()命令。

2

CloudFront是一項Web服務,可加速向最終用戶分發靜態和動態網頁內容,例如.html,.css,.php和圖像文件。

我的建議是堅持使用cron作業並將JSON文件保存到S3,但也使用CloudFront從S3存儲桶託管文件。雖然從您的服務器託管我似乎最快,因爲它位於只有一個地方或地區,速度會有所不同,取決於人們訪問它的位置。如果用戶從遠處查看您的網站,那麼他們的加載時間會比距離較近的用戶要慢。

有了CloudFront的,你的文件(S)分佈緩存在世界各地的亞馬遜50+的邊緣位置,讓您最快和最可靠的交貨時間。

此外,如果您希望用戶在更新後立即看到新內容,請查看Lambda。它運行代碼以響應來自其他AWS服務的事件。所以,無論何時更新數據庫(如果它是DynamoDB或RDS),您都可以自動生成新的JSON文件並將其保存到S3。一旦建立了連接,它仍將繼續由CloudFront分發。約CloudFront的here

約LAMBDA here