2012-05-20 110 views
1

在我最近的項目中,我必須編寫一個Web服務API來從數據庫返回數據。使用Redis來擴展Web服務

科技股是 - SQL服務器08 R2 - WCF

的數據是主要的鍵 - 值對,例如獲得用戶X最喜歡的顏色。

負載不是很大,但也不小 - 在高峯時約爲1,000個請求/秒。

我最初的想法是使用Redis作爲緩存,這意味着我們不會像往常一樣擊中SQL Server。然而,我一直在試圖從這個配置中獲得一些基準測試等,這並不是很好,這讓我懷疑Redis是否真的會爲我的問題提供任何好處!

建築是 - 單獨的數據庫服務器 - WCF應用服務器 - IIS - Linux的服務器的Redis

當我的桌面上打轉轉,在20K〜OPS /秒​​Redis的基準。好東西。

但是,由於每次調用都將通過Web服務,所以當我放置WCF層時,我只能獲得300次操作/秒。不是很好。無可否認,Web服務客戶端,Web服務和數據庫都位於同一臺機器上,因此可能會導致結果偏差!另外,當移動到真實環境時,網絡延遲將是一個主要因素。

我無法以任何方式對這些請求進行批處理。

所以 - 我的問題 - 我都是使用Redis作爲緩存 - 我知道我應該在這種情況下使用緩存 - 但由於我無法將Redis與我的Web服務放在同一個盒子上那麼會不會網絡延遲殺死性能?

任何建議非常感謝!

鄧肯

回答

0

我會嘗試分別測試和調整您的圖層。使用不涉及數據庫的虛擬數據測試Web服務,但數據大小和併發連接類似。與數據庫相同,使用合成數據(或真實的,如果可以的話)再次調整您的查詢與實際負載和表大小,以匹配您的預期用戶羣的大小。將這兩者一起測試,仔細測量,以便您可以驗證您的更改如何影響整體性能以及瓶頸所在。最後,添加緩存層,再次測試效果。如果數據庫是瓶頸,緩存可能會有所幫助,但如果Web服務層是問題,則緩存可能不會。如果您只使用Redis作爲緩存,則可能更喜歡簡單的memcached。

0

你也可以檢查是否使用.NET 4,我認爲你應該使用System.Runtime.Caching庫。

一旦使用1臺服務器,即可爲您提供極大的靈活性。如果你需要一個網絡農場,或者當事情比同步,失效,到期等更棘手時,意味着一些分佈式緩存(我認爲是內存),支持本地存儲(通常是本地存儲)和分佈式存儲。你也可以用AppFabric來使用這個命名空間來獲得想要的緩存。

希望這對你有用。