2010-03-02 52 views
1

缓存是一个横切关注点,是否应该变成一个Web服务?缓存服务是否应该存在?

这个问题可能有点奇怪,但我觉得在SOA中,服务应该基于业务解决方案进行识别,并且我们不应该公开仅负责缓存对象的服务。这似乎不是一个商业功能。如果有的话,它似乎是一个性能改进。

我们是否应该引进和实施一项服务来缓存数据?难道这不妨碍您的域模型本身?我的意思是每当你需要一个对象被缓存在另一个服务中时,你将不得不将这个类移动到cacheService。

这是什么意见?

回答

1

如果该服务充当前一个非缓存服务的Facade那么是的,它可能是“它自己的服务”。尤其对于只读或只读数据,这是有道理的。但请记住像线程一样的缓存是一个背道而驰的领域。 “做”很容易,但要“正确”做起来非常困难,而且做得不正确,一旦找到原因,就会造成难以调试和难以解决的荒谬问题。像这样想一想,像Akamai这样的内容分发提供商在提供缓存作为服务时构建了他们的整个business

+0

绝对同意。作为一个门面,完全有保证。但我的关注主要是关于缓存域对象的服务。属于其他服务的域对象,但放入缓存服务中,所有缓存都由该服务完成。因此,不是一个门面,这个服务最终被其他服务所使用,以便查找他们的域对象。 – Aneesh 2010-03-02 17:10:53

+0

作为前瞻性的服务,应该避免使用“一切皆大”的反模式。作为后端黑盒缓存服务的“一切皆大桶”可能是另一回事。 – 2010-03-02 17:13:06

2

我不认为这是一个好主意,通常缓存的概念是使数据可用并使其更接近使用点。将其作为一种服务或其他服务模型推向真正的软件,传统意义上限制了这种能力。

缓存需要快速,本地和容易获得。

+0

专用缓存服务仍可能比使用数据库更快。 – 2010-03-02 16:59:55

+0

更接近其使用的缓存可能会更快 – Aneesh 2010-03-02 17:06:28

3

我认为提高用户的性能是一项业务功能。我认为你的问题的确是你是否应该将缓存分解为单个服务,还是将它内部地分配给其他服务。答案一如既往,这取决于。但它肯定可以有一个专门的缓存服务。例如,Google为memcache这样做。

编辑:再次,有不止一种方法皮肤猫。你不一定必须缓存最终的Person对象。另一种可能性是使用缓存服务来呈现数据,比如PDF帐户声明。例如,Hi5(社交网站),uses memcache来缓存完整准备的用户配置文件。

+1

如何在这种情况下管理我的域模型。例如:假设假设我有一个Person类,它永远不会改变,我有一个不断变化的账户类。我想缓存我的人员类,它现在可以从其缓存的其他服务中缓存。如何将账户的变更持续到数据库(从OO和ORM的角度来讲)。 如果我没有缓存Person类(或者使用ORM自己的cachine机制),我会通过ORM查找Person并更新帐户的值。持久性将是透明的。 – Aneesh 2010-03-02 17:04:49

+0

透明的直写式高速缓存是您可能想要的,而且这些高速缓存的复杂程度可以想象得到。如果您使用的是Java,请看看Terracotta。 – 2010-03-02 17:17:54

+0

是的!同意。谢谢。 – Aneesh 2010-03-02 17:39:06

0

我同意你的看法,即Web服务应该公开业务功能。缓存Web服务的想法似乎是一个坏主意。

从使用的角度思考这个问题,这是什么意思呢?这似乎意味着客户端首先会访问缓存Web服务来获取对象。如果它不在那里,他们需要从真正的Web服务中获取它,然后将对象“推回”到缓存中?这是问很多客户。任何缓存工作流程都应该对客户端透明。

但是,如果您谈论的是支持一些相关Web服务的缓存,这些缓存对客户端“隐藏”(和透明),仅用于使Web服务的整个系列更具响应性,那么可以一个好主意。

+0

为了回答第一个问题,没有消费者会打到真正的服务。真正的服务必须打另一个服务来查找自己的域对象,因为它被该服务缓存。现在,这意味着我的域对象已经分成两个服务。 我不确定我是否明白“支持与缓存相关的网络服务”意味着什么。如果你的意思是支持一个真正的Web服务与提供缓存的另一个Web服务,是的,我的意思是。但是这个webservice不会隐藏其他客户端。但有可能他们选择不直接击中它。 – Aneesh 2010-03-02 17:16:10

+0

两跳?疯。它会死亡。 – duffymo 2010-03-02 17:24:55

+0

如果客户打算使用该服务访问真正的Web服务,我并不认为将缓存公开给外部任何人作为Web服务的好处。对于选择直接访问缓存ws的客户,他们仍然需要转到真正的ws缓存未命中。为什么不通过首先公开缓存来让所有对客户端透明?您仍然可以享受缓存的好处,而不会增加客户端的复杂性。 – Vinnie 2010-03-02 17:47:20

相关问题