最小竞争资源 (Minimal Competing Resources)

当前查看的版本是由机器翻译自简体中文,并进行人工校对的结果。若文档中存在任何翻译不当的地方,欢迎点击此处提交您的翻译建议。

最小竞争资源在使用 Claptrap 框架时重要的一个概念。理解此概念有助于开发者更好的设计 Claptrap 的 State ,避免错误的设计。

什么是最小竞争资源

类比多线程编程中 “资源竞争” 的概念,这里提出在业务系统中的 “最小竞争资源” 概念。借助这个概念可以很简单的找到如何应用 Newbe.Claptrap 的设计点。

例如在电商抢购的例子中,每个商品都是一个 “最小竞争资源”。注意,这里不是说,所有商品是一个 “最小竞争资源”。因为,如果对一万个商品进行编号,那么抢购一号商品和二号商品,本身其实不存在竞争关系。因此,每个商品都是一个最小竞争资源。

这里还有一些可用的例子:

  • 在一个只允许单端登录的业务系统中,一个用户的登录票据就是最小竞争资源
  • 在一个配置系统中,每个配置项都是最小竞争资源
  • 在一个股票交易市场中,每个买单或者卖单都是最小竞争资源

在有的场景中,最小竞争资源也被称为“最小并发单元(Minimal Concurrent Unit)”

Claptrap 的 State 至少应该大于等于 “最小竞争资源” 的范围

结合电商抢购的例子,如果所有商品设计在同一个 Claptrap 的 State 中(大于最小竞争资源)。那么,不同用户购买商品就会相互影响,因为,Claptrap 基于的 Actor 模式是排队处理请求的。也就是说,假设每个商品需要处理 10ms,那么最快也需要 10000 * 10 ms 来处理所有的购买请求。但如果每个商品都进行编号,每个商品设计为单独的 Claptrap 的 State。那么由于他们是互不相关的。卖掉所有商品,理论上就只需要 10ms。

故而容易得出,如果 Claptrap 的 State 大于最小竞争资源的范围,系统不会有正确性的问题,但可能有一些性能损失。 另外,如果 Claptrap 的 State 小于最小竞争资源的范围,Claptrap 间的关系将会变得难以处理,存在风险。因为这就相当于将一个最小竞争资源拆分为多个部分,而最小竞争资源通常来说需要在一个事务中一并处理,这也就又回到了分布式中非常常见的分布式事务的问题,难以处理。