Архитектура микрослужб

25.11.2019|Блог
Архитектура микрослужб

Несколько лет назад на рынке банковской автоматизации произошло заметное изменение: в списках требований банков к разрабатываемым приложениям для дистанционного банковского обслуживания всё чаще стала появляться строка «система должна быть реализована с соблюдением принципов микросервисной архитектуры».

Мы решили подробнее рассказать вам об этой теме, тем более мы сами непосредственно работаем с этим.

Само название предполагает, что архитектура микрослужб является подходом к созданию серверного приложения в качестве набора малых служб. Это означает, что архитектура микрослужб главным образом ориентирована на серверную часть несмотря на то, что этот подход также используется для внешнего интерфейса, где каждая служба выполняется в своем процессе и взаимодействует с остальными службами по таким протоколам, как HTTP/HTTPS, WebSockets или AMQP.

Каждая микрослужба реализует специфические возможности в предметной области и свою бизнес-логику в рамках определенного ограниченного контекста, поэтому должна разрабатываться автономно и развертываться независимо.

Кроме этого, у каждой микрослужбы должны быть соответствующие собственные модель данных и логика предметной области (владение и децентрализованное управление данными). Для каждой микрослужбы могут применяться разные технологии хранилищ (SQL, NoSQL) и разные языки программирования.

Какого размера должна быть микрослужба? При разработке микрослужбы размер не является важным фактором. Главное – создание слабо связанных служб, что позволяет добавиться автономности при разработке, развертывании и масштабировании каждой службы.

Конечно, при определении и проектировании микрослужб следует стремиться к тому, чтобы они были как можно меньше, если только они не имеют слишком много прямых зависимостей от других микрослужб. Внутренняя связанность микрослужбы и ее независимость от других служб важнее ее размера.

Почему следует использовать архитектуру микрослужб?
Если говорить кратко, то это гибкость в долгосрочной перспективе. Микрослужбы обеспечивают превосходные возможности сопровождения в крупных комплексных системах с высокой масштабируемостью за счет создания приложений, основанных на множестве независимо развертываемых служб с автономными жизненными циклами.

Дополнительное преимущество в том, что микрослужбы можно масштабировать независимо. Вместо монолитного приложения, которое нужно масштабировать как единое целое, вы масштабируете отдельные микрослужбы. Тем самым можно масштабировать только функциональную область, требующую больше вычислительных или сетевых ресурсов, не затрагивая другие области приложения, которые на самом деле не нуждаются в масштабировании. Таким образом можно сократить расходы, так как требуется меньше оборудования.

В подходе с использованием микрослужб функциональные возможности изолируются в небольших службах, и каждую службу можно масштабировать независимо от других. Подход на основе микрослужб нацелен на гибкость изменений и ускорение последовательных улучшений каждой микрослужбы, так как вы получаете возможность изменять небольшие части крупных, комплексных и масштабируемых приложений.

Архитектура приложений на основе микрослужб позволяет применять принципы непрерывной интеграции и поставки. Она ускоряет доставку новых функций в приложение. Кроме того, разделение приложений на небольшие компоненты позволяет запускать и тестировать микрослужбы изолированно, а также развивать их независимо друг от друга, в то же время соблюдая строгие контракты их взаимодействия. Пока контракты или интерфейсы не нарушаются, можно изменять внутреннюю реализацию любой микрослужбы и добавлять новую функциональность, не мешая работе других микрослужб.

Ниже перечислены важные аспекты успешного ввода системы на основе микрослужб в эксплуатацию:

  • мониторинг и проверки работоспособности служб и инфраструктуры;
  • масштабируемая инфраструктура служб (то есть облако и оркестраторы);
  • проектирование и реализация безопасности на разных уровнях: проверка подлинности, авторизация, управление секретами, безопасный обмен данными и т.д.;
  • быстрая поставка приложения, причем разными микрослужбами обычно занимаются разные команды;
  • методики и инфраструктура DevOps и непрерывной интеграции, и поставки.