[英]WCF: sharing cached data across multiple services
我們正在開發一個涉及大約10種不同WCF服務的項目,每種服務都有幾個端點。 其中一項服務會在內存中保留一些大數據表。
我們發現我們需要從其他服務訪問該數據。 我希望能夠在所有服務中共享這些表,而不是保留2個緩存副本。
我做了一些研究,發現了一些關於使用附加到servicehosts的IExtension來存儲共享數據的文章。
如果所有服務都在同一個網站下運行,那會有效嗎? 這是正確的方法嗎? 或者我應該在別處尋找?
如果您正在緩存的數據是多個服務所需要的,那么聽起來似乎是 - 從面向服務的體系結構的角度來看 - 它不屬於您調用它的任何一個服務。
如果緩存的數據與這兩種服務並不真正相關,而是兩種服務都需要,那么它可能屬於它自己的單獨服務。 您是否考慮將緩存封裝在第三個服務中,並執行服務到服務調用以檢索所需的數據? 好處包括......
總而言之,我認為這是最好的方法。 唯一的缺點是進行服務到服務調用的額外開銷,但這肯定優於從數據庫中讀取整個緩存。
或者,如果緩存中的數據與調用緩存的服務的BOTH非常密切相關,即兩個服務都添加/更改緩存中的數據等,則可能將兩個現有服務組合到一個服務中。
如果我說的是有道理,那么我所使用的SOA原則就是Service Autonomy 。
如果您的所有服務都是同一個應用程序的一部分,那么您似乎沒有任何理由不能通過共享對象引用直接共享緩存。 最簡單的方法是通過靜態字段。
如果你選擇這種方法,要特別注意的一點是線程安全。 如果通過兩個WCF會話同時訪問緩存,則必須確保兩個會話不會通過同時更改緩存而相互干擾。 如果緩存是只讀的,則減少了您的需要,但您仍可能需要同步緩存的初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.