我们正在开发一个项目,该项目涉及大约 10 个不同的 WCF 服务,每个服务都有多个端点。其中一项服务将一些大数据表缓存在内存中。
我们发现我们需要从另一个服务访问该数据。我希望能够在所有服务之间共享这些表,而不是保留 2 个缓存副本。
我做了一些研究并找到了一些关于使用附加到服务主机的 IExtension 来存储共享数据的文章。
如果所有服务都在同一个网站下运行,那行得通吗?这是正确的方法吗?还是我应该寻找其他地方?
最佳答案
如果多个服务需要您缓存的数据,从面向服务架构的角度来看,这听起来像是它不属于您调用它的任何一个服务。
如果被缓存的数据与任何一个服务都没有真正相关,而是两个服务都需要的东西,那么它可能属于它自己的独立服务。您是否考虑过将您的缓存封装在第三方服务中,并执行服务到服务调用来检索您需要的数据?好处包括...
- 它解决了您最初的困境,避免了多次从数据库读取整个缓存的需要;
- 它将缓存封装在一个地方,以便于以后维护/更改。
- 它允许您通过放置另一个服务接口(interface)来将缓存的实现从其他服务中抽象出来。
总而言之,我认为这是最好的方法。唯一的缺点是进行服务到服务调用的额外开销,但这肯定优于必须从数据库读取整个缓存。
或者,如果缓存中的数据与调用缓存的两个服务都密切相关,即两个服务都添加/更改缓存中的数据等,那么也许这两个现有服务应该合并为一项服务。
如果我说的有道理,那么我所借鉴的 SOA 原则是 Service Autonomy .
关于WCF:跨多个服务共享缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757588/