Сложности разработки Большинство микросервисов сегодня взаимодействуют посредством RESTful HTTP (__заявление актуально на 2015 год__). Взаимодействие посредством сообщение выглядит многообещающим, но имеет слабую распространенность (__а это актуально и сегодня, почти 8 лет спустя__). API становится своего рода контрактом, увеличивающим связанность (coupling) и нарушение которого ведет к невозможности взаимодействия сервисов друг с другом. Таким образом можно выделить две сложности со взаимодействием сервисов: – Одновременная поддержка нескольких версий API в процессе разработки – Обратная совместимость и/или поддержка старых версий API в проде В статье рекомендуется посмотреть на OpenAPI (__весьма ценная рекомендация __🙂__ __). Другая сложность – согласованность данных вследствие того, что база данных может быть частью реализации микросервиса. Один из вариантов решения – eventual consistency, несмотря на неприменимость в некоторых доменах и сложность реализации. Так же распределенная природа данных в микросервисах усложняет распределенные транзакции и запрос данных при необходимости собрать данные из нескольких сервисов. __На 2022 год у обеих сложностей есть подходящие решения__. __Мы проектируем решение таким образом, чтобы в нем не было необходимости в распределенной транзакции. Обычно такая транзакция – это следствие нарушения cohesion на уровне всей системы, то есть когда неделимое целое с точки зрения целостности данных разделили на несколько «независимых» частей. Для решения сложности запроса данных можно использовать паттерны Backend For Frontend и/или CQRS.__ В статье авторы так же указывают на сложность тестирования из-за распределения бизнес-логики по независимо, эволюционно развивающимся отдельным сервисам. Необходимым становится использование фреймворков для тестирования надежности[1] и автоматизированного, повторно используемого приемочного тестирования[2]. [1] V. Heorhiadi, S. Rajagopalan, H. Jamjoom, M.K. Reiter, V. Sekar, Gremlin: systematic resilience testing of microservices, in __2016 IEEE 36th International Conference on Distributed__ [2] M. Rahman, J. Gao, A reusable automated acceptance testing architecture for microservicesin behavior-driven development, in __2015 IEEE Symposium on Service-Oriented System__ #msaevolutionwspub6 #msaevolutionwspub #перевод