2016-09-25 103 views
1

我是AWS新手,開始測試創建一個EC2實例。我打算部署一個簡單的ASP.Net網站,我將直接在EC2實例上託管我的數據庫。無狀態和實例數據庫

現在,我聽說在開發ASP.Net應用程序時我需要小心,因爲它需要「無狀態」,我不能依靠ASP.Net SessionState來維護數據。

我通常的做法是將狀態存儲在數據庫中,因爲(理論上)任何ASP.net應用程序都將訪問相同的數據庫。

這是我的主要問題:

  1. 在我來說,我將主持在同一個EC2實例數據庫,會話狀態的問題會怎樣?

和其他附帶問題:

  • 我甚至都不需要擔心,現在,因爲我只有一個EC2實例?
  • 未來我可能會將我的「實例」數據庫移動到RDS。在那種情況下,我可以安全地將會話狀態存儲在數據庫上,或者有更好的解決方案?
  • 回答

    3
    1. 就我而言,我會將數據庫託管在同一個EC2實例中,會話狀態的問題會發生嗎?

    不,您不會在這種情況下遇到會話狀態問題。當單個用戶的HTTP請求分佈在多個Web服務器上時,會遇到會話狀態問題。即使你有多個Web服務器,你可以使用粘性會話,或者使用類似Redis的分佈式會話存儲來緩解這個問題,如果你不想完全無狀態的話。

    我建議你花時間瞭解什麼是無狀態網絡架構,以及它正在嘗試解決什麼問題。將會話從一個地方(Web服務器)移動到另一個地方(數據庫服務器)不會使您的應用程序變爲無狀態,並可能導致將您的可伸縮性瓶頸從一個位置簡單地移動到另一個位置。

    1. 我現在甚至不需要擔心,因爲我只有一個EC2實例?

    正確,你不需要擔心只有一個EC2實例。就像在單個筆記本電腦上運行應用程序時測試應用程序一樣,您不必擔心它。

    但是,如果您認爲將來需要跨越多個服務器擴展您的應用程序以處理更高的負載,那麼您至少需要考慮如何在您處於早期階段時完成目標設計你的應用程序的階段。

    1. 將來我可能會將我的「in-instance」數據庫移動到RDS。在這種情況下,我可以安全地將會話狀態存儲在數據庫上,或者有更好的解決方案嗎?

    如果要存儲在Web層(這將使Web層的容易橫向擴展和負載分配)外會話狀態,那麼你可以使用一個RDS數據庫。但是,如果每次處理請求時必須加載和更新該記錄,那麼這可能會導致相當大的數據庫IO。我可以看到這是一個真正的瓶頸。

    我強烈推薦在這種情況下使用Redis服務器,而不是關係數據庫。亞馬遜的託管Redis服務稱爲ElastiCache。

    2

    是的,您可以在同一個實例中安裝/託管數據庫。唯一的要求是當你啓動你的實例時,確保AMI是EBS支持的。啓動實例時,您將從AMI啓動它。如果AMI是EBS支持的,即使停止實例,您的根卷仍然存在。 Amazon EC2 Root Device Volume

    如果您的數據庫不需要大量計算和內存資源,如果您在同一實例中運行數據庫,則不會有任何問題。我建議你:

    • 當啓動你的實例並在附加捲中安裝你的數據庫時附加一個卷。爲了獲得更高的性能,您可以選擇爲您提供快速I/O的磁盤類型。
    • 選擇具有足夠CPU和內存的實例類型。你甚至可以啓動您的實例
    • 可以遷移你的數據庫到RDS後
    • 你可以考慮DyanamoDB(停止實例後)撞了CPU /內存,但它是一個的NoSQL數據庫