Запутался в ESB как решении для интеграции точка-точка
Все еще очень плохо знаком с изучением архитектуры приложений и с трудом запоминаю некоторые идеи в книге о микросервисах. В своих чтениях я натолкнулся на более старую идею ESB (Enterprise Service Bus) и ее роль в координации сообщений между новыми сервисами и унаследованными приложениями. ESB рекламируются как решение проблем, связанных с интеграцией точка-точка. Микросервисы, по-видимому, являются подходом, принятым новыми компаниями в качестве фактического стандарта для создания гибкого, масштабируемого и отказоустойчивого приложения. Но разве микросервисы не используют двухточечную интеграцию? Каждый узел в приложении, построенном из микросервисов, напрямую связывается с другими узлами, верно? Я чувствую, что соединяю некоторые точки, которые не должны быть связаны. Любая помощь высоко ценится, спасибо заранее.
4 ответа
Микросервисы не обязательно опираются исключительно на двухточечную интеграцию.
Проблемы, связанные с прямой связью, часто решаются в микросервисной архитектуре с использованием посредника сообщений. Если связь может быть выполнена асинхронно - "включи и забудь" - приложение, отправляющее сообщение, не станет неработоспособным, если получатель отключится. И сообщения все еще будут там, когда получающий сервис возвращается.
Если микросервисы интегрируются через REST, вызывающая сторона должна знать, как реагировать, если другая служба не отвечает. Так как это становится проблематичным, когда вы сохраняете данные в разных системах (т. Е. В распределенной транзакции), я предпочитаю использовать REST только для API поиска данных. И делать все сохранения в результате сообщений.
Важно отметить, что ESB гораздо больше, чем просто обмен сообщениями. Подробнее об этом в ответе здесь.
ESB - это решения, которые были внедрены во многих компаниях для обеспечения функциональной совместимости и отслеживаемости приложений. Однако они представляют собой сложные решения, которые не позволяют масштабировать по горизонтали, обычно ESB принимают конфигурацию из двух узлов: активный-активный или пассивно-активный.
С другой стороны, службы в ESB обычно развертываются не отдельно, а в пакетах развертывания вместе с другими службами, что усложняет управление доставкой и тестирование.
Микросервисы предназначены для индивидуальной разработки и развертывания, чтобы в облачной инфраструктуре можно было легко масштабировать по горизонтали, динамически увеличивая количество экземпляров.
В настоящее время взаимодействие между приложениями отошло на второй план, так как сегодняшнее общение с помощью веб-сервисов является практически обычным явлением, хотя в некоторых очень старых инфраструктурах все еще может потребоваться некоторое промежуточное программное обеспечение, которое решает возможности соединения.
Оба подхода не являются необходимыми эксклюзивными. Микросервисы могут взаимодействовать с использованием промежуточного программного обеспечения для обмена сообщениями (kafka, AMQP, актеры Akka, JMS...) вместо прямых каналов http. Это зависит от ваших ограничений (в основном, согласованности) и политик развертывания.
У каждого выбора есть свои сильные и слабые стороны, я лично советую не ограничивать себя одним подходом, а использовать оба и выбирать в соответствии с каждой ситуацией.
См. Микросервисы: REST против обмена сообщениями и https://capgemini.github.io/architecture/is-rest-best-microservices/
Микросервисы не являются заменой ESB.
Микросервисы- это концепция для разработки серверных систем, в том числе API. Противоположностью микросервисного подхода является монолит. Если API потребляется непосредственно потребляющими системами, мы подходим к интеграции точка-точка (спагетти). Если потребитель использует промежуточное программное обеспечение, часто называемое шлюзом API, мы можем иметь централизованную видимость, безопасность и трассировку (как в ESB). API-шлюзы проще, чем ESB, и поэтому лучше подходят для горизонтального масштабирования. Шлюзы API не должны включать дополнительную бизнес-логику / логику интеграции.
ESB выполняет те же функции, что и API-шлюз (действует как прокси-сервер), но, кроме того, позволяет включать бизнес-логику, объединять несколько служб в одну и другие расширенные функции. ESB часто превращались в обременительные решения с большими накладными расходами и небольшой добавленной стоимостью, и именно поэтому они стали ненавидимыми.
Заключение
ESB может использоваться вместе с архитектурой микросервисов, есть много компаний, которые поддерживают ESB простым, и он почти равен так называемым API-шлюзам.
Мое мнение
Шлюзы API вводят новые функции и становятся все более сложными, приближаясь к ESB.