2009-02-08 43 views
3

我正在計劃開發一個Web服務,它必須具有很高的可伸縮性,才能處理大量的併發連接,可能有數千個連接。該服務將作爲一個API。它必須具有高度的響應能力,在請求和回覆之間延遲3秒被認爲是太多。有很多連接的Web服務

也許服務可能分佈在許多內部服務器之間,負載平衡網關充當流量管理,所以服務的實際處理不會佔用網關服務器。我正在考慮使用亞馬遜EC2,但我也可以使用一系列內部服務器,只要我可以找到它們的好用處。數據庫可能是MySQL(除非你有更好的主意)。

我意識到最好的解決方案是開發我自己的web服務器,但是我會花費太多時間,並且我懷疑我可以比我不知道的其他web服務器做得更好。

此外,我目前正試圖決定是否持久連接,但我可能會堅持後者。

那麼,對於一個好的,可擴展的解決方案的任何建議?

回答

1

亞馬遜EC2運行良好,但不要將您的定價基於$ 0。10個實例 - 它們非常不足。我建議至少從c1.mediums開始。我喜歡使用nginx實例作爲m1.small在c1.medium Web服務器實例前面的負載均衡(我最近構建的所有應用程序都是CPU綁定的,而不是內存綁定的)。

3秒很長時間。我通常使用200ms-400ms作爲性能目標。當然,這取決於你的應用對時間的敏感程度以及需要完成多少工作。

如果真的有3秒的工作要做,你可能需要一個後端網格預處理數據。那麼您可能需要更少的Web服務器,因爲它們大多數都是返回預製數據。

如果我在你的鞋子裏,我會用我最舒服的任何語言/平臺來構建一個原型。然後你可以瞭解你需要採取的措施。

不要忘記,構建高性能的Web應用程序需要時間。您需要編寫代碼,進行基準測試,重複進行縮放並縮短響應時間。

您需要編寫自己的Web服務器的實例數量非常少。這不是其中的一個。有很多可供選擇的。假設一個基於nix的平臺,你可以使用Apache,nginx或lighttpd。還有一些其他的,但它們通常用作應用服務器(tomcat,zope,mongrel等),並且在它們前面有apache/nginx/lighttpd/squid代理。

我還沒有真正使用現成的平臺(解決方案)來構建Web應用程序(我假設您的意思是某種Java堆棧或.Net堆棧)。我無法幫你。我使用的大多數工具(LAMP類型的東西)都是組件化的,並且允許在每個堆棧中放置替換件。超出一個組件並且不得不用另一個組件替代它是不常見的。例如,無負載均衡器 - >軟件負載均衡器 - >具有緩衝功能的軟件負載均衡器 - >硬件負載均衡器。所有這些對於不同級別的規模都具有成本效益。

3

我不同意開發自己的Web服務器是「最好的解決方案」。使用一個存在的。您不需要編寫服務器來部署Web服務。

.NET和Java EE都提供了創建和部署Web服務的方法。你不會說你選擇哪種語言,但是當然你可以在Java EE中編寫一個Web服務,並將它部署到Tomcat上,而無需編寫自定義Web服務器。

只要負載均衡,F5是一個很好的硬件解決方案,如果你能負擔得起。

3

你沒有提到協議。如果您使用RESTful方法,這是一段非常簡單的代碼。如果您使用SOAP方法,則更復雜。

Apache + FastCGI會做到這一點,但您的服務將是一個CGI程序。你將不得不用C或C++編寫可能令人不愉快的代碼。你可以使用Apache + mod_wsgi加上一個Python框架;它並沒有那麼快,但它會非常快,你不必編寫太多的代碼。

Glassfish將做到這一點,你可以用Java編寫。

一個商業產品(如Sun的JCAPS)會這樣做。

有許多Web服務框架 - 發明自己的不是一個好主意。

編輯「MaxClients」問題。

Web服務請求應該很快 - 它是一種資源 - 您可以從緩存或數據庫中獲取並響應。限制因素不是MaxClients - 它是可以成功共存並且是套接字協商的線程。

如果您的GET請求是冪等的,它們可以緩存在魷魚(或其他一些反向代理服務器)中。你可以有大量的這些。請注意,使用反向代理服務器與您的Web服務本身無關;但它與整體吞吐量有關。

+0

是的,我打算使用REST。使用Apache + FastCGI,Apache MaxClients不會出現問題嗎? – idevelop 2009-02-08 12:50:33