2013-09-30 117 views
0

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

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

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

回答

0

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

我的建议是:

  • 阅读并完全理解ACID(摘要转述):
    • 原子性 - 如果交易的任何部分失败,整个交易失败,数据库是而不是留在未知或损坏的状态。这是巨大重要。依靠现有的软件在实际的数据库中实现这一点。并且不要发明需要重新创建自己的交易系统的数据结构。使您的交易尽可能小以减少故障。
    • 一致性 - 数据库永远不会处于无效状态。所有提交给它的操作都将使其进入新的有效状态。
    • 隔离 - 您在数据库上执行的操作可以同时执行,并导致相同的状态,就像一个接一个地执行一样。 在锁定交易中安全执行。
    • 耐用性 - 一旦交易被提交,它仍然如此。

两个现有的系统和您提出的想法听起来像他们可能违反ACID

  • 有状态的请求,系统可能违反(或使得它很难不违反)隔离。
  • 如果不采取防弹措施,队列可能会违反耐用性。

更不用说,您也有可扩展性问题。结合可扩展性ACID并且你有重量级的情况需要严肃的专业知识。

如果你能帮助它,我会强烈建议依托现有的系统,特别是如果这是销售点。