Миграция в azure service fabric
TRANSCRIPT
Цели
IoT проект на базе Cloud
Services
Знакомство с Service
Fabric
Архитектура с Azure Service Fabric
Узнаем что может Azure Service Fabric, из чего он состоит внутри и как его
можно использовать
Познакомимся c примером архитектуры
на базе Azure Service Fabric предыдущего IoT
проекта и разберём преимущества
Рассмотрим архитектуру для части функционала реального IoT проекта
на базе Cloud Services и поговорим о возможных
улучшениях
Какой функционал будем рассматривать?Отправка телеметрииОтслеживание движения автомобиляСигналы тревоги и отправка уведомлений (SMS, Email, Push)Отправка команд на автомобильОбработка ответа команды
Отправка телеметрииТелеметрия
(пакет)
DeviceCache[Azure Redis]
Информацияо девайсе
JSON
IncomingMessagesHub[Event Hub]
TelemetryReceiver[Worker Roles]
JSON
Информациядля аутентификации
GatewayDB[SQL Azure]
IoTGateway[Worker Roles]
Установка TCP
соединения
Отслеживание движения автомобиля
TelemetryReceiver[Worker Roles] Полученные координаты
TripCoordinates[Azure Table]
За последние 24 часа
или по фильтру
Текущие координаты
WebPortal, RESTful API[Web Roles]
SignalRBackplane[Azure Service Bus]
BrokeredMessage
Сигналы тревоги и отправка уведомлений
TelemetryReceiver[Worker Roles]
WebPortal, RESTful API[Web Roles]
10 последних или список
NotificationSettingsCache[Azure Redis]
Настройки
DeviceAlerts[Azure Table]
Сигнал тревоги
NotificationEngine[Worker Roles]
BrokeredMessage
NotificationTopic[Azure Service Bus Topic]
Отправка команд на автомобиль
WebPortal, RESTful API[Web Roles]
HTP
Команда
TrackingId
CommandStatusCache[Azure Redis]
Статус выполнения Id = TrackingId,
Status = InProgress
IoTGateway[Worker Roles]
JSONTrackingId
JSON
OutcomingMessagesHub[Event Hub]
TrackingId
Команда(пакет) TrackingId
DeviceCache[Azure Redis]
Информацияо подключённом
девайсе
Обработка ответа команды
DeviceCache[Azure Redis]
Информация о
девайсе Информациядля аутентификации
GatewayDB[SQL Azure]
Ответ команды(пакет)
IoTGateway[Worker Roles]
TrackingIdJSON
IncomingMessagesHub[Event Hub]
TrackingIdTelemetryReceiver
[Worker Roles]
JSONTrackingId
CommandStatusCache[Azure Redis]
Обновлённый статус
Id = TrackingId
Инфраструктура
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
Какие есть недостатки?TelemetryReceiver – большой монолитМасштабирование ролей по отдельностиМедленный деплоймент и масштабированиеПростаивание вычислительных мощностейДополнительные затраты на кешНагрузка на storage при частых записях и чтених
Что такое Azure Service Fabric?Микросервисы
Подсистема связи
Обнаружение служб
Подсистема управления
Развёртывание, обновление и мониторинг
Подсистема надежности
Надёжность, доступность,
репликация, оркестрация
Подсистема хостингаЖизненный цикл
приложения
Подсистема тестирования
Симуляция неисправностей,
тестирование в рабочей среде
Подсистема федерацииОбъединяет различные узлы в единый унифицированный кластер
Транспортная подсистемаБезопасный "точка-точка” канал
Модели программирования
Azure
WindowsServer Linux
Облако провайдера
WindowsServer Linux
Service Fabric
Частное облако
WindowsServer Linux
High Availability
Hyper-Scale
Hybrid Operations
High Density
Rolling Upgrades Stateful
services
Low Latency Fast startup & shutdown
Container Orchestration & lifecycle management Replication &
FailoverSimple
programming models
Load balancing
Self-healingData Partitioning
Automated Rollback
Health Monitoring
Placement Constraints
Service FabricКластер
Эволюция Cloud Services
Node Type #1Node Type #2
Node Type #2
Node Type #2
Node Type #2
Node Type #1
Node Type #2
Web AppAPI
BackgroundApp #2
BackgroundApp #1
Cloud Services
Модели программированияМикросервисы
Reliable Services API
верхнеуровневая модель программирования, любой транспортный протокол, stateless &
stateful
Reliable Actors APIActor Model, однопоточная модель
программирования, stateless & stateful
Инфраструктура Service Fabric
Модели программирования
Azure Частное облако Облако провайдера
Guest ExecutablesNode.js, Java, а также собственные приложения
Отправка телеметрии
IoTGateway[Stateful Service]
Кеширует информацию дляаутентификации всех девайсов
(IReliableDictionary<TKey, TValue>)
Кеширует информацию для девайса
DeviceActor [Stateful Actor]
TelemetryReceiver[Stateless Service]
IncomingMessagesHub[Event Hub]
Отслеживание движения автомобиля
DeviceActor [Stateful Actor]
Пачка координат
TripCoordinates[Azure Table]
SignalRBackplane[Azure Service Bus]
BrokeredMessage
Список координат
более чем за последние
24 часа
Текущие координаты
WebPortal, RESTful API[Stateless Service]
Координаты за последние 24 часа
DeviceTripActor [Stateful Actor]
• Кеширует координаты за последние 24 часа
• Сохраняет координаты пачками (100 или в течении 1 минуты)
Сигналы тревоги и отправка уведомлений
DeviceActor [Stateful Actor]
DeviceAlertActor [Stateful Actor]
Кеширует последние10 сигналов с девайса
WebPortal, RESTful API[Stateless Service]
10 последних
Список сигналов тревоги
• Кеширует настройки для нотификаций
• Буферизует сообщений для отправки в IReliableQueue и делает рассылку в фоне
NotificationEngine[Stateful Service, Range partitioning]
Сообщение для отправкиPartition N
DeviceAlerts[Azure Table]
Сигнал тревоги
Отправка команд на автомобиль
TrackingId
JSON
OutcomingMessagesHub[Event Hub]
TrackingId
Команда(пакет) TrackingId
Состояниедевайса
DeviceActor [Stateful Actor]
• ActorId = DeviceId• Коллекция отправленных команд(State, CmdName, TrackingId)
DeviceCommandActor [Stateful Actor]
WebPortal, RESTful API[Stateless Service]
HTPКоманда
IoTGateway[Stateful Service]
JSONTrackingId
Обработка ответа команды
JSON
IncomingMessagesHub[Event Hub]
TrackingId
Ответ команды(пакет)
IoTGateway[Stateful Service]
TrackingId
DeviceActor [Stateful Actor]
JSON TrackingId
TelemetryReceiver[Stateless Service]
Обновлённый статус и результатвыполнения
DeviceCommandActor [Stateful Actor]
Инфраструктура
Azure Service Fabric
SQL Azure[GatewayDB]
Azure Storage Table[DeviceAlerts,
TripCoordinates]
Storages
Stateless Services[WebPortal, RESTful API]
NodeType #1
Stateful Actor Services [Device Actor, DeviceTripActor,
DeviceAlertActor, DeviceCommandActor]
Stateful Services[IoTGateway,
NotificationEngine]
Stateless Services[TelemetryReceiver]
NodeType #2
Event Hub[OutcomingMessagesHub,IncomingMessagesHub]
Service Bus[SignalRBackplane]
Messaging
Что улучшилось?Монолита больше нетуВерсионирование сервисовБыстрый деплойментВысокая утилизация физических ресурсовОтсутствие необдходимости в Azure RedisУменьшение нагрузки на StorageУвеличение производительности
Полезные ресурсы
Официальная документация 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
Что дальше
Service Fabric рулит!
Читайте и пишите
много кодаДавайте
общаться!Книга «Programming
Microsoft Azure Service Fabric (Developer
Reference)» ещё не выпущена, но доступна
для пред-заказа.
Я перехожу в зону вопросов и ответов.
Напишите мне в твиттере, если не
можете найти и хотите пообщаться.
Мигрируйте и разрабатывайте на базе микросервисов и Azure
Service Fabric
Q&A
Миграция в Azure Service FabricАлександр Лайша[email protected]@layshaalexander