2010-01-25 31 views
1

爲了快速構建搜索網站,我計劃將兩個團隊之間的工作分開:一個構建搜索引擎,一個構建Web UI(移動/桌面)。我的計劃是將搜索引擎構建爲基於.NET 3.5的一組REST服務。用戶界面可以使用其他技術構建。REST界面會讓我的搜索引擎變慢嗎?

問題:REST接口可能是性能瓶頸嗎?如何最好地避免這種情況?

回答

1

在這種情況下,REST不可能成爲瓶頸。從您的帖子中不清楚您是直接從客戶端上的HTML UI進行REST調用,還是在後端進行服務器到服務器REST調用。所以我會在下面介紹兩種情況。

如果您的客戶端用戶界面和服務器之間正在進行REST調用,那麼使用REST或其他HTTP遠程方法相對較少 - 在後端執行搜索並將結果發回的時間對客戶來說應該會使REST調用本身的影響變得黯然失色。如果你想提高性能,關注客戶端網絡技巧(例如HTTP壓縮,適當的緩存頭等)並優化你的搜索引擎本身。

如果你的架構是服務器(託管你的Web UI)調用另一個層(您檢索算法引擎),那麼這些層之間的調用通過REST也不宜過多添加到您的總延遲的一層。這是因爲(與上面相同)運行搜索並將結果發送回客戶端通常至少需要幾百毫秒,並且後端REST調用(如果正確完成)的開銷通常爲50ms或更少。

這就是說,它很容易陷入困境的服務器到服務器的HTTP調用客戶端。例如,許多HTTP客戶端庫(包括.NET)將默認限制併發客戶端連接的數量,這對於構建實際的客戶端應用程序是有意義的,但如果從實際上是「客戶端」的應用程序服務器同時爲數百個用戶提供服務。其他潛在的問題包括身份驗證問題,代理問題,DNS等。因此,要小心謹慎地構建和配置您的REST客戶端代碼,並確保用幾百個併發用戶進行加載測試!

+0

是,該架構將涉及服務器端呈現%1它調用後端REST。感謝關於縮放的提示 - 這一點非常重要,因爲此網站需要每週投放200萬次網頁展示。 – domspurling 2010-01-25 13:09:53

+0

我會更進一步,並說爲什麼要使用REST進行服務器到服務器通信。您已經在使用WCF,您可以控制交互的兩個方面。爲什麼不定義一個WCF ServiceContract? REST對於減少客戶端和服務器之間的耦合非常好,HTTP對於整個網絡中的客戶來說非常有用,但是如果你的服務器坐在一起,爲什麼要付出代價? – 2010-01-25 13:36:34

+0

WCF是我們通常要做的,但在這種情況下,我們可能必須是異構的 - 不能假設整個 – domspurling 2010-01-25 13:59:58

0

編號REST不是(通常也不是)瓶頸。 REST HTTP沒有花哨的HTML頁面。它比普通的網頁更便宜,更快。

-1

我認爲它不應該影響你的表現,但有一個正確使用REST服務的.Net有ASP.Net MVC完全支持REST。

千萬記住通過這個鏈接來閱讀http://www.ytechie.com/2008/10/aspnet-mvc-what-about-seo.html

+0

MVC支持一些以html爲中心的開發,並且僅適用於html或json驅動的應用程序的HTTP。它不再支持ReST,而不是任何其他允許你訪問http頭和流的框架。 – SerialSeb 2010-01-26 23:28:23