Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Top-10 fails on real highload project

WoZ
October 14, 2017

Top-10 fails on real highload project

Данный доклад был представлен на Highload Fwdays'17 и я рассказал 10 историй о проблемах через которые я с командой прошел на реальном нагруженном проекте с миллионами пользователей.

Истории:
- как ошибка выбора идентификатора пользователя, обнаруженная после запуска проекта, чуть не стоила 2 лет разработки
- как мы боролись с перегруженным mysql когда даже включение binlog убивает сервер
- почистил партицию mysql под нагрузкой - получи мертвый сервер
- как верстальщик поменял верстку серча и уложил продукт на 4 часа
- ошибка в ядре php которая привела даунтайм на несколько часов
- как незнание особенностей работы GC у redis обошлось в $50к чистой прибыли
- добавлением или удалением серверов из пула memcached инвалидировали весь кэш (кривые настройки php клиента Memcache/Memcached)
- как поправив тест потерять 2 миллиона пользовательских писем
- как релиз одного проекта крэшил хелсчеки соседнего проекта
- самый большой фейл с системами очередей и статистикой: ивенты терялись годами

WoZ

October 14, 2017
Tweet

More Decks by WoZ

Other Decks in Programming

Transcript

  1. Gray hat ACM CTF, freelance Senior Team lead Chef Technical

    Officer Автор журнала ][akep
  2. >= 64 бит на id Отсутствие пересечений в разных дата

    центрах Получение новых id без опроса хранилища
  3. Размер индекса для хранения в БД? 100 000 000 224

    ≈ 5.9 … как 3 байта сохранить
  4. The timestamp is a 60-bit value. For UUID version 1,

    this is represented by UTC as a count of 100-nanosecond intervals since 00:00:00.00, 15 October.
  5. Big-endian vs li^le-endian, потому секундная фракция попала в начало Отсутствие

    равномерного распределения из-за особенностей генерации
  6. ???

  7. pt-online-schema-change от PERCONA *работает только с таблицами с PRIMARY KEY

    или UNIQUE INDEX Нужна альтернатива требующая меньше ресурсов
  8. pt-online-schema-change от PERCONA *работает только с таблицами с PRIMARY KEY

    или UNIQUE INDEX OnlineSchemaChange от Facebook *работает только с таблицами с PRIMARY KEY или UNIQUE INDEX *позволяет переливать базы на другой сервер *отсутствует контроль скорости Нужна альтернатива требующая меньше ресурсов
  9. За 4 (бессонных) суток мной была написана утилита*! * -

    без SMS и регистрации, первые 14 дней использования бесплатны, затем за каждый день взымается абонентская плата в размере $10000 ZWL.
  10. Атомарно создаются триггера на INSERT, UPDATE, DELETE с записью изменений

    в delta-таблицы Начинается выборка данных, с регулятором скорости
  11. Атомарно создаются триггера на INSERT, UPDATE, DELETE с записью изменений

    в delta-таблицы Начинается выборка данных, с регулятором скорости Импорт на des†na†on сервер дампа
  12. Атомарно создаются триггера на INSERT, UPDATE, DELETE с записью изменений

    в delta-таблицы Начинается выборка данных, с регулятором скорости Импорт на des†na†on сервер дампа Загрузка данных с delta-таблиц
  13. Атомарно создаются триггера на INSERT, UPDATE, DELETE с записью изменений

    в delta-таблицы Начинается выборка данных, с регулятором скорости Импорт на des†na†on сервер дампа Загрузка данных с delta-таблиц Переключение серверов или свитч баз
  14. Запросы все поступали, соединения устанавливались, очередь запросов росла В какой-то

    момент сервер перестал отвечать… Дежурный сделал TRUNCATE таблицы
  15. Выполняет чистку по pages в buffer pool TRUNCATE TABLE ставит

    lock на операции с table cache и buffer pool
  16. Выполняет чистку по pages в buffer pool Снимает блокировки в

    самом конце TRUNCATE TABLE ставит lock на операции с table cache и buffer pool
  17. …В это время приходит DDL операция и ставится lock на

    table cache, а затем попытка установить lock на buffer pool… … которая будет ожидать завершения первого TRUNCATE
  18. Замедляться выполнение еще может из-за включенного adap†ve hash index Scan

    по buffer pool для чистки adap†ve hash index может выполняться долго h‹ps://bugs.mysql.com/bug.php?id=68184
  19. Рекомендация v1: не транкейтить таблицы, партиции, а использовать DROP PARTITION

    Проблема не наблюдалась на серверах с небольшим размером buffer pool
  20. Рекомендация v1: не транкейтить таблицы, партиции,а использовать DROP PARTITION Проблема

    не наблюдалась на серверах с небольшим размером buffer pool Рекомендация v2: использовать EXCHANGE PARTITION
  21. сервера в стойке подключены к стоечному свитчу кроссконнекты между свитчами

    разных стоек мир подключен к маршрутизатору и от него к свитчам rsync обновлений с билд машины
  22. server_id = hash(key) % num_servers hash может быть crc32, fnv,

    md5, murmur, etc Стандартный алгоритм в Memcache и Memcached:
  23. Мы знали, что redis использует 1 CPU core Но не

    учли, что этот 1 CPU core использует и Garbage Collector
  24. А он фризился на инстансе с сессиями на 2-5 секунд

    примерно раз в несколько минут Мы знали, что redis использует 1 CPU core Но не учли, что этот 1 CPU core использует и Garbage Collector
  25. Смена состояния системы при ошибке обработки с последующим nack Отсутствие

    очередности в доставке сообщений Purge очереди Hard reboot rabbitmq Включение auto acknowledgment в коде Факторы потери/порчи данных:
  26. Как же жить с highload? Практически проверять внедряемые решения Думать

    как изменение может затронуть систему Собирать метрики и правильно анализировать их Инвестировать в знания