Slide 1

Slide 1 text

Современная архитектура

Slide 2

Slide 2 text

Микросервисы, чистый PaaS и конкурс мисс Россия Александр Бындю CEO, Byndyusoft

Slide 3

Slide 3 text

Цели #msdevcon Микросервисы Инструменты Чистый PaaS Как управлять микросервисной архитектурой На примере конкурса Мисс Россия рассмотрим возможности Azure Зачем бизнесу микросервисы? Типовые проблемы монолита

Slide 4

Slide 4 text

#msdevcon Зачем бизнесу микросервисы Почему начинается переход к микросервисной архитектуре?

Slide 5

Slide 5 text

Цели бизнеса Выбор лучшего решения для бизнес-задачи без компромиссов Нам нужна CRM Покупаем SAP CRM Но мы хотим SalesForce  Надо брать SAP CRM, потому что SAP у нас уже есть, мы знаем, как с ним работать, интеграция проще, обновление проще и в целом SAP CRM неплохая CRM-ка Бизнес: IT: Бизнес: IT: Нам нужна CRM Какая CRM лучше всего решит ваши задачи? SalesForce! Ок, мы интегрируем SalesForce и текущей инфраструктурой на SAP Бизнес: IT: Бизнес: IT:

Slide 6

Slide 6 text

Цели бизнеса Поставка бизнес-ценности как можно быстрее Переходим с SAP CRM на BPM Online Интеграция нового решения займет полгода Почему так долго?  <Объясняют какая паутина взаимосвязей объединяет SAP CRM c остальными приложениями в компании> Бизнес: IT: Бизнес: IT: Переходим с SAP CRM на BPM Online За неделю переключим точки интеграции Что-то еще требуется для запуска? Еще надо перелить данные и дописать бизнес-функции, но это можно делать параллельно с запуском новой CRM Бизнес: IT: Бизнес: IT:

Slide 7

Slide 7 text

Цели бизнеса Дешево масштабировать сервисы, причем только определенные и только когда это нужно Сервис Тарификации к Черной пятнице должен выдерживать нагрузку в 2 раза больше обычной Надо купить в 4 раза больше железа и это даст ускорение на 30% Почему так дорого и совсем не в 2 раза?  Ускорение в 2 раза будет стоить как вся наша компания (прим. — при текущей архитектуре) Бизнес: IT: Бизнес: IT: Сервис Тарификации к Черной пятнице должен выдерживать нагрузку в 2 раза больше обычной Ок, сейчас нажмем пару кнопок и увеличим кол-во экземпляров сервиса, чтобы масштабировать нагрузку. Докупать что-то нужно? Ресурсы в облаке, но только на время нагрузки Бизнес: IT: Бизнес: IT:

Slide 8

Slide 8 text

АйТи берёт бизнес в заложники «Монолитное» решение становится вездесущим и незаменимым для компании. АйТи начинает диктовать бизнесу свои условия в выборе инструментов, сроков и подходов к решению. АйТи начальник

Slide 9

Slide 9 text

«Монолиты» берут компанию в заложники UI Business Logic Database Бизнес-функцию доработали, но она зависит от других, поэтому ждем «большой заливки»  Можно эту бизнес-функцию заменить другим решением, а остальное не трогать? Нет? Скидки Рассылки

Slide 10

Slide 10 text

Бизнесу плохо живется с «монолитами». Чувствуется это только в условиях высокой конкуренции.

Slide 11

Slide 11 text

Microservices, Microservices, Microservices!

Slide 12

Slide 12 text

Microservice = Business capability

Slide 13

Slide 13 text

Монолитом легко управлять, а как справиться с сотней микросервисов? IT-команда

Slide 14

Slide 14 text

Developing Microservices with Aggregates, Chris Richardson

Slide 15

Slide 15 text

«Монолит» простит вас за отсутствие автоматизации и управляемости. Сотня микросервисов за это жёстко накажет.

Slide 16

Slide 16 text

#msdevcon Инструменты для управления микросервисной архитектурой API Gateway, Event bus, Service Discovery, iPaaS, Containers + Orchestration

Slide 17

Slide 17 text

API Gateway http://microservices.io/patterns/apigateway.html Единое место вызова API Умеет: 1. Управление трафиком 2. Авторизация 3. Мониторинг 4. Горизонтальное масштабирование 5. Управления версиями 6. Кэш запросов 7. Трансформация ответов 1

Slide 18

Slide 18 text

Легко заменяем сервисы! Постепенно убираем монолит. Масштабируем нагрузку

Slide 19

Slide 19 text

Event bus Единое место для публикации событий Асинхронное взаимодействие Низкая связность сервисов Горизонтально масштабируется 2

Slide 20

Slide 20 text

Легко заменяем сервисы! Постепенно убираем монолит. Масштабируем нагрузку

Slide 21

Slide 21 text

Service Discovery Подскажет, где запущен «живой» экземпляр требуемого сервиса Умеет: 1. Регистрировать сервисы в своей базе 2. Проверять «жив» ли каждый экземпляр сервиса 3. Балансирование нагрузки между экземплярами одного сервиса http://microservices.io/patterns/server-side-discovery.html 3

Slide 22

Slide 22 text

Легко масштабировать: увеличивать и уменьшать кол-во экземпляров микросервиса http://rabbitstack.github.io/cloud/microservices/from-monolithic-to-cloud-native-architectures/

Slide 23

Slide 23 text

Containers, Orchestration, IaC Изолированная среда для разворачивания микросервиса Умеет: 1. 100% автоматизация 2. Инфраструктура, описанная кодом: сравнение, расшаривание, повторяемость при развертывании 3. Создание нужного окружения за несколько минут 4. Управление сотнями контейнеров на множестве серверов 5. Поддержка в Azure и AWS 6. Serverless

Slide 24

Slide 24 text

Полностью автоматизированные релизы и масштабирование

Slide 25

Slide 25 text

Задачи архитектора:  Добиться низкой связанности микросервисов  Правильно распределить ответственность между микросервисами  Добиться полной автоматизации

Slide 26

Slide 26 text

IT-команда

Slide 27

Slide 27 text

Заработаем 1. Достижение бизнес-целей: ◦ Гибкость в выборе решений ◦ Ускорение поставок новых функций ◦ Гибкое масштабирование сервисов 2. Меньше людей, которые делают ручную работу 3. Меньше железа, которое не приносит деньги

Slide 28

Slide 28 text

Потратим 1. Вложение денег в переход IT-инфраструктура, создание новых сервисов, рефакторинг стартых сервисов 2. Переобучение сотрудников 3. Изменение орг. структуры 4. Дорогие специалисты с новыми знаниями 5. Риск ошибиться в выборе микросервисов

Slide 29

Slide 29 text

Выбор лучшего решения для бизнес-задачи без компромиссов Microservices, Microservices, Microservices! Поставка бизнес- ценности как можно быстрее Дешево масштабировать сервисы

Slide 30

Slide 30 text

#msdevcon Мисс Россия В 40 раз быстрее за те же деньги и покупка мощностей только на время конкурса

Slide 31

Slide 31 text

Конкурс Мисс Россия • Проходит раз в год • Отбор по всей стране • Победительница едет на Мисс Мира

Slide 32

Slide 32 text

97% трафика 750К голосов

Slide 33

Slide 33 text

Нагрузка 1. Форма голосования и защита от накруток 2. Контент: текст, фото, видео

Slide 34

Slide 34 text

Архитектура «монолита»

Slide 35

Slide 35 text

Проблемы прошлой версии сайта 1. Медленно открывался во время конкурса из-за перегрузки 2. Выдавал 500-ошибку на главной и голосовании при перегрузки любой части системы 3. Только вертикальное масштабирование

Slide 36

Slide 36 text

Используем магию «облаков»! Перенесли виртуалку на Azure… стало хуже

Slide 37

Slide 37 text

Как новой архитектурой достигнуть бизнес-целей 1. Разделим приложение на (микро)ответственности 2. Каждая часть будет идеально исполнять свою роль 3. Каждая часть будет заботиться о своем масштабировании 4. Тотальная автоматизация

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

Графики нагрузочных тестов • Нагружали через сеть с пропускной способностью 1Гбит/с. • После ~5450 RPS видим первые проблемы с ответами сервера. • Время ответа не превышало 1000 мс.

Slide 40

Slide 40 text

.NET Core и Kestrel Kestrel под нагрузкой отвечал кодом 502.3, приложение падало и не оживало до перезапуска. Проблема в версии Kestrel (версия 1.1.0): • https://github.com/aspnet/IISIntegration/issues/323 • https://github.com/aspnet/IISIntegration/issues/311 Проблема ушла после выхода пакета Microsoft.AspNetCore.Server.Kestrel v1.1.1

Slide 41

Slide 41 text

CDN 1. Картинки кэшируются на 7 суток, HTML обновляется 1 раз в час. 2. JavaScrpit и CSS новых версий автоматом попадают в CDN, каждая версия кэшируется отдельно. 3. Включено сжатие. 4. Можно вручную сбросить кэш. 5. Поддерживает только домены 3-го уровня missrussia.ru -> www.missrussia.ru

Slide 42

Slide 42 text

CDN Akamai vs Verizone 1. Akamai усиливает партнерские отношения с Российскик интернет провайдерами. ТТК договорился с Akamai Technologies, Inc. на размещение на новом узле оператора в Москве кеш-серверов CDN-провайдера. (источник: http://www.comnews.ru/node/80287#ixzz4eUkmQKPe) 2. Быстрое развертывание нового endpoint-а: • ~1 минута на Akamai • >90 минут на Verizone

Slide 43

Slide 43 text

WebApp 1. Web и API развернуты в отдельных WebApp 2. Во время конкурса на тарифе S3, после конкурса на тарифе S1 3. При изменении нагрузки: • Scale Up: повышать/понижать мощность сменой тарифа • Scale Out: увеличивать кол-во инстансов

Slide 44

Slide 44 text

SQL Database Что хорошего: 1. Сервис автоматически выполняет резервное копирование каждые 5 минут. 2. Легко масштабировать за пару кликов как вверх так и вниз. 3. Управление через веб-интерфейс. 4. Легко настраиваются различные алерты. До 50 rps с тарифом Standard 0

Slide 45

Slide 45 text

Service Bus vs Queue Storage Требования к очереди: • Обмен сообщениями небольшого размера с коротким временем обработки; • Отсутствие необходимости в транзакциях и поддержки очередности обработки сообщений; • Наличие клиента под .NET Core. Решение проблем с производительностью: • Подняли очереди в том же регионе, что и WebApi; • Увеличили мощность серверов с WebApi; • Зарегистрировали клиент Service Bus как Singleton.

Slide 46

Slide 46 text

WebJob и проверка голосов 1. Горизонтальное масштабирование очередей 2. Горизонтальное масштабирование WebJob 3. Сложные и тяжелые проверки «накруток» масштабировались, не влияя на основной сайт. 4. Выключаются из инфраструктуры (платы) после голосования.

Slide 47

Slide 47 text

Service Fabric vs WebJob WebJob Для написания WebJob можно не использовать специализированные SDK. По сути WebJob — консольное приложение и деплоить его достаточно просто. Service Fabric Для работы через Service Fabric под .NET Core нужно устанавливать SDK из специального репозитория Ubuntu. Это создает проблемы и при деплое и при разработке. https://github.com/Azure/azure-content- ruru/blob/master/articles/service- fabric/service-fabric-create-your-first-linux- application-with-java.md Остальные статьи по этой теме предлагали использовать .NET Framework v4.5.2, что для нас было не приемлемо.

Slide 48

Slide 48 text

Continuous Delivery из коробки 1. При каждом пуше в Git-репозиторий в ветку production начинается деплой новой версии. 2. Web, API и сервисы голосования собираются и разворачиваются независимо. 3. Каждый деплой можно отследить через панель Azure, посмотреть лог процесса и, в случае необходимости, переразвернуть предыдущие версии.

Slide 49

Slide 49 text

Выводы Кэширование позволило 99,7% пользователей получить страницу конкурса Мисс Россия меньше, чем за одну секунду.

Slide 50

Slide 50 text

Выводы Грамотная архитектура позволяет: • Давать больше ресурсов на нагруженные части, меньше на ненагруженные. • Убрать влияние частей системы друг на друга. • Под каждую часть выделяются ресурсы только тогда, когда это требуется.

Slide 51

Slide 51 text

Выводы Стоимость новой инфраструктуры: • Во время голосования равна предыдущей версии (две недели в году). • В другое время в 3 раза дешевле.

Slide 52

Slide 52 text

Выбор лучшего решения для бизнес-задачи без компромиссов Microservices, Microservices, Microservices! Поставка бизнес- ценности как можно быстрее Дешево масштабировать сервисы

Slide 53

Slide 53 text

Полезные ресурсы #msdevcon Подробнее в моих статьях 1. Useful Tools for Managing Complexity of Microservice Architecture 2. Clouds, iPaaS, Citizen Integrator and Why India’s Outsourcing Is Losing Money 3. Стратегия крупного ретейлера по изменению IT-архитектуры и процессов

Slide 54

Slide 54 text

Полезные ресурсы #msdevcon База знаний о микросервисах 1. Microservices Resource Guide Martin Fowler 2. Microservice archite`cture patterns and best practices Chris Richardson

Slide 55

Slide 55 text

Q&A #msdevcon Микросервисы, чистый PaaS и конкурс мисс Россия Александр Бындю [email protected] http://byndyu.ru

Slide 56

Slide 56 text

Отзывы Помогите нам стать лучше! На вашу почту отправлена индивидуальная ссылка на электронную анкету. Заполните анкету! Нам очень важно ваше мнение. #msdevcon Оставляйте отзывы в социальных сетях. Мы все читаем. Спасибо вам! 