0

我很高興Amazon EC2用戶,我在這裏和那裏跟隨了一些教程(主要是this one),並且我成功部署了一個node.js應用程序。在亞馬遜EC2上縮小我的單實例node.js/mongodb應用程序 - 從頭開始​​

我目前有t2.nano機器,它可以很好地作爲我的情侶用戶的測試環境。目前我的iOS應用程序已經準備就緒,因此在發佈大版本之前,我需要關注可擴展性併爲更多用戶做好準備。

我樂觀地認爲我很快就會有1000個用戶。我希望準備好整個環境,以便至少能夠爲這些用戶順利工作。但問題是 - 我不知道我應該如何開始配置一切。

糾正我,如果我錯了,但我認爲我需要2-3臺機器t2.medium(?)所有這些運行我的node.js代碼,並由Amazon's Load Balancer處理,但數據庫呢?

如果我把事情做好了,我需要在一臺機器上(上面提到的那些t2.medium之一)設置一個mongodb主實例,並在另外兩臺機器上創建slave實例?

但是 - 如果我這樣做 - 那麼在機器之間複製數據呢?另外 - 每個t2.medium機器上運行的每臺node.js服務器必須與數據庫建立連接 - 是否指向主數據庫?

我試圖找到任何教程 - 類似於我用來部署單個應用程序的教程 - 但我很努力。我發現this youtube video一個傢伙描述他如何用5臺機器(一臺主人,其餘的人是奴隸)來設置環境,但我不確定這是否是一個好方向。

請問你們能否幫助我,並在此給我提示?我不知道什麼時候開始,現在我真的很感激任何事情。 謝謝!

+1

證明納米是不夠的。使用http://locust.io/或類似工具加載測試您的應用程序。檢查瓶頸,並縮小最弱的組件。 –

+0

是的,你說得對,'nano'確實不夠。目前我需要擴展環境,所以我想知道我該怎麼做 - 我是否需要設置3臺'中型'機器在單個負載平衡器後面?如果是的話 - 我如何將它們連接到我的數據庫?我曾想過用node.js和3'medium「機器與數據庫建立3臺'medium'機器 - 其中一臺有主設備和兩臺從設備,但是如何將這些設備連接到一個工作環境?我是否必須將每個node.js服務器指向我的主數據庫,並希望 - 在過載的情況下 - 從站自動接管? – randomuser1

+0

從nano開始,您可以享受橫向和縱向可擴展性。使用哪一個,以及要擴展的組件取決於負載測試和成本比較的結果。典型的設置使用主要讀/寫,並使用輔助冗餘,但有用戶案例直接連接到輔助。當您連接到副本集時,驅動程序的工作是找出哪個節點是主節點,並在選出後立即切換到下一個主節點。你可以繼續。這樣說,副本集使數據庫變得更慢,它與規模無關。 –

回答

0

這個答案只限於數據庫服務器的問題:

對於數據庫,你當然應該配置一個replica set;但爲了冗餘和可用性,不能支持更高的負載。 MongoDB文檔中有一些好的instructions on how to deploy

如果您想確保數據庫支持更高的負載,那麼您需要確保硬件(CPU,RAM,磁盤IO)完成任務;很難提前知道你需要什麼水平的硬件配置,所以我建議你做一些負載測試來找出給定的硬件如何響應。

+0

感謝Vince,我會仔細研究一下,現在當我檢查你的第二個鏈接時,它看起來就像我在原始問題中提到的YouTube教程中所做的完全一樣。目前,我不知道如何與我的node.js設置一起處理它,儘管...我不確定是否應該將代碼拆分到具有負載平衡器的單獨機器中,如果是這樣,如何首先將它與我的數據庫副本集 – randomuser1

1

我會盡力一步一步回答這個問題。請記住,這只是衆多可能的設置之一,可能完全不符合您的需求。

拓撲:

  1. AWS
  2. Node.js的
  3. MongoDB的

AWS - 你提到你現在正在爭取1000個用戶。你所說的關於你的應用程序的就是IOS,所以我們不知道後端數據庫的密集程度如何(CRUD操作)。

我會開始關閉如果您需要它,並關注可擴展性。因此,我強烈建議亞馬遜將其稱爲NAT Gateway。這將允許您的Node.js坐在面向Internet的服務器上,而MongoDB將在它後面。這首先保護了Mongo免受任何不必要的訪問。換句話說,初始設置爲1個網關(它可以存放Node.js),暫且讓我們稱之爲網關後面的Master MongoDB。只能通過來自Gateway的SSH隧道訪問此服務器。它位於CIDR地址範圍內。

但是正確設置NAT網關並不簡單1-2-3。您確實需要了解亞馬遜如何使用路由,當然也需要了解如何正確使用入站和出站規則。

實際的網關服務器(Node.js服務器)應位於ElasticIP上。當您需要擴展到更好的服務器時,這將爲您節省很多心痛。您在任何時候對服務器進行重大更改時都應該拍攝快照或實際的服務器映像。

至於網關服務器本身。根據您的Node.js實際代碼,您至少應該使用t2介質,(微不會這樣做)。至於保護,再次入站和出站規則,並可能在服務器上放置軟件防火牆。

我自己也使用了其他一些實用程序,但我認爲其中的一個實用程序是PM2。這將使您的節點代碼在重新啓動的情況下運行,並且隨着您擴展到服務器上的更多內核而使生活更輕鬆。

你沒有提到你選擇的操作系統,所以我不會觸及那個激烈的話題,除非說Ubuntu和AWS Linux是理智的選擇。

至於你現在在你的網關後面保護的MongoDB。這裏我可能會有點保守,基本上是因爲我正在處理你詢問的數字的現實。我個人認爲沒有理由讓1000個用戶在MongoDB上建立一個集羣或分片,直到你看到你的應用真正起飛。 NAT網關是可擴展的,如果你的應用起飛了,那麼你將會轉向ATLAS或Enterprise。但是,你想要羣集(主 - 奴隸),你可以選擇3或7(我認爲7可能是5)。一個是你的主人。你ssh隧道進入任何人,就像你ssh進入你的主人(顯然是通過不同的CIDR)。如果你做集羣,你必須真正密切關注mongod.conf file and all the parameters available to you

顯然還有很多需要寫的東西,當然很多人有不同的看法,這是一件好事。但是,我會在這裏謹慎(以及您的月度賬單!),直到您擁有需要工作的基本設置。然後,你可以將你的Mongo擴展到集羣和分片以及你的Node.js應用程序。

只是爲了總結:

  1. 入站和出站規則在AWS &路線
  2. OS將使用
  3. 實際的服務器和核心配置
  4. 的Node.js面臨的網關服務器上世界
  5. 網關後面的MongoDB服務器(或集羣)。
  6. 嚴重:您幾乎應該立即在MongoDB中創建角色。這也是最後一道防線。如果沒有至少一個管理員角色的設置,從來沒有MongoDB的實例,所以您將能夠控制訪問或更改數據所需的權限。

祝你好運 - 希望它能比你夢想的更好!

+0

連接起來,非常感謝您耐心編寫所有內容,我已經閱讀過一次,我已經閱讀過兩次,但絕對不是最後一次。我認爲這是一條更長的道路,但也很有趣。只要我完全理解了你答案中的所有單詞,我就會分析它,看看我該如何繼續。與此同時,我還有一個問題 - 我已經閱讀了一些其他問題和答案,並且我想到了設置 - 僅僅是開始 - 像這樣的設置:1'load ballancer'指向兩個't2.medium '具有'node.js'代碼的機器,以及一個存儲'mongo'數據庫的't2.medium' ... – randomuser1

+0

。從那時起,如果應用程序啓動並且變得流行(D),我會考慮增加更多的機器到負載平衡器,並可能用'mongo'升級它。你認爲這可能是一個健康的環境嗎?我在問這個問題,因爲我覺得我可以在幾個小時內創建這樣的環境,而不是花費幾天時間來挖掘更復雜的解決方案。你怎麼看? – randomuser1

+0

@ randomuser1查看我的帖子中提到的[NAT網關](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html)。只要您在安裝時提供足夠的磁盤空間,兩個t2就可以。請記住,MongoDB **絕對喜歡內存**,並且如果您正在執行繁重的CRUD,則需要正確設置mongod.conf中的參數。一旦你掌握了它,你就可以考慮真正的縮放,_if和when needed_。不要太過分,因爲你有每月的賬單需要考慮。 :) – twg