A co dla Ciebie znaczy rollback?
Widzę dwa podstawowe pojęcia:
- point of no return (PONR) - punkt po osiągnięciu którego nie zrobimy rollbacku, bo się nie da/jest to zbyt przerażające/kosztowne/inny powód,
- rollback - przywracamy stan na jakiś wybrany punkt w czasie
Po PONR nie mamy zbyt dużego wyboru -> jesteśmy na produkcji i produkcja właśnie płonie -> wymyślamy kreatywne rozwiązywanie problemu. Im bardziej płonie, tym bardziej brawurowe pomysły są akceptowane, zaś najgłupsze sugestie (o ile dają nadzieję) znajdują posłuch.
Decyzja o rollbacku oznacza tyle, że akceptujemy szkodę i staramy się minimalizować straty biznesu/wpływ na klientów.
Technicznie korzystamy z mechanizmów standardowych:
- snapshot danych - silniki bazodanowe potrafią takie rollbacki (hasło: point in time recovery)
- systemy plików też potrafią (np. ZFS snapshots)
Mamy też ogólny problem -> "co zrobić z deltą, która się nazbierała od momentu wdrożenia nowego rozwiązania do momentu podjęcia decyzji o rollbacku?".
O ile mi wiadomo, to nie ma ogólnego rozwiązania takiego problemu, bo to czym jest "delta", zależy od konkretnego sytuacji (zmiany w jednym systemie mogą wyzwalać zmiany w innych systemach - tak działa integracja). Co zrobić? To jest decyzja biznesowa.
Technicznie:
- wypada takie delty zbierać, bądź być w stanie je zidentyfikować i później (pół)automatycznie przetworzyć (np. usunąć dane z systemu dla tych obiektów i odtworzyć akcje biznesowe używając "starego API"/wykonać dla takich danych inne, zdefiniowane przez biznes, akcje),
- można zaprojektować system w taki sposób, by wspierał wersjonowanie workfow (procesów biznesowych) (tj. stare dane są przetwarzane wg starej logiki, a nowe wg nowej) - w konfiguracji trzymamy informacje o tym, która wersja workflow jest obecnie tą obowiązującą. W ramach rollbacku przepinamy wersję na poprzednią, zaś "delta" encji dotkniętych rollbackiem jest analizowana i obsługiwana w ramch procesu utrzymaniowego (hasło: business process versioning),
- można zaprojektować akcje kompensacyjne.
Pewnie są produkty, dla których można mieć inne strategie. W projekcie, w którym jestem obecnie, mamy przewidziany cały proces biznesowy do przygotowania się na konieczność wykonania "rollbacku" i osobny proces do wykonania samego rollbacku. Jest tam sporo czynności manualnych, sporo wspomaganych skryptami. Koszt zbudowania i przetestowania automatu byłby zbyt duży, a ryzyko błędnego działania nie byłoby znacząco mniejsze.