API в SAAS,
с облаком и без
ресурсы, SLA, балансировка, расширяемость и
всякая чепуха
Обо мне
• Егор Назаркин
• So ware Engineer
• Киев, Украина
Easy-to-use Machine Learning service that
helps people build models and predict on them.
внутри платформы
intake transform build
serve
client
внутри платформы
примеры использования
приложение на входе на выходе
рекомендации
товаров
клик по позиции список “похожих”
исследование и
предсказание
цены
недвижимость,
авиабилеты
динамика и
склонность
(вероятность)
изменения
поиск
мошенничества
атрибуты
транзакции
принять/
отклонить
транзакцию
вовлеченность в
игру
игровая
активность
изменение
сложности
типичное (wsgi) приложение
Web Appclient reverse proxy
конфигурация
round robin
Web Appclient
reverse proxy
balancer
конфигурация
Проблемы
• предсказания делаются на обученых моделях
• модель может занимать гигабайты памяти
• обработка запроса длится от 20 до 600
миллисекунд
• загрузка в память занимает в 10-30 раз
больше времени
Каждому узлу по собственной модели
1
2
3
4
5
6node
client
reverse proxy
balancer
Hash ключ
Конфигурация
Пропадание узла
• умирает один сервер — нужно перебалансировать всю систему
4 / 12 3 / 12
1 2 3
4 5 6
7 8 9
10 11 12
1 2 3 4
5 6 7 8
9 10 11 12
Consistent hash
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
1
23
4
Consistent hash
10.0.0.1
10.0.0.210.0.0.4
1
23
4
С nginx
160 * weight
h ps://www.nginx.com/resources/wiki/modules/consistent_hash/
И что?
Почему не подходит?
• пассивная проверка хоста
• необходимость обновления конфигурации
на всех узлах (вспомнить про consul)
• нужен “прогрев” моделей в кеше узла
• масштабирование?
Структура кластера
load balancer
workermodel
node
router
Architecture
worker1
worker2
worker3
uWSGI
emperor modesentinelcontroller +
algorithm
API
nginx
uWSGI
fill_vassals.py
Controller.lua
Controller.py
Controller.py
Controller.py
Controller.py
Controller.py
Mappers
• Random
• Hash
• Hash Ring
• Model weight
Random
Hash
Model weight
m1 m2
h1 h2 h3 h4
Model weight
Hash ring
Hash ring
Итоги
• Know your instrument!
• Сопротивляйся
• Минимизируй зоопарк решений
• Старайся уменьшить объем работы
• Конфигурация
• Расширяемость
• Тестирование
Ссылки
• So You Wanna Go On-prem Do Ya — h p://bit.ly/1THE0CS
• HAProxy zero-downtime, zero-delay reloads with multibinder
— h p://bit.ly/2gp4dwC
• Autoscaled Internal Load Balancing using HAProxy and Consul on
Compute Engine — h ps://goo.gl/ZZPDCr
• load balancing и оптимальная загрузка кластера — h ps://
goo.gl/kbDTP8
• Prediction API as a service on premise solution — h p://bit.ly/
2hkzna1
Вопросы?

API в SAAS, с облаком и без: ресурсы, SLA, балансировка, расширяемость