... мне не очень понятна несогласованность сервисов на этапе завершения транзакции ... ... основные сервисы должны быть согласованы в момент завершения транзакции ...
Для меня это звучит, как, мы подтвердили клиенту что отправили деньги, а в это время все еще идет проверка возможно ли это.
Если 1 транзакция будет 5 раз прогонят чтото через polling publisher - это будет гарантировано медленно. Но зачем? У вас же есть (или будет) Kafka/Rabbit/Nats?
По поводу OUTBOX в Transaction log tailing, согласен, это лучшее решение. Но остаются те же вопросы, не смотрели, как данные забирают из журнала?
По gtid? Как воркер определит откуда продожать чтение после рестарта?
И самое интересное, как это читать многопоточно?
Если OUTBOX неизменен, то как вы определяете, какая строка обработана, а какая еще нет, какие записи можно чистить? Тоже по gtid?
Почему отложенная согласованность?
Вернее, где вы ее применяете?
Транзакция выполняется последовательно, синхронно...
... никакой отложенности здесь не должно быть. Если речь про что-то вроде DWH, тогда понятно
Будет ли медленным Polling publisher? Смотря, что для вас медленно...
Насчет удаления из outbox, то мне кажется в варианте, когда вы забираете данные из журнала, нет смысла создавать outbox. Забирайте прямо из основной талицы, ориентирусь на какой-либо параметр: id, время обновления.
неправильный подход к реализации, у которого будут глюки в проблемных местах. О каких именно проблемных местах речь?
А какая разница? Всегда можно передать метаинформацию о том как сериализованное представление данных преобразовать в нативные типы подсистемы. Это наверное единственный способ, я просто ищу какие-то общепринятые решения. Так, например, RPC работает под капотом.
Все библиотека руби знает. Просто в руби реализовали сериализацию и десериализацию с использованием кавычек. Разработчики джава-библиотеки решили преобразовывать число 1.0 в Decimal, а разработчики руби во Float.