Witajcie,
pracujemy nad nową architekturą mikroserwisową do przetwarzania dokumentów i zastanawiam się, jak najlepiej rozwiązać komunikację oraz orkiestrację serwisów.
Mamy kilka serwisów domenowych, a cały proces przebiega sekwencyjnie: A → B → C → D. Każdy z serwisów może działać jako long-running proces.
Kluczowe wymagania to:
- pełna skalowalność i odporność każdego serwisu,
- transakcyjna baza danych przechowująca stan procesu,
- brak konieczności silnej spójności — wystarczy spójność ostateczna.
Chciałbym zastosować tutaj event-driven, aby w pełni uniezależnić serwisy i wzorzec Process Manager jako orkiestrator, który nasłuchuje na eventy z wszystkich serwisów, waliduje diagram stanów i wysyła odpowiednie komendy do kolejnego serwisu w procesie.
Nie każdy event musi przechodzić przez Process Managera — część z nich może być przetwarzana bezpośrednio przez inny serwis, jeśli nie ma potrzeby zmiany stanu albo chodzi o wewnętrzny flow czy sub-stan(model hybrydowy, orkiestracja z częsścią choreografi).
Jak to widzicie, ma sens ?
I jak rozwiązać ten message bus ? Kafka cluster ? Jeden topic dla wszystkich eventów wchodzących do Proces managera i topic per serwis dla komend wychodzących do konkretnych serwisów ?