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

Xpdays 2017 - Top-10 fails on real highload pro...

WoZ
November 10, 2017

Xpdays 2017 - Top-10 fails on real highload project

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

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

WoZ

November 10, 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 1582 (the date of Gregorian reform to the Christian calendar).
  5. Big-endian vs lirle-endian, потому секундная фракция попала в начало Отсутствие

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

  7. 20 Выводы Провести на практике проверку решения на таких же

    объемах и паттернах использования Для критичного функционала продумать план Б Анализировать критичность функционала
  8. pt-online-schema-change от PERCONA *работает только с таблицами с PRIMARY KEY

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

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

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

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

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

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

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

    запросов росла В какой-то момент сервер перестал отвечать…
  16. Выполняет чистку по pages в buffer pool TRUNCATE TABLE ставит

    lock на операции с table cache и buffer pool
  17. Выполняет чистку по pages в buffer pool TRUNCATE TABLE ставит

    lock на операции с table cache и buffer pool Снимает блокировки в самом конце
  18. …В это время приходит DDL операция и ставится lock на

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

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

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

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

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

    md5, murmur, etc Стандартный алгоритм в Memcache и Memcached:
  24. А он фризился на инстансе с сессиями на 2-5 секунд

    примерно раз в несколько минут Мы знали, что redis использует 1 CPU core Но не учли, что этот 1 CPU core использует и Garbage Collector
  25. Мы знали, что redis использует 1 CPU core Но не

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

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

    и паттернах использования Анализировать/выяснять критичность функционала Продумывать как система может сломаться, что может пойти не так Выводы
  28. 95 Проводить на практике проверку решения на таких же объемах

    и паттернах использования Иметь запасной план Анализировать/выяснять критичность функционала Продумывать как система может сломаться, что может пойти не так Выводы
  29. 96 Проводить на практике проверку решения на таких же объемах

    и паттернах использования Иметь запасной план Анализировать/выяснять критичность функционала Продумывать как система может сломаться, что может пойти не так Собирать и правильно анализировать метрики Выводы
  30. 97 Проводить на практике проверку решения на таких же объемах

    и паттернах использования Иметь запасной план Анализировать/выяснять критичность функционала Продумывать как система может сломаться, что может пойти не так Собирать и правильно анализировать метрики Инвестировать в знания Выводы