【问题标题】:Queue requests for each client为每个客户端排队请求
【发布时间】:2013-09-30 15:28:59
【问题描述】:

我的后端系统为大约 10K POS 设备提供服务,每个设备将以顺序方式请求服务,但是我想知道后端如何保证以顺序方式处理给定客户端的请求。

例如,设备发出“销售”请求,并且超时(可能 DB 被阻止)以获得响应,因此它发出“取消”以取消该销售请求。在这种情况下,后端可能在收到“取消”请求时仍在处理“销售”交易,这可能会导致一些意想不到的结果。

我的想法是为每个设备(客户端)设置一个持久队列,但是设置 10K 队列可以吗?我不确定,请帮忙。

【问题讨论】:

    标签: java message-queue


    【解决方案1】:

    这是一个极其复杂的计算机科学领域,其中很多问题已经解决了很多次。我不会尝试重新发明轮子。

    我的建议:

    • 阅读并彻底理解ACID(摘要转述):
      • 原子性 - 如果事务的任何部分失败,则整个事务都会失败,并且数据库不会处于未知或损坏的状态。这非常很重要。依靠现有软件在实际数据库中实现这一点。并且不要发明需要您重新发明自己的交易系统的数据结构。使您的交易尽可能小,以减少失败。
      • 一致性 - 数据库永远不会处于无效状态。提交给它的所有操作都将把它带到一个新的有效状态。
      • 隔离 - 您对数据库执行的操作可以同时执行,并导致与一个接一个执行的状态相同。 OR 在锁定事务中安全执行。
      • 持久性 - 事务一旦提交,将保持不变。

    您现有的系统和您提出的想法听起来都可能违反 ACID

    • 有状态的请求系统可能会违反(或很难不违反)隔离。
    • 如果不采取防弹的方式,队列可能会违反持久性。

    更不用说,您还存在可扩展性问题。结合 scalabilityACID,您将面临需要专业知识的重量级情况。

    如果您能提供帮助,我会强烈建议依赖现有系统,尤其是如果这是用于销​​售点。

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2012-07-28
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多