2013-09-30 150 views
0

我的後端系統爲大約10K POS設備提供服務,每個設備都會以順序方式請求服務,但是我想知道後端如何保證以連續方式處理給定客戶端的請求。每個客戶端的隊列請求

例如,設備發出'賣'請求,並且超時(可能DB被阻止)以獲得響應,所以它發出'取消'以取消該銷售請求。在這種情況下,後臺可能在收到「取消」請求時仍處理「銷售」交易,這可能會導致一些意外結果。

我的想法是爲每個設備(客戶端)設置一個持久隊列,但可以設置10K隊列嗎?我不確定,請幫忙。

回答

0

這是一個非常複雜的計算機科學領域,很多這些問題已經解決了很多次。我不會試圖重新發明輪子。

我的建議是:

  • 閱讀並完全理解ACID(摘要轉述):
    • 原子性 - 如果交易的任何部分失敗,整個交易失敗,數據庫是而不是留在未知或損壞的狀態。這是巨大重要。依靠現有的軟件在實際的數據庫中實現這一點。並且不要發明需要重新創建自己的交易系統的數據結構。使您的交易儘可能小以減少故障。
    • 一致性 - 數據庫永遠不會處於無效狀態。所有提交給它的操作都將使其進入新的有效狀態。
    • 隔離 - 您在數據庫上執行的操作可以同時執行,並導致相同的狀態,就像一個接一個地執行一樣。 在鎖定交易中安全執行。
    • 耐用性 - 一旦交易被提交,它仍然如此。

兩個現有的系統和您提出的想法聽起來像他們可能違反ACID

  • 有狀態的請求,系統可能違反(或使得它很難不違反)隔離。
  • 如果不採取防彈措施,隊列可能會違反耐用性。

更不用說,您也有可擴展性問題。結合可擴展性ACID並且你有重量級的情況需要嚴肅的專業知識。

如果你能幫助它,我會強烈建議依託現有的系統,特別是如果這是銷售點。