Архитектурные решения при создании облачного сервиса...
TRANSCRIPT
1
Go# Conferences – Team Leaders Day
Евгений Агафонов, ABBYY
Архитектурные решения при
создании облачного сервиса на
платформе Microsoft Azure
http://eugeneagafonov.com
@eugene_agafonov
2Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Всем привет!
Работаю в компании ABBYY c 2004 г.
Руковожу группой разработки образовательных проектов
Microsoft MVP по ASP.NET / IIS с 2006 г.
3Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
О чем пойдет речь
Назначение сервиса
Архитектура сервиса
Данные
Мультитенантность
Отличие глобальных и per tenant данных
Backend - RESTful API
Композиция компонентов в приложении
4Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
О чем пойдет речь
Frontend
UI Framework – knockout.js
Typescript
Стратегия отладки и логгирования
Elasticsearch + Kibana
Конфигурация
Разделение статической и динамической частей
Полезные советы
5Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Назначение сервиса
Проведение тестирования знаний учеников
Репетиция в условиях, максимально приближенных к
настоящему экзамену ЕГЭ
Аналитика по результатам уровня класса/школы/региона
6Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Как работает сервис
7Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Архитектура сервиса
RESTful API + HTML5 client
Azure Cache для часто требующихся данных
Azure Blob storage для хранения изображений и контента
Azure Table storage для хранения глобальных данных
SQL Azure для хранения данных per tenant
8Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Архитектура сервиса
Browser extension для сканирования и печати
Azure Queue и Azure Worker Role для работы с
распознаванием изображений
ABBYY Cloud OCR SDK для распознавания
http://ocrsdk.com/
Есть в магазине приложений Microsoft Azure
9Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Данные
Мультитенантность
Сonnection string per tenant
Глобально доступные данные в Azure Table Storage
Azure Blob storage для хранения файлов
Один контейнер или много контейнеров?
10Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Backend
ASP.NET Web API
Удобно использовать и масштабировать
CORS/JSON portable
Миграция в ASP.NET vNext
Композиция компонентов
Dependency Resolver позволяет подключить любой DI container
Наш выбор – Autofac
Минимизация зависимости от контейнера
Тестирование
11Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Frontend
UI Framework
knockout.js
Максимум контроля, но много кода
Смотрим на angular.js
Typescript
Контроль над большим codebase
Переход от AMD к commonjs modules
12Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Отладка и логгирование
Глобальный лог
Облачные сервисы отлаживать практически нереально
Логгирование – единственный вменяемый способ понять в чем
проблема
Сохранять максимум информации
Activity Id – дать Id цепочке действий от клиента сквозь всю
структуру сервиса
Elasticsearch и Kibana
Способ эффективно работать с логами
Application Insights for Visual Studio Online
13Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Конфигурация
Разделение на статическую и динамическую
Все, что невозможно изменить без перезапуска приложения
нужно хранить стандартным способом
Connection strings, storage accounts, etc. – можно изменять в
процессе работы приложения
14Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Полезные советы
Администрирование
Оформляйте все задачи по администрированию в виде кодаУдобно использовать LINQPad и/или scriptcsТакой код потом легко мигрируется в административное приложение
Развертывание
Пишите код с учетом механизмов развертывания в AzureВерсионность сообщений в Azure QueuesПодумайте о режиме read-only
Документация
Храните всю информацию о сервисе в Azure на «портале Проекта»Создайте сертификат управления сервисом и тоже сохраните в доступном местеКак и все сертификаты вообще
15Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Вопросы?
Все контаты в моем блоге, который можно найти в
Google по запросу Eвгений Агафонов ABBYY
http://eugeneagafonov.com
@eugene_agafonov
16Go
# C
on
fere
nce
s –
Te
am
Le
ad
ers
Day
Всем спасибо!
Евгений Агафонов, ABBYY
http://eugeneagafonov.com
@eugene_agafonov