РИТ++ 2017, HighLoad Junior
Зал Сингапур, 6 июня, 15:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2466.html
В этом докладе я хочу рассказать историю, с которой, скорее всего, сталкивался каждый.
История - путь проекта от стадии разработки до выкатывания его в продакшн, начала эксплуатации.
...
6. Проблемы воспроизведения ситуации
• Нагрузочное тестирование может не работать
• Пользователь думает по-другому
• Окружение разное
• Продакшн
• Стейджинг
• Компьютер разработчика
7. У меня на компе работает
• Нет
• Нельзя так думать
•Вы не в детском саду
•Вы ответственны за ваш проект в продакшне
•Вам с этим жить
18. Почему это плохо
• Мы сходили в кэш
• Там нет ключа
• Пошли генерить данные по-новой
• Отдали клиенту
19. Почему это плохо
• Мы сходили в кэш
• Там нет ключа
• Пошли генерить данные по новой
• Отдали клиенту
20. Проблема №2
• Холодный старт кэша
• Все серверы выключились
• Нужно запустить проект
• Проверить, что все работает
21. Как поднять проект после блэкаута
• Запускаем сервера
• Запускаем виртуалки
• Запускаем сервисы
• БД
• Кэши
• Хранилища
22. Как поднять проект после блэкаута
• Закрываем проект от пользователей
• Прогреваем кэш
• Автоматически
• Вручную
• Проверяем работу
• Открываем проект
23. Как закрыть проект для всех (nginx)
set $m "";
set $i "";
if ( -f /tmp/offline ) {set $m T;}
if ($remote_addr = 'your ip') {set $i "${m}";}
if ($i) { break; }
if ($m) {return 503;}
25. Нагрузка маленькая, но все тормозит
• Смотрим память – все ОК
• Смотрим проц – все ОК
• Смотрим базу – все ОК
• Смотрим диски – все ОК
• Ничего не тормозит
• НО ГЛАВНАЯ НЕ РАБОТАЕТ
47. Что дали опыты
• При множественном запросе разных файлов IO падает
• Не масштабируется. Добавлением второго рейда.
• Какой бы ни был массив, скорость не прибавится
48. И тут мы прилегли
• 10 человек работают с файлами, и скорость 10кбс у
каждого
49. Рейды в топку
• Храним на дисках
• >2 копии одного файла
• >2 дисках
• =хранение денег и места
50. Разница скорости
• 1 диск = 100 iops
• Raid5 (5 hdd) = 100 iops
• 5hdd = 500iops
51. Плюсы
• Своя скорость у каждого диска
• Если один тормозит – тормозит только он
• Сервис более живучий
• Каждый диск увеличивает IO
53. Как реплицировать
• Дисками?
• Серверами?
• Серверами и дисками
• При replication factor=2 не страшно терять ни сервер, ни диски
• Прощайте, raid-массивы и их гемор
• Простота в обслуживании стораджей
55. Не надо так
def update_balance(self, balance):
self.balance += balance
self.save()
56. И так тоже не надо
def update_balance(self, balance):
Profile.objects.filter(
pk=self.pk
).update(balance=F(‘balance’) + balance)
57. Транзакции – наш выбор
def update_balance(self, balance):
with transaction.atomic():
Profile.objects.filter(
pk=self.pk
).select_for_update()
.update(balance=F(‘balance’) + balance)
58. Talk sql to me
BEGIN;
SELECT … from profile_profile where
id=some_id FOR UPDATE;
UPDATE `profile_profile` set `balance` =
(`balance` + ‘-10’) WHERE `id`=7551;
COMMIT;
61. Выводы
• Забудьте «у меня работает»
• Окружение – важно
• Не делайте ничего без данных на руках
• Не кладите большие данные в кэш
• Используйте внешние хранилища
• Нет состояния - нет проблем
62. Выводы
• Изучите no-downtime альтеры вашей БД
• Используйте транзакции в БД для целостности данных
• Используйте рабочий для вас уровень изоляции данных в
БД
Трейсинг самое сложное. Мы сделали сначала мониторинг, потом сбок метрик и ошибок и только потом трейсинг
Если есть что рассказать про фолс позитив, то нужно рассказать
Рассказать чем анализировать
Мы делаем тестирование только на то. Что мы знаем что оно тормозит
То что работает шустро работает – не тестируем
Что тормозит – запрашивается редко
Что работает шустро – тормозит
Тестируем со своей колокольни а юзер мыслит по другому
Рассказать пару интересных историй из жизни.
Есть что оптимизировать малыми силами
Нам повезло
Зависит от проекта
Это все потому что мы не знаем работает кеш или нет
Сеть курильшика, сеть здорового человека.
Сеть курильшика, сеть здорового человека.
Рассказать что за ключ и почму он там оказался
Имеет смысл погооврить про тех кто изначально не закладывал мастабирование
В чем смысл истории и не хватает слайдов
Пронумеровать правила сквозным образом.
Что такое большая таблица
А давайте сделаем raid5
Raid10 быстрее, но дороже
Raid0 – не надежно
Raid1 – смысли?
Много места
Мало IO
Каждый диск в кластере добавляет IO в общую систему а с рейдами каждый диск работает на скорости самого медленного диска в рейдею Надо самому писать код который будет все это хендлить