ThinkPHP #3: Highload не кусается

ThinkPHP #3: Highload не кусается

История одного проекта, над которым пришлось работать. Сейчас пузомерка проекта доросла до 20 млн визитов в месяц :)

4769e8ad10f8a1d453dd6e59ecdbcbe4?s=128

thinkphp_com_ua

August 18, 2012
Tweet

Transcript

  1. Highload не кусается

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

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

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

    таки версия 2.0
  5. Работа • ~1000 m/h • ~1000 issues • ~500 bugs

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

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

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

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

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

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

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

  13. memcached must be

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

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

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

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

    Active Record • Simple Template Engine • MVC в одном index.php Часть кода мигрировала в Bluz Framework https://github.com/AntonShevchuk/Bluz
  18. Посетители

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

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

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

  22. Profit онлайн ~18 000 ~38 000

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

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