Построение приложения с помощью архитектуры микросервисов. Плюсы и минусы применения на практике на примере реального проекта.
Презентация подготовлена по материалам выступления Виталия Квятковского на витебской конференции “Developer's Software Conference” (31.10.2015). Запись выступления: https://events.epam.com/events/dsc2015/talks/102.
Построение приложения с помощью архитектуры микросервисов. Плюсы и минусы применения на практике на примере реального проекта.
Презентация подготовлена по материалам выступления Виталия Квятковского на витебской конференции “Developer's Software Conference” (31.10.2015). Запись выступления: https://events.epam.com/events/dsc2015/talks/102.
«Взломать за 60 секунд», Артем Кулаков, RedmadrobotMail.ru Group
Мобильные приложения плотно вошли в нашу жизнь, и с каждым годом их популярность растет. Приложениям доступно все больше информации о нас, и стоимость этой информации тоже повышается. Как и зачем взламывают приложения? Почему защита чаще всего оказывается неэффективной? Об этом пойдет речь в докладе.
QA Fest 2014. Александра Волкова. Тестирование Enterprise Service Bus что где...QAFest
Многим из нас приходилось тестировать как отдельные программные продукты, так и интеграции между различными системами. А что, если сам тестируемый продукт и есть решение для интеграции? Что мы тестируем в этом случае – продукт или интеграцию?
В своём докладе я расскажу о подходах к функциональному тестированию таких решений на примере Enterprise Service Bus(ESB) - модели интеграции между системами на принципах сервис ориентированной архитектуры (SOA).
Я поделюсь практическими рекомендациями, расскажу об основных тестовых сценариях , а также об инструментах тестирования и автоматизации.
Доклад будет интересен тестировщикам, автоматизаторам, тест лидам, как работающим с подобными системами, так и тем, кто только начинает свой путь в SOA тестировании или хочет расширить свой кругозор.
Данный доклад собрал много положительных отзывов на конференции SQADays-14 во Львове.
Иван Бибилов "Нагрузки в спорте высоких достижений"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Иван Бибилов "Нагрузки в спорте высоких достижений"
О докладе:
Рассказ о спортивных проектах Яндекса, осуществленных за последние два года.
Спортивные проекты имеют четкие сроки запуска, повышенные требования к нагрузкам и отказоустойчивости. Из-за этого выбор архитектуры является очень важным вопросом. В докладе будет подробно рассказано о внутреннем устройстве спортивных проектов, кэшировании и высоких нагрузках.
Хранение данных на новом уровне – линейка систем хранения VNXeКРОК
Вебинар «Решения ЕМС начального уровня: как упаковать Ваш ЦОД в одну стойку»
Подробнее о мероприятии http://www.croc.ru/action/detail/9603/
Презентация Яковенко Алексея, ведущего инженера компании КРОК
Презентация к докладу - работа с потоками в .net
* Основе работы с потоками
* Средства блокирующей синхронизации
* Неблокирующая синхронизация
* Асинхронная модель программирования
* Пул потоков
* Класс BackGroundWorker
* Задачи
* Модель поставщик-потребитель
* Блокировка с двойной проверкой
John Sullivan from DMC presented on WinCC Open Architecture (OA) and how it can be applied to oil and gas projects. Key features of WinCC OA include its distributed architecture, scalability, ability to auto-generate configurations for new sites, remote monitoring capabilities including GIS viewing, integrated data collection, custom configuration tools, support for multi-user development, and ultralight web and mobile clients. Case studies were presented on how WinCC OA has been used for distributed generator management and how its features translate well to applications in upstream, midstream, and downstream oil and gas.
«Взломать за 60 секунд», Артем Кулаков, RedmadrobotMail.ru Group
Мобильные приложения плотно вошли в нашу жизнь, и с каждым годом их популярность растет. Приложениям доступно все больше информации о нас, и стоимость этой информации тоже повышается. Как и зачем взламывают приложения? Почему защита чаще всего оказывается неэффективной? Об этом пойдет речь в докладе.
QA Fest 2014. Александра Волкова. Тестирование Enterprise Service Bus что где...QAFest
Многим из нас приходилось тестировать как отдельные программные продукты, так и интеграции между различными системами. А что, если сам тестируемый продукт и есть решение для интеграции? Что мы тестируем в этом случае – продукт или интеграцию?
В своём докладе я расскажу о подходах к функциональному тестированию таких решений на примере Enterprise Service Bus(ESB) - модели интеграции между системами на принципах сервис ориентированной архитектуры (SOA).
Я поделюсь практическими рекомендациями, расскажу об основных тестовых сценариях , а также об инструментах тестирования и автоматизации.
Доклад будет интересен тестировщикам, автоматизаторам, тест лидам, как работающим с подобными системами, так и тем, кто только начинает свой путь в SOA тестировании или хочет расширить свой кругозор.
Данный доклад собрал много положительных отзывов на конференции SQADays-14 во Львове.
Иван Бибилов "Нагрузки в спорте высоких достижений"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Иван Бибилов "Нагрузки в спорте высоких достижений"
О докладе:
Рассказ о спортивных проектах Яндекса, осуществленных за последние два года.
Спортивные проекты имеют четкие сроки запуска, повышенные требования к нагрузкам и отказоустойчивости. Из-за этого выбор архитектуры является очень важным вопросом. В докладе будет подробно рассказано о внутреннем устройстве спортивных проектов, кэшировании и высоких нагрузках.
Хранение данных на новом уровне – линейка систем хранения VNXeКРОК
Вебинар «Решения ЕМС начального уровня: как упаковать Ваш ЦОД в одну стойку»
Подробнее о мероприятии http://www.croc.ru/action/detail/9603/
Презентация Яковенко Алексея, ведущего инженера компании КРОК
Презентация к докладу - работа с потоками в .net
* Основе работы с потоками
* Средства блокирующей синхронизации
* Неблокирующая синхронизация
* Асинхронная модель программирования
* Пул потоков
* Класс BackGroundWorker
* Задачи
* Модель поставщик-потребитель
* Блокировка с двойной проверкой
John Sullivan from DMC presented on WinCC Open Architecture (OA) and how it can be applied to oil and gas projects. Key features of WinCC OA include its distributed architecture, scalability, ability to auto-generate configurations for new sites, remote monitoring capabilities including GIS viewing, integrated data collection, custom configuration tools, support for multi-user development, and ultralight web and mobile clients. Case studies were presented on how WinCC OA has been used for distributed generator management and how its features translate well to applications in upstream, midstream, and downstream oil and gas.
Introduction to SOAP/WSDL Web Services and RESTful Web Servicesecosio GmbH
In this talk, held as part of the Web Engineering lecture series 2015 at Vienna University of Technology, we give an overview of the current state of the art in the domain of Web Services.
In the first part we dwell on the main principles of Service Oriented Architectures (SOA), followed by an introduction of the three core standards SOAP, WSDL, as well as UDDI. Furthermore, we briefly cover the Java API for XML Web Services (JAX-WS).
In the second part we focus on principles of RESTful Web Services and the Java API for RESTful Web Services. The lecture is accompanied by practical examples, which are also available on GitHub.
This document discusses problems that can arise with service-oriented architectures (SOA) if not implemented properly, as well as presenting an alternative approach. Some key issues mentioned include systems becoming more fragile, higher development and maintenance costs, and services not being reused as intended. The alternative approach presented focuses on autonomy, loose coupling, encapsulation, and using business events to help achieve these goals. It is argued that this can drive business agility while avoiding consistency issues.
События, шины и интеграция данных в непростом мире микросервисов / Валентин Г...Ontico
Микросервисы получают все большую популярность в компаниях по всему миру. Какие организационные и технические проблемы они помогают решать? С какого момента монолиты перестают справляться с растущей нагрузкой на ваш сервис? Почему Zalando -- самый большой онлайн-ретейлер в Европе -- выбрал микросервисы в качестве главной архитектуры для новых проектов?
Помогая в решении организационных проблем быстрорастущей компании, микросервисы ставят новые технические задачи, одной из которых, помимо увеличения сложности системы в целом, является проблема безопасного обмена сообщениями между микросервисами, удобной интеграции данных и возможности их корреляции и анализа.
Слушатели узнают, как в Zalando решают эту проблему с использованием централизованной шины передачи данных -- Nakadi. Получат представление о тех проблемах, которые их могут поджидать при выборе похожей архитектуры на примере проблем выбора формата передачи данных, системы версионирования формата сообщений и сложностей эксплуатации высоконагруженных кластеров Kafka в облачной системе AWS.
Building and deploying microservices with event sourcing, CQRS and Docker (Be...Chris Richardson
This document discusses building and deploying microservices using event sourcing, CQRS and Docker. It covers an overview of event sourcing and how it solves data consistency issues in microservice architectures. CQRS is used to implement materialized views for queries. Spring Boot is recommended for building microservices and Docker is used to package the microservices. A continuous integration pipeline is used to build, test, publish Docker images and deploy updates.
Microservice Architecture with CQRS and Event SourcingBen Wilcock
This document provides an overview of microservice architecture using CQRS (Command Query Responsibility Segregation) and Event Sourcing patterns. It defines CQRS as separating the write and read functions of an application. Event Sourcing records all state changes as a series of events rather than just the current state. The benefits include scalability, simplicity, flexibility and a business focus. Popular companies using this architecture include those needing cost-effective scaling like microservices. The author provides resources and advocates for CQRS and Event Sourcing to solve common architectural challenges.
Developing event-driven microservices with event sourcing and CQRS (svcc, sv...Chris Richardson
Modern, cloud-native applications typically use a microservices architecture in conjunction with NoSQL and/or sharded relational databases. However, in order to successfully use this approach you need to solve some distributed data management problems including how to maintain consistency between multiple databases without using 2PC.
In this talk you will learn more about these issues and how to solve them by using an event-driven architecture. We will describe how event sourcing and Command Query Responsibility Segregation (CQRS) are a great way to realize an event-driven architecture. You will learn about a simple yet powerful approach for building, modern, scalable applications.
Андрей Матвеев "Основные принципы микросервисов и их реализации"MskDotNet Community
Посмотрим, что скрывается за модным buzzword’ом, взвесим обещанные плюсы и найдем минусы, о которых умалчивают. Разберемся зачем они нужны, и пора ли отказываться от монолита. И попробуем понять, как же их делать.
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Ontico
Начав разработку нового продукта через микросервисы, мы неожиданно для себя обнаружили, что микросервисы — это не просто "вместо одного большого приложения теперь пишем много маленьких". При разработке большой системы она сама собой через какое-то время становится набором отдельных сервисов, которые должны взаимодействовать между собой, поэтому стабильная работа сервисов и их взаимодействие не стало чем-то новым. Неожиданностью стало то, что система стала значительно более динамической, она стала постоянно изменяться отдельными небольшими частями, сервисы стали часто перезапускаться, а количество запущенных нод сервисов стало расти по экспоненте.
Очень быстро стал актуальным вопрос конфигурирования — если раньше, выкатив новую версию монолита с единым конфигом, мы применяли правки на всю систему сразу, то с микросервисами все сложнее — пара сотен работающих нод и всем нужно применить изменения. Требования к деплою также поменялись — он стал частью процесса разработки, а тестирование стало частью деплоя. Количество необходимого ПО для функционирования системы также стало некоторым сюрпризом.
В докладе я расскажу о том, как в итоге это работает у нас, как мы решили такие вопросы как:
- конфигурирование сервисов;
- интеграция между собой;
- тестирование;
- версионирование;
- масштабирование.
Расскажу, какие тулзы мы в итоге используем, а от каких отказались.
Чему мы научились разрабатывая микросервисы?Vadim Madison
Доклад с конференции Backend Conf 2016
Начав разработку нового продукта через микросервисы, мы неожиданно для себя обнаружили, что микросервисы — это не просто "вместо одного большого приложения теперь пишем много маленьких". При разработке большой системы она сама собой через какое-то время становится набором отдельных сервисов, которые должны взаимодействовать между собой, поэтому стабильная работа сервисов и их взаимодействие не стало чем-то новым. Неожиданностью стало то, что система стала значительно более динамической, она стала постоянно изменяться отдельными небольшими частями, сервисы стали часто перезапускаться, а количество запущенных нод сервисов стало расти по экспоненте.
Очень быстро стал актуальным вопрос конфигурирования — если раньше, выкатив новую версию монолита с единым конфигом, мы применяли правки на всю систему сразу, то с микросервисами все сложнее — пара сотен работающих нод и всем нужно применить изменения. Требования к деплою также поменялись — он стал частью процесса разработки, а тестирование стало частью деплоя. Количество необходимого ПО для функционирования системы также стало некоторым сюрпризом.
В докладе я расскажу о том, как в итоге это работает у нас, как мы решили такие вопросы как:
- конфигурирование сервисов;
- интеграция между собой;
- тестирование;
- версионирование;
- масштабирование.
Расскажу, какие тулзы мы в итоге используем, а от каких отказались.
Everyone knows that the whole is much bigger than the sum of individual parts. This applies fully to the AiCare service.
The main purpose of the service is to free the user from configuring and controlling MEP systems, minimize design stage activities, and to ensure the facility operates as smoothly as possible. The AiCare service performs intellectual monitoring of such systems as "Smart House", "Smart Building", "Smart City" by automatically performing activities related to the collection, analysis, classification of information about the facility, including user skills and preferences, and control law adaptations in order to ensure maximum efficiency and create a comfortable environment.
The service is based on methods for the automatic merger of different components under a single control platform:
• techniques for the coordinated automated control of the facility's heterogeneous MEP systems;
• systems for the accumulation and actualization of information on facility user preferences;
• systems for the accumulation and actualization of information on physical properties of facility elements;
• methods for the statistical analysis of incoming information and synthesis of platform control laws;
• mechanisms for the individual adaptation of control laws as information is compiled on the facility and its users.
This approach results in a synergy — a brand-new level of coordinated control efficiency. Control laws created by the service are coordinated with the actual composition of the facility's systems, their behavior and the users' actions over time, and they automatically adapt as changes occur.
The service, provided in the external control mode, complements existing possibilities of the facility and ensures a whole new level of productivity and efficiency of its systems. An innovative approach to big data processing and the use of "cloud computing" for resource-intensive mathematical control models provides a user-friendly, secure, highly productive and resource efficient environment that requires minimum management by the facility's user.
4. Страница 4
www.sms-a.ru
Монолитные приложения и их проблемы
Проблемы монолитных приложений:
Растущая сложность системы при внесении новых
изменений
Растущая сложность поддержки
Разобраться трудно — если система переходила из
поколения в поколение, логика забывалась, люди
уходили и приходили, а комментариев и тестов нет
Мало тестов
Дорого вносить изменения
Устаревание технологий
5. Страница 5
www.sms-a.ru
Развитие монолитной системы, куб
масштабирования
X-axis scaling - consists of running multiple copies of an
application behind a load balancer. If there are N copies
then each copy handles 1/N of the load. This is a simple,
commonly used approach of scaling an application.
Y-axis scaling - Unlike X-axis and Z-axis, which consist of
running multiple, identical copies of the application, Y-axis
axis scaling splits the application into multiple, different
services. Each service is responsible for one or more
closely related functions.
Z-axis scaling - When using Z-axis scaling each server
runs an identical copy of the code. In this respect, it’s
similar to X-axis scaling. The big difference is that each
server is responsible for only a subset of the data. Some
component of the system is responsible for routing each
request to the appropriate server.
Шардинг
Зеркалирование
Сервисы
7. Страница 7
www.sms-a.ru
Теорема CAP
CA — consistency + availability
Данные во всех узлах согласованы и доступны. Доступность означает, есть гарантируемый отклик
за предсказуемое время. Это время большим. При этом мы жертвуем разделением на секции — не
можем развернуть 300 таких хостов и распределить всех пользователей по этим хостам. Так
работать система не будет, потому что не будет согласованности транзакций. Яркий пример CA —
ACID-транзакции, присутствующие в классических монолитах.
CP – consistency + partitioning
Данные во всех узлах согласованы и распределены на независимые секции. При этом мы готовы
пожертвовать временем, которое требуется на согласование всех транзакций — отклик будет очень
долгим. Это значит, что, если два пользователя последовательно будут запрашивать одни и те же
данные, неизвестно, как долго будут согласовываться данные для второго пользователя.
Такое поведение характерно для монолитов, которым пришлось масштабироваться, несмотря на
древность.
AP — availability + partitioning
Система доступна с предсказуемым временем отклика и распределена. При этом придется
отказаться от целостности результата — наши данные больше не консистентны в каждый момент
времени, и среди них появляются устаревшие (от микросекунд до дней).
Яркий пример —DNS-системы, которые синхронизируются с задержкой до дней.
8. Страница 8
www.sms-a.ru
Требования ACID – требования к транзакционной
системе
Atomicity — Атомарность
Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут
либо выполнены все её подоперации, либо не выполнено ни одной.
Consistency — Согласованность
Транзакция, достигающая своего нормального завершения и, тем самым, фиксирующая свои
результаты, сохраняет согласованность базы данных. Другими словами, каждая успешная транзакция
по определению фиксирует только допустимые результаты. Это условие является необходимым для
поддержки четвёртого свойства.
Isolation — Изолированность
Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её
результат. Изолированность — требование дорогое, поэтому в реальных БД существуют режимы, не
полностью изолирующие транзакцию.
Durability — Долговечность
Независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в
оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться
сохранёнными после возвращения системы в работу.
9. Страница 9
www.sms-a.ru
Микросервисы
Микросервисы – это архитектурный шаблон в котором сервисы:
• маленькие – разрабатывается одной командой, содержит
ограниченный набор возможностей
• сфокусированные – решает одну бизнес задачу и решает
ее хорошо, может быть использован отдельно от
остальных сервисов
• слабосвязанные – изменение в одном сервисе не требует
изменения в других
• высокосогласованные – сервис содержит все необходимые
методы для решения задачи
13. Страница 13
www.sms-a.ru
Характеристики микросервисов
• Автоматизация развертывания и мониторинга – непрерывная интеграция и поставка,
мониторинг большого числа сервисов
• Умные сервисы и простые коммуникации – не надо перегружать ESB логикой
• Design for Failure – при разработке исходим из гипотезы, что в сервису могут не ответить, может
не получится отправить или принять сообщение и т.д.
15. Страница 15
www.sms-a.ru
Взаимодействие между микросервисами
Варианты взаимодействия
• Service Discovery (RPC Style) — сервисы знают друг о друге и общаются напрямую.
• Message Bus (Event-driven) — взаимодейтвие происходит при помощи ESB сервисы
подписываются на события и генерируют собственные события.
• Hybrid — смешанный вариант, когда для одних случаев применяется RPC, а для других —
message bus.
16. Страница 16
www.sms-a.ru
Взаимодействие между микросервисами
Service Discovery
• Сервис знает адреса других сервисов и
напрямую адресует им сообщения
• Минусы подхода состоят в том, что если
есть несколько экземпляров вызываемого
сервиса, то надо их знать и уметь выбирать
нужный. Так же адреса могут изменяться со
временем.
17. Страница 17
www.sms-a.ru
Взаимодействие между микросервисами
Server-Side Service Discovery
• Сервис не знает адреса других сервисов, запросы отправляются балансировщику
• Балансировщик узнает адрес конечного сервиса у сервиса Service Registry
• Service Registry – реализует справочник
18. Страница 18
www.sms-a.ru
Взаимодействие между микросервисами
Messge Bus
Плюсы
• Message Bus определяет, какая у вас будет
архитектура.
• Позволяет легко добавлять сервисы, сервисы не
знают про другие.
• Message Bus изначально построен так, чтобы все
системы масштабировались.
• Есть готовые решения, которые писали не вы, —
такой код не надо поддерживать, и он хорошо
работает.
Минусы
• Надо описывать message-контракты, которые со
временем могут изменяться и требовать
версионирования.
• Асинхронные взаимодействия.
• Еще один элемент в инфраструктуре.
24. Страница 24
www.sms-a.ru
Использование шины сообщений
Плюсы
• Масштабирование из коробки – сервисы могут быть размещены на разных серверах в нужном
количестве, отказ одного из сервисов не приведет к отказу системы
• Гарантированная доставка сообщений – при использовании долговечных очередей подписчик
получит сообщение, даже если будут проблемы с сетью
• Надежность – сторонне ПО, которое используется в
высоконагруженных приложениях по всему миру
• Сообщество – все возможные вопросы заданы
Минусы
• Дополнительный компонент в системе
• Обучение разработчиков
26. Страница 26
www.sms-a.ru
Паттерн CQRS
Command-query separation (CQS) или command-query responsibility
segregation (CQRS)
Методы объекта нужно разделить на:
1. Queries - возвращают результат, не изменяя состояние объекта.
2. Commands - изменяют состояние, не возвращая значение.
37. Страница 37
www.sms-a.ru
Паттерн CQRS – модификация репозитория
Маленькие объекты
• Меньше зависимостей в каждом классе
• SRP
• Проще заменить
• Проще тестировать
• Делают дизайн кода однотипным
• При расширении функциональности системы сложность увеличивается
(почти) линейно
38. Страница 38
www.sms-a.ru
Микросервисы – за и против
Преимущества
Модульное деление
Разбиение задач по сервисам даст
возможность компоновки приложения.
Высокая доступность
Сервисы могут работать не все — при этом
все остальное будет работать.
Разнообразие технологий
Возможность использовать правильный
инструмент.
Масштабирование и независимое
развертывание
Из-за слабой связанности микросервисы
проще разворачивать, и меньше
вероятность отказа системы.
Недостатки
Сложность разработки и отладки
Вместо одного монолита надо поднимать несколько
приложений – микросервисов.
Конечная согласованность
Из за распределенных потоков данных может
возникнуть сложность отслеживания транзакций.
Сложность операционной поддержки
Нужны грамотные DevOps-инженеры, непрерывное
развертывание и автоматический мониторинг.
39. Страница 39
www.sms-a.ru
Логические микросервисы
• Микросервисный подход можно применить при проектировании приложения
• Достаточно изолировать модули друг от друга, включая доменную модель и хранилище данных
• Если говорить в терминах .NET, то возможно разворачивать сервисы в рамках одного домена
приложения или в рамках одного IIS сервера.
• Взаимодействие между изолированными модулями, может происходить через оперативную
память, либо через REST запросы к локальному серверу приложений.
43. Страница 43
www.sms-a.ru
Спасибо за внимание!
Презентацию подготовил Трешников П.В.
Начальник отдела прикладного программного обеспечения
ГК СМС-Автоматизация
email: pavel.treshnikov@sms-a.ru