SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
1
Rubylight programming contest 2 results
jug@rubylight.com
Задача
Обработать как можно больше запросов
в течении всего времени теста, затратив
минимальное количество денег на
оплату инстанций
Изменение нагрузки
Имплементация
interface InstanceManager {
void loadNotification(long requestCount, CloudAPI cloudApi);
}
interface CloudAPI {
void startInstances(int n);
void stopInstances(int n);
}
●
Implement InstanceManager
●
InstanceManager.loadNotification будет вызываться
каждый час в симуляторе с количеством запросов,
поступивших за последний час
Решения
Ключевые моменты
N1
Главное – избегать штрафов!
Ключевые моменты
N1
Главное – избегать штрафов!
Не удалось никому :)
Ключевые моменты
N2
Цикличность нагрузки
Необходимо учитывать данные за предыдущие
дни и недели
Ключевые моменты
N3
Алгоритм предсказывания нагрузки при отсутствии
данных за предыдущие дни
Присланные решения
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
●
4 решения от 3х
авторов
●
Решение Rubylight
●
Вариант без управления
инстанциями
Результаты
Implemen
tation
Request
income
Instance
Expenses
Fines Result
1 8151921 4912050 2079218 1160653
2 8159514 5237900 814973 2106641
3 8159187 4829900 634168 2695119
4 8165371 4962850 291859 2910662
Сравнение по количеству инстанций
-1500000
-1000000
-500000
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
1 2 3 4 5
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
9004800
4912050 5237900
4829900 4962850
Предсказание нагрузки в первый день
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
0
5000000000
10000000000
15000000000
20000000000
25000000000
30000000000
35000000000
40000000000
45000000000
Обзор решений
●
Не использовались данные за предыдущие дни
●
Следующее значение предсказывалось по разнице 2х
предыдущих
Первое решение – 1 160 653
●
Учитывались данные за предыдущую неделю, каждый
день сравнивался с тем же днем на прошлой неделе
●
Следующее значение предсказывалось по разнице 2х
предыдущих
Второе решение – 2 106 641
●
Сложный алгоритм сглаживания “пиков”
●
Учитывались 3 предыдущих значения и те же значения
для предыдущего дня
Третье решение – 2 695 119
Алгоритм лучшего решения
●
Использовались данные за предыдущие дни
●
Exponential Moving Average для прогноза
●
Для избежания штрафов к вычисленному значению
добавлялся “запас” или “insurance”
Exponential Moving Average
For data series Y, forecasted values S
Exponential Moving Average
Пример для N = 3 (alpha = 0.5) и N = 7 (alpha = 0.25)
1 2 3 4 5 6 7 8 9 10 11
0
50
100
150
200
250
300
Exponential Moving Average
●
http://en.wikipedia.org/wiki/Exponential_smoothing
●
http://en.wikipedia.org/wiki/Moving_average
Победители
III Deniss Samcuks
II Agnis Liukis
III Deniss Samcuks
I Aivars Kalvans
II Agnis Liukis
III Deniss Samcuks
2
https://wiki.rubylight.com/display/JUG
jug@rubylight.com

Más contenido relacionado

Destacado

Class Hour - Arturs Sakalis - Odnoklassniki
Class Hour - Arturs Sakalis - OdnoklassnikiClass Hour - Arturs Sakalis - Odnoklassniki
Class Hour - Arturs Sakalis - OdnoklassnikiSociality Rocks!
 
Boletim de ocupação hoteleira - BOH, EMBRATUR
Boletim de ocupação hoteleira - BOH, EMBRATURBoletim de ocupação hoteleira - BOH, EMBRATUR
Boletim de ocupação hoteleira - BOH, EMBRATUREcoHospedagem
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fmDmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахDmitry Buzdin
 
NATURAL HISTORY OF DISEASE
NATURAL HISTORY OF DISEASENATURAL HISTORY OF DISEASE
NATURAL HISTORY OF DISEASESoumya Sahoo
 

Destacado (7)

Class Hour - Arturs Sakalis - Odnoklassniki
Class Hour - Arturs Sakalis - OdnoklassnikiClass Hour - Arturs Sakalis - Odnoklassniki
Class Hour - Arturs Sakalis - Odnoklassniki
 
Boletim de ocupação hoteleira - BOH, EMBRATUR
Boletim de ocupação hoteleira - BOH, EMBRATURBoletim de ocupação hoteleira - BOH, EMBRATUR
Boletim de ocupação hoteleira - BOH, EMBRATUR
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
NATURAL HISTORY OF DISEASE
NATURAL HISTORY OF DISEASENATURAL HISTORY OF DISEASE
NATURAL HISTORY OF DISEASE
 

Similar a Rubylight JUG Contest Results Part II

Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьПолный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьMail.ru Group
 
Дополненная Реальность в Облаке
Дополненная Реальность в ОблакеДополненная Реальность в Облаке
Дополненная Реальность в ОблакеGeeksLab Odessa
 
Xp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesXp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesAlexey Andreev
 
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...it-people
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects
 Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects  Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects
Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects it-people
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхCodeFest
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 

Similar a Rubylight JUG Contest Results Part II (10)

Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьПолный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
 
Дополненная Реальность в Облаке
Дополненная Реальность в ОблакеДополненная Реальность в Облаке
Дополненная Реальность в Облаке
 
Xp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practicesXp days 2019 - Why startups need SRE practices
Xp days 2019 - Why startups need SRE practices
 
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
 
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects
 Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects  Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects
Экономное масштабирование в облаке, Иван Кокорин, Vostok Projects
 
Организация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данныхОрганизация процесса регулярной обработки больших объемов данных
Организация процесса регулярной обработки больших объемов данных
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 

Más de Dmitry Buzdin

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?Dmitry Buzdin
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?Dmitry Buzdin
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?Dmitry Buzdin
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDmitry Buzdin
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureDmitry Buzdin
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIsDmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsDmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump AnalysisDmitry Buzdin
 
Pragmatic Java Test Automation
Pragmatic Java Test AutomationPragmatic Java Test Automation
Pragmatic Java Test AutomationDmitry Buzdin
 
Web polyglot programming
Web polyglot programmingWeb polyglot programming
Web polyglot programmingDmitry Buzdin
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisDmitry Buzdin
 

Más de Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
JOOQ and Flyway
JOOQ and FlywayJOOQ and Flyway
JOOQ and Flyway
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 
Pragmatic Java Test Automation
Pragmatic Java Test AutomationPragmatic Java Test Automation
Pragmatic Java Test Automation
 
Mlocjs buzdin
Mlocjs buzdinMlocjs buzdin
Mlocjs buzdin
 
Web polyglot programming
Web polyglot programmingWeb polyglot programming
Web polyglot programming
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Jug Intro 20
Jug Intro 20Jug Intro 20
Jug Intro 20
 
Jug intro 18
Jug intro 18Jug intro 18
Jug intro 18
 

Rubylight JUG Contest Results Part II