2011-12-29 73 views
8

有沒有人在亞馬遜的EC2上運行集羣Tigase XMPP服務器的經驗,主要是我想知道任何可能讓我感到不知所措的東西。 (例如顯然運行在EC2上Ejabberd可能會由於Mnesia的問題。)在亞馬遜EC2上縮放Tigase XMPP服務器

或者,如果你有安裝和運行在Ubuntu上Tigase任何一般建議。


的額外信息:

系統我正在開發一個移動應用程序和服務器(S)之間使用XMPP只是溝通(以接近實時的)。

用戶數量最初很小,但有望增長。這就是系統需要可擴展的原因。假設只有幾千個用戶,你不需要cc1.4xlarge EC2實例? (否則這將是非常昂貴的運行!)

我打算使用託管在Amazon RDS託管的XMPP服務器數據庫MySQL數據庫。

我還計劃創建Python編寫的外部XMPP組件,使用SleekXMPP。這將是這個外部組件完成服務器的所有「工作」,因爲我正在製作的應用程序與即時消息傳遞完全不同。對於這部分,我還沒有弄清楚如何將用Python編寫的外部XMPP組件連接到Tigase服務器。如我所料,documentation似乎暗示組件是專門爲Tigase編寫的,而不是像一般的XMPP服務器那樣使用XEP-0114: Jabber Component Protocol

有了這筆額外的信息,如果你能想到的任何東西,我應該知道我很高興知道。

謝謝:)

回答

25

我有很多經驗。我認爲有一些非顯而易見的問題。就像運行像Tigase這樣的應用程序的唯一可靠實例是cc1.4xlarge。其他人會導致CPU可用性問題,這只是一個抽獎,無論您是否有幸在不忙於其他人工作的服務器上運行您的服務。

此外,您還需要一個具有儘可能高的I/O的實例,以確保它能夠應對網絡流量。高I ​​/ O特別適用於數據庫實例。

不知道這是明顯與否,但有這個問題,在EC2上的主機名,每次啓動實例的主機名的變化和IP地址的變化。 Tigase集羣對主機名非常敏感。有一種方法可以強制/更改實例的主機名,所以這可能是解決問題的方法。

當然我說的是數以百萬在線用戶和每秒以上的非常高的流量100K XMPP包集羣。通常對於大型安裝來說,擁有專用服務器會更便宜,更高效。

一般Tigase運行得很好在Amazon EC2上,但你真的需要最新的SVN代碼,它有很多特別是在雲測試後添加優化。如果你提供一些關於你的服務的更多細節,我可能會有更多的建議。

更多評論:

如果涉及到成本,專用服務器是持續運行的服務總是更便宜的選擇。除非您打算每小時開啓/關閉服務器,否則我會建議您參加一些專門的服務。成本更低,性能更可預測。

但是,如果你真的想/需要堅持到Amazon EC2讓我給你一些具體的數字,下面是實例的列表,以及有多少在線用戶羣能夠可靠地處理:

  • 5 * cc1.4xlarge - 1mln 700K在線用戶
  • 1 * c1.xlarge - 118K在線用戶
  • 2 * c1.xlarge - 127K在線用戶
  • 2 * m2.4xlarge(具有5GB RAM用於Tigase) - 236K在線用戶
  • 2 * m2.4xlarge(20GB與RAM對Tigase) - 315K在線用戶
  • 5 * m2.4xlarge(與60GB的RAM Tigase) - 400K在線用戶
  • 5 * m2.4xlarge(與60GB的RAM Tigase) - 312K在線用戶
  • 5 * m2.4xlarge(與60GB的RAM Tigase) - 327K在線用戶
  • 5 * m2.4xlarge(與60GB的RAM Tigase) - 280K在線用戶

一些更多的評論:

  1. 爲什麼內存的數量很重要?這是因爲除了cc1.4xlarge實例之外,CPU功耗非常不可靠並且不一致。你有8個虛擬CPU,但如果你看看上面的命令,你經常會看到一個CPU工作,其餘的不是。 CPU功率不足導致內部隊列在Tigase中增長。當CPU電源回來時,Tigase可以處理等待的數據包。更多的內存Tigase有更多的數據包可以排隊,它更好地處理CPU缺陷。
  2. 爲什麼有5 * m2.4xlarge 4倍?這是因爲我在不同的日子和時間多次重複測試。正如你所看到的取決於時間和日期,系統可以處理不同的負載。我想這是因爲Tigase實例與其他一些服務共享CPU的能力。如果他們忙於Tigase受到CPU的影響。

這就是說,我認爲安裝多達10K的在線用戶,你應該沒問題。但是,其他因素如名單大小會影響流量和負載,因此非常重要。此外,如果您有其他元素產生顯着的流量,這會給您的系統帶來負擔。

在任何情況下,如果沒有一些測試中,它是不可能告訴你的系統如何真正的行爲,或是否能夠處理負載。

和關於分量的最後一個問題:當然

中Tigase不支持XEP-0114和XEP-0225用於連接外部組件。所以這不應該是用不同語言編寫的組件的問題。另一方面,我建議使用Tigase的API來編寫組件。它們可以作爲內部Tigase組件部署,也可以作爲外部組件部署,這對開發人員來說是透明的,在開發時您不必擔心。這是API和框架的一部分。 此外,您可以使用Tigase框架中的所有商品,腳本功能,監控,統計數據,更容易開發,因爲您可以輕鬆地將代碼部署爲測試的內部組件。 你真的不必擔心任何XMPP特定的東西,你只需填充processPacket(...)方法的主體,就是這樣。 在Tigase網站上應該有足夠的在線文檔來解決所有這些問題。

此外,我會建議閱讀關於Python支持多線程以及它如何在非常高的負載下運行。它曾經不是很好。

+0

感謝您的回覆(以及製作Tigase!)我已經添加了一些關於我正在開發的內容的更多詳細信息:-) – 2011-12-29 20:30:04

+0

只需檢查一下版本tigase-server-5.1.0-beta3-b2667即可。 tar.gz'(來自http://www.tigase.org/node/2474/2199)可以 - 或者如果它真的是SVN的最新結賬,會更好嗎? – 2011-12-30 01:32:32

+0

真棒,感謝您對Tigase和說明的出色洞察。 – 2012-01-01 16:07:33