Ein Laden mit vier Kassen hat vier Computer, die alle glauben, sie seien der Laden. Die meisten Kassensysteme lösen das mit einem Server im Hinterzimmer, und das funktioniert genau so lange, wie die Steckerleiste im Hinterzimmer es tut.
Was jedem Terminal gehört#
Das Modell ist eine Zeile lang: Ein Terminal besitzt die Verkäufe, die es kassiert, und sonst nichts. Alles andere ist entweder nur lesende Replikation oder eine Ressource mit genau einem Schreiber. Diese Einschränkung ist es, die die Merge-Logik klein genug hält, um beim Ladenschluss noch darüber nachdenken zu können.
| Daten | Besitzer | Bei Konflikt |
|---|---|---|
| Verkäufe, Retouren | das Terminal, das sie gemacht hat | kein Konflikt möglich: nur anhängend |
| Produktkatalog | das Backoffice | letzter Schreibvorgang gewinnt, nach Version |
| Preise | das Backoffice | letzter Schreibvorgang gewinnt, nach Version |
| Lagerbestand | ein gewähltes Terminal | wird nicht zusammengeführt, siehe unten |
| Offene Rechnung / Tisch | von einem Terminal beansprucht | der Anspruch ist eine Lease, 30 s |
Lagerbestand ist kein CRDT#
Man kann Lagerbestand durchaus als Zähler modellieren, der konvergiert. Er konvergiert dann auf eine Zahl, die zu keinem Zeitpunkt gestimmt hat, und der Laden hat das letzte Stück zweimal verkauft. Also hat der Bestand einen einzigen Schreiber: Ein Terminal wird gewählt, die anderen fragen es, und wenn es verschwindet, übernimmt das nächste, sobald eine kurze Lease abgelaufen ist.
- 01Wahl
Die Bestands-Lease hält das Terminal mit der niedrigsten Kennung, das in den letzten zehn Sekunden gesehen wurde. Kein Konsensalgorithmus: Die Menge sind vier Geräte in einem LAN, und eine falsche Wahl kostet eine Lease-Periode.
- 02Abbuchen beim Verkauf
Das verkaufende Terminal bittet den Halter, abzubuchen. Erreicht es ihn nicht innerhalb von 400 ms, verkauft es trotzdem und markiert die Position als ungeprüft. Ein Laden, der nicht mehr verkauft, weil ein Peer langsam ist, ist schlimmer als ein Bestand, der abgeglichen werden muss.
- 03Abgleich beim Abschluss
Ungeprüfte Positionen werden beim Ladenschluss gegen den massgeblichen Bestand nachgespielt. In acht Monaten Pilotbetrieb waren das im Schnitt weniger als zwei Positionen pro Laden und Tag.
Wie das an der Kasse aussieht#
Nichts davon ist an einem normalen Tag zu sehen, und genau das ist der Punkt. Die einzige Oberfläche, die das Modell bekommt, ist ein kleiner Statuspunkt: grün, wenn das Terminal jeden Peer kürzlich gesehen hat, gelb, wenn es ungeprüfte Positionen verkauft, dazu die Anzahl dessen, was noch abzugleichen ist.