WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить...

41
Как построить hiload и не сойти с ума Петровский Анатолий

Transcript of WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить...

Page 1: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Как построить hiload и не сойти с ума

Петровский Анатолий

Page 2: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

• СТО ringostat.com

• СТО iftheycall.com

• Developer of New Products

• Co-founder bezpeca.com

• CTO bankua.net

• Web developer

Немного обо мне

Page 3: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"
Page 4: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

hiload = СМО

Page 5: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровень

Бизнес логика

Хранение данных

Стек современной системы массового обслуживания

Page 6: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Виды масштабируемости

Вертикальное. Тупо покупаем железо пошире

Page 7: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Виды масштабируемости

Горизонтальное. Тупо покупаем еще железа

Page 8: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровень

Бизнес логика

Хранение данных

Стек современной системы массового обслуживания

Page 9: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данных

• Репликация (легко) • Read/Write splitting (сложно) • Оптимизация (сложно)

Page 10: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхРеликация и Read/Write splitting

Master Slave

Сохрани/измениДай

Page 11: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхРеликация

Master Master

Page 12: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхРеликация

Полезный совет:

Отказывайтесь всюду от auto increment key юзайте UUID для записей. Это уменьшит вашу боль при

включении master-master репликации

Page 13: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхСферическая система в вакууме

Master cluster Slave cluster

Сохрани/измениДай

Page 14: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхРеликация

Полезный совет:

Если планируете расти и размножатся, то лучше юзайте PostgreSQL с самого начала. В PostgreSQL всего один журнал запросов, репликация на физическом уровне

и все работает железобетонно.

Page 15: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данных

Вы никуда не денетесь от вертикальной масштабируемости

Page 16: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхОптимизация

• Простые индексы • Составные индексы • Кеширование • а еще партицирование, шардинг и многое другое

Page 17: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхПростые индексы

user_names

id name sex

1 Маша female

3 Антон male

2 Настя female

11 Глеб male

Page 18: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

user_names

id name sex

1 Маша female

3 Антон male

2 Настя female

11 Глеб male

Хранение данныхПростые индексы

user_names_id_idx

id link

1 4x4462A

11 4x2345F

2 4x4424A

3 4x326A0

Page 19: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхПростые индексы

пусть есть такая таблица:

Page 20: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхПростые индексы

Page 21: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхПростые индексы

Page 22: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхСоставные индексы

Простой индекс

Составной индекс

Page 23: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхКеширование

Все SELECT запросы попадают в кеш по умолчанию

Page 24: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхКеширование

Все SELECT запросы попадают в кеш по умолчанию

ПЛОХО

ХОРОШО

Page 25: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Хранение данныхОптимизация

Полезный совет:

Денормализируйте. Если где то можно обойтись без дополнительной таблицы - обходитесь. Лишний join -

лишняя операция.

Page 26: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровень

Бизнес логика

Хранение данных

Стек современной системы массового обслуживания

Page 27: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логика

• Расход памяти • Нерациональный i/o • Разделяй и властвуй • Расход ресурсов хранилища

Page 28: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаПамять

1000 клиентов, которые запрашивают 1000 файлов, каждый из которых весит 1.5MB съедят 1.5GB оперативной памяти

Page 29: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаi/o

Полезный совет:

Везде где вы делаете запись или чтение с диска/из сети - делайте это асинхронно. Не блокируйте

обработку такими тупыми операциями.

Page 30: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаРазделяй и властвуй

Сбор и обработка статистикиСбор логов

Фронтэнд

Page 31: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаРазделяй и властвуй

Полезный совет:

Разделяйте функциональные части системы в отдельные сервисы. Проще искать слабые системе и можно их отдельно друг от друга масштабировать

Page 32: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаРазделяй и властвуй

Сбор и обработка статистикиСбор логов

Фронтэнд

Page 33: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаРасход ресурсов хранилища

Page 34: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Бизнес логикаРасход ресурсов хранилища

Page 35: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровень

• Load average

Page 36: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровеньload average

Page 37: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровень

• “Занятость” CPU • “Занятость” RAM • “Занятость” диска • и многое другое

load average

Page 38: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровеньПроцессы и их переключение

Одни процесс - это совокупность состояний регистров, сопроцессоров и адрес следующей операции (контекст). Для переключения между процессами, достаточно только выгрузить контекст одного процесса и загрузить контекст

другого.

Page 39: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Физический уровеньПроцессы и их переключение

Page 40: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

Заключение

Как не сойти с ума?

• Не забывайте умножать мелкие операции на количество потенциальных клиентов

• Разделяйте и властвуйте • Реплицируйте • Денормализируйте • Любите друг друга • Больше отдыхайте

Page 41: WebCamp:Back-end Developers Day. Петровский Анатолий "Как построить хайлоад и не сойти с ума"

http://facebook.com/toxa.01

С вами был Петровский Анатолий. Full stack developer at Readdle Inc.

Спасибо за внимание, вы хорошая публика ;)