【问题标题】:Understanding Data Outside Of Service : SOA理解服务之外的数据:SOA
【发布时间】:2012-02-28 14:00:47
【问题描述】:

注意:服务外的数据是指服务返回并被客户端消费的消息。

我有一个名为 LastBuyer Service 的服务。当我将 bookID 输入服务时,这将返回一本书的最后一个买家姓名。当我为相同的图书 ID 调用服务时,它会返回不同的结果(如果新买家购买了一本书)。所以我无法在客户端缓存服务的结果(对于特定的 BookID)。

在阅读文章“内部数据与外部数据”时,它显示“可以缓存”——“由于消息的 ID 返回相同的数据,因此可以缓存消息”。

参考:http://msdn.microsoft.com/en-us/library/ms954587.aspx

  1. 我的理解中缺少什么?

  2. 上例中的消息是不可变的吗?

  3. 上面例子中的版本依赖和版本无关标识符是什么?

  4. 这里的消息版本控制是如何完成的?

  5. 哪本 WCF 书籍通过示例清楚地解释了 SOA 概念和模式?

阅读

  1. 服务设计原则:服务模式和反模式

http://msdn.microsoft.com/en-us/library/ms954638.aspx

【问题讨论】:

  • 我想你可以通过在书的 id 之外给我一个时间来解决这个问题(让我在这个时间之前成为最后一个买家)并且在未来永远不要给时间 - 所以你的服务器调用类似于一个 real 函数,您可以缓存(但缓存将毫无意义) - 我认为缓存仅在您查询不会再更改的数据时才有用...
  • @Carsten 谢谢。因此,该声明的意思是我们需要通过接收此类输入(在您的评论中提到)使消息不可变。我的理解正确吗?另外,你能解释一下问题的其他部分吗?

标签: c# .net wcf soa service-design


【解决方案1】:
  1. 您错过了这样一个事实,即(正如 @Carsten-Konig 暗示的那样)任何给定快照时间的数据都是不可变的。除非您回去填写旧订单,否则截至昨天下午 5:00 为止最后一个购买这本书的人总是一样的。从那时起有人购买了这本书(导致该数据的新版本)这一事实与昨天的结果无关。这可能是缓存有用的数据,也可能不是,但在任何给定的时间点,它都是不可变的。

  2. 如果消息的部分键是时间戳,则消息是不可变的。

  3. 独立于版本的标识符是图书的 ID。版本相关的标识符是快照时间戳。

  4. 按快照时间戳(同样,它可能对缓存有用也可能没用)

至于这方面的好书,恐怕我无法给出建议。但我怀疑 amazon 或 bn.com 上的评论是一个不错的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 2011-04-30
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多