0

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

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

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

4

1 回答 1

1

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

我的建议:

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

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

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

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

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

于 2013-09-30T07:28:59.830 回答