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

HighLoad не кусается

Dd3f18c87b851137000c7427d7bd5d32?s=47 fwdays
November 24, 2012

HighLoad не кусается

История одного проекта, над которым пришлось работать. Сейчас пузомерка проекта доросла до 20 млн визитов в месяц, а Alexa rank медленно подбирается к 1 500
— Анализ legacy кода
— Рефакторинг проекта
— Оптимизация и профилирование
— Оптимизация
— Оптимизация

Dd3f18c87b851137000c7427d7bd5d32?s=128

fwdays

November 24, 2012
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. Highload не кусается Антон Шевчук

  2. Антон Шевчук http://anton.shevchuk.name

  3. С чего всё начиналось • •устаревшая структура БД • хлипкие

    сервера • дырявый код ... и другие болячки legacy code
  4. Спортзал • Core i7-975 • 12GB RAM • 80GB SSD

    • Core i7-975 • 24GB RAM • 2x120GB SSD(RAID0) • Percona-Mysql-5.5
  5. Уборка • • оптимизация. • оптимизация.. • оптимизация... • ...

    • ... и таки решились - версия 2.0
  6. Работа • • ~1000 m/h • ~1000 issues • ~

    500 bugs • ~ 150 bugs > normal priority • ~ 10% bugfix ошибкам перевода устанавливался приоритет normal
  7. WEB CLUSTER Структура проекта Load balancer Load balancer (reserve) memcached

    (2.0 Gb) MySQL
  8. Обновились apache 2.2 php5.2(backend) + varnish frontend nginx + php-fpm

    5.4
  9. Кеширование • • для гостей • для пользователей • для

    базы данных • и просто memcached
  10. Кеширование "для гостей" • • проверяем cookie авторизации o проверяем

    попадание в кеш  загружаем html файл o гененрируем html файл  register_shutdown_function()
  11. Для пользователей На уровне шаблонизатора Template::display("header.phtml"); if (!Template::cache("action", 60, $keys))

    { // action logic here Template::display("action.phtml"); } Template::display("footer.phtml");
  12. Для базы данных 1. 1. PDO wrapper 2. INSERT/UPDATE/DELETE идут

    на master 3. SELECT запросы идут на slave a. кешировались изначально на 5 минут b. в течении двух-недель это тюнилось 1. Тяжёлые SELECT делятся между master и slave (таких лишь два на всю систему)
  13. session has gone memcached has come

  14. memcached must be

  15. Поиск переехал Не используйте PECL extension*

  16. Форум переехал 15%*

  17. Чат переехал Чат на node.js + socket.io не взлетел*

  18. Статистика переехала Google Analytics

  19. PHP framework • Memcached wrapper • PDO wrapper • Simple

    Active Record • Simple Template Engine • MVC в одном index.php Часть кода мигрировала в Bluz Framework
  20. Посетители

  21. Profit производительности 250 5

  22. Profit производительности

  23. Profit производительности https://newrelic.com/

  24. Profit регистраций

  25. Profit онлайн ~18 000 ~39 000

  26. Profit для меня LEVEL UP

  27. Спасибо за внимание