Wymiana w jedną stronę jest prosta. Gdy oba systemy mogą zmieniać te same dane, pojawia się pytanie, który ma rację.
Źródło prawdy dla każdego pola
Nie dla całego rekordu, lecz dla pojedynczych danych. Stan magazynowy zwykle prowadzi system magazynowy, opis produktu może pochodzić ze sklepu, a status zamówienia z platformy sprzedażowej. Rozstrzygnięcie musi być jednoznaczne.
Najprostszą formą tego rozstrzygnięcia jest tabela: pole, system nadrzędny, kierunek wymiany, częstotliwość. Powstaje w godzinę, a oszczędza tygodni sporów przy pierwszej rozbieżności. Warto ją prowadzić razem z mapowaniem pól i słowników, bo to ten sam spis widziany z innej strony.
Pętla aktualizacji
System A zmienia dane, powiadamia B, B zapisuje i powiadamia A, które znów zapisuje. Bez zabezpieczenia dwa systemy potrafią wysyłać sobie zmiany bez końca.
Zabezpieczenie: porównanie wartości przed zapisem i pominięcie aktualizacji, gdy dane są identyczne.
Drugim sposobem jest oznaczanie źródła zmiany. Jeśli zapis powstał z synchronizacji, nie wywołuje wysyłki zwrotnej. Samo porównanie wartości bywa zawodne, gdy w grę wchodzą zaokrąglenia albo formatowanie tekstu — dwie wartości równe merytorycznie potrafią różnić się zapisem i uruchamiać pętlę mimo wszystko.
Zmiana w obu miejscach naraz
Cena zmieniona jednocześnie w sklepie i w magazynie wymaga reguły rozstrzygającej. Ostatnia zmiana wygrywa jest rozwiązaniem prostym i bywa nieprawidłowym — czasem to system nadrzędny powinien mieć pierwszeństwo niezależnie od czasu.
Reguła oparta na czasie ma jeszcze jedną słabość: zegary obu systemów nie muszą być zgodne, a partner może podawać czas w innej strefie. Przy różnicy kilku minut kolejność zdarzeń przestaje odpowiadać rzeczywistości.
Opóźnienie jest normalne
Dane nigdy nie są zgodne w obie strony w tej samej sekundzie. Zawsze istnieje okno, w którym jeden system wie już o zmianie, a drugi jeszcze nie. Warto to okno znać i uwzględnić w regułach pracy — na przykład nie podejmować decyzji o zamówieniu towaru na podstawie stanu odczytanego tuż po dużej sprzedaży. Próba usunięcia opóźnienia przez skracanie odstępów zwykle kończy się przekroczeniem limitów partnera, a nie zgodnością danych.
Ograniczyć zakres
Im mniej pól synchronizowanych dwustronnie, tym mniej problemów. Warto sprawdzić, czy naprawdę potrzebna jest wymiana w obie strony, czy wystarczy jedna.
W typowym układzie sklepu i systemu magazynowego dwukierunkowe bywa właściwie tylko jedno pole — status zamówienia. Reszta ma naturalny kierunek i wymuszanie dwustronności jest wtedy dokładaniem sobie pracy.
Kiedy to się nie opłaca
Synchronizacja dwukierunkowa kosztuje więcej na etapie budowy i znacznie więcej w utrzymaniu. Jeśli dane w drugim systemie zmienia się raz na kwartał, ręczna poprawka w dwóch miejscach jest tańsza od mechanizmu, który trzeba pilnować. Sens pojawia się tam, gdzie zmiany są częste i wykonują je różne osoby w różnych narzędziach.
Zapis zmian
Historia mówiąca, który system i kiedy zmienił daną wartość, jest jedynym sposobem wyjaśnienia rozbieżności po fakcie.
Bez niej każde pytanie „kto zmienił tę cenę" kończy się zgadywaniem. Historia jest też punktem wyjścia przy rozstrzyganiu rozbieżności — pozwala odróżnić błąd integracji od zmiany wprowadzonej ręcznie z pominięciem drugiego systemu.