簡體   English   中英

WCF:跨多個服務共享緩存數據

[英]WCF: sharing cached data across multiple services

我們正在開發一個涉及大約10種不同WCF服務的項目,每種服務都有幾個端點。 其中一項服務會在內存中保留一些大數據表。

我們發現我們需要從其他服務訪問該數據。 我希望能夠在所有服務中共享這些表,而不是保留2個緩存副本。

我做了一些研究,發現了一些關於使用附加到servicehosts的IExtension來存儲共享數據的文章。

如果所有服務都在同一個網站下運行,那會有效嗎? 這是正確的方法嗎? 或者我應該在別處尋找?

如果您正在緩存的數據是多個服務所需要的,那么聽起來似乎是 - 從面向服務的體系結構的角度來看 - 它不屬於您調用它的任何一個服務。

如果緩存的數據與這兩種服務並不真正相關,而是兩種服務都需要,那么它可能屬於它自己的單獨服務。 您是否考慮將緩存封裝在第三個服務中,並執行服務到服務調用以檢索所需的數據? 好處包括......

  1. 它解決了您的原始困境,無需多次從數據庫中讀取整個緩存;
  2. 它將緩存封裝在一個位置,以便以后輕松維護/更改。
  3. 它允許您通過放置另一個服務接口來抽象緩存的實現遠離其他服務。

總而言之,我認為這是最好的方法。 唯一的缺點是進行服務到服務調用的額外開銷,但這肯定優於從數據庫中讀取整個緩存。

或者,如果緩存中的數據與調用緩存的服務的BOTH非常密切相關,即兩個服務都添加/更改緩存中的數據等,則可能將兩個現有服務組合到一個服務中。

如果我說的是有道理,那么我所使用的SOA原則就是Service Autonomy

如果您的所有服務都是同一個應用程序的一部分,那么您似乎沒有任何理由不能通過共享對象引用直接共享緩存。 最簡單的方法是通過靜態字段。

如果你選擇這種方法,要特別注意的一點是線程安全。 如果通過兩個WCF會話同時訪問緩存,則必須確保兩個會話不會通過同時更改緩存而相互干擾。 如果緩存是只讀的,則減少了您的需要,但您仍可能需要同步緩存的初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM