Этот вопрос можно ответить во многих словах, но я буду стараться варить до первой необходимости:
Неоднородность является одной из основных проблем интеграции пытается решить. Это неотъемлемая характеристика большинства распределенных систем, и это относится к тому, что чаще всего, когда вам необходимо интегрировать несколько систем, они будут:
- Быть на разных платформах в разных сетях;
- Различия в их возможностях с точки зрения интеграции;
- Имеют несоответствия в данных, даже данные, относящиеся к одному и тому же домену бизнеса;
- Использование и поддержка различных (иногда даже забытых или неподдерживаемых) технологий и стандартов;
- Имеют разные владельцы (контролируются различными отделами, компаниями).
Все вышеперечисленное добавляет все больше и больше сложности.
Асинхронная связь решает некоторые проблемы связи без гражданства, но вводит целый ряд сложностей, которые могут легко привести к проблемам, когда не реализация неверна. Это связано с тем, что у вас есть только гарантия того, что сообщение будет успешно получено на другом конце, но не имеет никакой гарантии, когда операция будет обработана, если когда-либо. Таким образом, гораздо сложнее выполнять гармонизацию взаимозависимых асинхронных задач, в отличие от синхронных задач.
Частичные сбои - Когда у вас есть процессы, которые связаны с несколькими взаимозависимыми операциями записи, вам необходимо обеспечить транзакции ACID. Необходимость делать это в сценариях, когда задействованы несколько систем, еще сложнее, потому что вы не можете достичь общего контекста транзакций так же легко в гетерогенной распределенной среде, как если бы вы были в пределах одной системы. Часто вам нужно реализовать противоположные операции в службах (или, что еще хуже, реализовать two-phase commit), чтобы иметь возможность компенсировать все предыдущие записи в процессе, если что-то пойдет не так с одной из задач.
Надеюсь, что это немного очистит!