На конференции Build2016 Microsoft анонсировал выход в GA нового сервиса – Azure Service Fabric, который ориентирован на разработку приложений с использованием подхода микросервисной архитектуры. В рамках доклада мы познакомимся с Azure Service Fabric, а также рассмотрим пример переноса небольшого IoT приложения, построенного с использованием Azure Cloud Service на новую архитектуру на базе Azure Service Fabric.
1. Миграция в Azure Service Fabric
Александр Лайша
Chief Software Engineer, EPAM
2. Цели
IoT проект на
базе Cloud
Services
Знакомство с
Service Fabric
Архитектура с
Azure Service
Fabric
Узнаем что может Azure
Service Fabric, из чего он
состоит внутри и как его
можно использовать
Познакомимся c примером
архитектуры на базе Azure
Service Fabric предыдущего
IoT проекта и разберём
преимущества
Рассмотрим архитектуру для
части функционала
реального IoT проекта на
базе Cloud Services и
поговорим о возможных
улучшениях
5. Какой функционал будем рассматривать?
Отправка телеметрии
Отслеживание движения автомобиля
Сигналы тревоги и отправка уведомлений
(SMS, Email, Push)
Отправка команд на автомобиль
Обработка ответа команды
8. Сигналы тревоги и отправка уведомлений
TelemetryReceiver
[Worker Roles]
WebPortal, RESTful API
[Web Roles]
10 последних
или список
NotificationSettingsCache
[Azure Redis]
Настройки
DeviceAlerts
[Azure Table]
NotificationEngine
[Worker Roles]
BrokeredMessage
NotificationTopic
[Azure Service Bus Topic]
9. Отправка команд на автомобиль
WebPortal, RESTful API
[Web Roles]
HTP
Команда
TrackingId
CommandStatusCache
[Azure Redis]
Статус выполнения
Id = TrackingId,
Status = InProgress
IoTGateway
[Worker Roles]
JSON
TrackingId
JSON
OutcomingMessagesHub
[Event Hub]
TrackingId
Команда
(пакет)
TrackingId
DeviceCache
[Azure Redis]
Информация
о подключённом
девайсе
10. Обработка ответа команды
DeviceCache
[Azure Redis]
Информация
для аутентификации
GatewayDB
[SQL Azure]
Ответ команды
(пакет)
IoTGateway
[Worker Roles]
TrackingId
JSON
IncomingMessagesHub
[Event Hub]
TrackingId
TelemetryReceiver
[Worker Roles]
JSON
TrackingId
CommandStatusCache
[Azure Redis]
Обновлённый
статус
Id = TrackingId
11. Инфраструктура
Web Roles
[WebPortal,
RESTful API]
Worker Roles
[NotificationEngine, IoTGateway,
TelemetryReceiver]
Azure Cloud Service
Azure Redis
[DeviceCache, CommandStatusCache,
NotificationSettingsCache]
SQL Azure
[GatewayDB]
Azure Storage Table
[DeviceAlerts,
TripCoordinates]
Storages
Event Hub
[OutcomingMessagesHub,
IncomingMessagesHub]
Service Bus
[SignalRBackplane,
NotificationTopic]
Messaging
12. Какие есть недостатки?
TelemetryReceiver – большой монолит
Масштабирование ролей по отдельности
Медленный деплоймент и масштабирование
Простаивание вычислительных мощностей
Дополнительные затраты на кеш
Нагрузка на storage при частых записях и
чтених
14. Что такое Azure Service Fabric?
Микросервисы
Подсистема
связи
Обнаружение служб
Подсистема
управления
Развёртывание, обновление
и мониторинг
Подсистема
надежности
Надёжность, доступность,
репликация, оркестрация
Подсистема
хостинга
Жизненный цикл приложения
Подсистема
тестирования
Симуляция неисправностей,
тестирование в рабочей
среде
Подсистема федерации
Объединяет различные узлы в единый унифицированный кластер
Транспортная подсистема
Безопасный "точка-точка” канал
Модели программирования
Azure
Windows
Server
Linux
Облако
провайдера
Windows
Server
Linux
Service Fabric
Частное облако
Windows
Server
Linux
High Availability
Hyper-Scale
Hybrid Operations
High Density Rolling Upgrades
Stateful services
Low Latency
Fast startup &
shutdown
Container Orchestration
& lifecycle management
Replication &
Failover
Simple
programming
models
Load balancing
Self-healingData Partitioning
Automated Rollback
Health
Monitoring
Placement
Constraints
15. Service Fabric
Кластер
Эволюция Cloud Services
Node Type #1
Node Type #2
Node Type #2
Node Type #2
Node Type #2
Node Type #1
Node Type #2
Web AppAPI
Background
App #2
Background
App #1
Cloud Services
16. Модели программирования
Микросервисы
Reliable Services API
верхнеуровневая модель программирования, любой
транспортный протокол, stateless & stateful
Reliable Actors API
Actor Model, однопоточная модель программирования,
stateless & stateful
Инфраструктура Service Fabric
Модели программирования
Azure Частное облако Облако провайдера
Guest Executables
Node.js, Java, а также собственные приложения
18. Отправка телеметрии
IoTGateway
[Stateful Service]
Кеширует информацию для
аутентификации всех девайсов
(IReliableDictionary<TKey, TValue>)
Кеширует информацию
для девайса
DeviceActor
[Stateful Actor]
TelemetryReceiver
[Stateless Service]
IncomingMessagesHub
[Event Hub]
19. Отслеживание движения автомобиля
DeviceActor
[Stateful Actor]
TripCoordinates
[Azure Table]
SignalRBackplane
[Azure Service Bus]
WebPortal, RESTful API
[Stateless Service]
Координаты за последние 24 часа
DeviceTripActor
[Stateful Actor]
• Кеширует координаты за
последние 24 часа
• Сохраняет координаты
пачками (100 или в течении
1 минуты)
20. Сигналы тревоги и отправка уведомлений
DeviceActor
[Stateful Actor]
DeviceAlertActor
[Stateful Actor]
Кеширует последние
10 сигналов с девайса
WebPortal, RESTful API
[Stateless Service]
Список сигналов тревоги
• Кеширует настройки для нотификаций
• Буферизует сообщений для отправки в
IReliableQueue и делает рассылку в фоне
NotificationEngine
[Stateful Service, Range partitioning]
Сообщение для отправки
Partition N
DeviceAlerts
[Azure Table]
Сигнал тревоги
21. Отправка команд на автомобиль
TrackingId
OutcomingMessagesHub
[Event Hub]
Команда
(пакет)
TrackingId
Состояние
девайса
DeviceActor
[Stateful Actor]
• ActorId = DeviceId
• Коллекция отправленных команд
(State, CmdName, TrackingId)
DeviceCommandActor
[Stateful Actor]
WebPortal, RESTful API
[Stateless Service]
HTP
Команда
IoTGateway
[Stateful Service]
JSON
TrackingId
22. Обработка ответа команды
JSON
IncomingMessagesHub
[Event Hub]
TrackingId
Ответ команды
(пакет)
IoTGateway
[Stateful Service]
TrackingId
DeviceActor
[Stateful Actor]
JSON TrackingId
TelemetryReceiver
[Stateless Service]
Обновлённый
статус и результат
выполнения
DeviceCommandActor
[Stateful Actor]
24. Что улучшилось?
Монолита больше нету
Версионирование сервисов
Быстрый деплоймент
Высокая утилизация физических ресурсов
Отсутствие необдходимости в Azure Redis
Уменьшение нагрузки на Storage
Увеличение производительности
25. Полезные ресурсы
Официальная документация Azure Service Fabric: https://azure.microsoft.com/en-
us/documentation/services/service-fabric
Книга «Programming Microsoft Azure Service Fabric»: http://www.amazon.com/Programming-
Microsoft-Service-Developer-Reference/dp/1509301887
Паттерны и Антипаттерны Azure Service Fabric: https://acom-swtest-2.azurewebsites.net/en-
gb/documentation/articles/service-fabric-reliable-actors-patterns-introduction
Pub-Sub для Reliable Actors: https://www.nuget.org/packages/ServiceFabric.PubSubActors
26. Что дальше
Service Fabric
рулит!
Читайте и
пишите много
кода
Давайте
общаться!
Книга «Programming
Microsoft Azure Service
Fabric (Developer Reference)»
ещё не выпущена, но
доступна для пред-заказа.
Я перехожу в зону вопросов
и ответов.
Напишите мне в твиттере,
если не можете найти и
хотите пообщаться.
Мигрируйте и
разрабатывайте на базе
микросервисов и Azure
Service Fabric
27. Q&A
Миграция в Azure Service Fabric
Александр Лайша
layshaalex@gmal.com
@layshaalexander