Upload
alexander-demidko
View
91
Download
3
Embed Size (px)
Citation preview
Autoscaling for fun and profitAlexander Demidko,
Software Engineer @ Metamarkets
API
Kafka Druid
0.5PB сырых входящих/день => $$$$
API
Kafka Druid
Batch – EC2 Spot :)
Real-time – EC2 On-Demand $-(
• Быстро реагировать
• Выбирать стратегию: A) +10 контейнеров (30 мин)=> –10 контейнеров B) +40 контейнеров (20 мин)=> –40 контейнеров
• Учитывать прогнозы: объем входящих данных = f(время)пропускная способность = g(контейнеров)
Monte Carlo Tree Search
стоимость = железо + пенальти за задержку
число контейнеров
penalty(s, l)(x) = (atan(x*s – l*s) + atan(l*s)) / (0.5*π + atan(l*s))
• Selection - выбираем, где строить новый узел (exploration VS exploitation tradeoff) • Expansion - строим его :) • Simulation - эвристически оцениваем, во сколько он обойдется • Backpropagation - обновляем стоимости решений в дереве
Simulation
Уменьшение размерности дерева
• Дискретизация числа контейнеров • Дискретизация времени
Guardian
job_A - 5 => 10 контейнеровjob_B - 8 => 6 контейнеров
job_C - 15 => 20 контейнеров
job_A - 5 => 15 контейнеров
job_D - 2 => 4 контейнеров
Health monitoring
t_curr t_last
Kafka
Колебания: не можем точно выставить идеальное число контейнеров Число Kafka партиций % Число контейнеров must be(0)
avg = 35100 / (24*60) ~ 24
Уменьшили объем железа почти в 2 раза
Математика/реализация: 20/80
Спасибо!