Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

С чего всё начиналось • •устаревшая структура БД • хлипкие сервера • дырявый код ... и другие болячки legacy code

Slide 4

Slide 4 text

Спортзал • Core i7-975 • 12GB RAM • 80GB SSD • Core i7-975 • 24GB RAM • 2x120GB SSD(RAID0) • Percona-Mysql-5.5

Slide 5

Slide 5 text

Уборка • • оптимизация. • оптимизация.. • оптимизация... • ... • ... и таки решились - версия 2.0

Slide 6

Slide 6 text

Работа • • ~1000 m/h • ~1000 issues • ~ 500 bugs • ~ 150 bugs > normal priority • ~ 10% bugfix ошибкам перевода устанавливался приоритет normal

Slide 7

Slide 7 text

WEB CLUSTER Структура проекта Load balancer Load balancer (reserve) memcached (2.0 Gb) MySQL

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Кеширование "для гостей" • • проверяем cookie авторизации o проверяем попадание в кеш  загружаем html файл o гененрируем html файл  register_shutdown_function()

Slide 11

Slide 11 text

Для пользователей На уровне шаблонизатора Template::display("header.phtml"); if (!Template::cache("action", 60, $keys)) { // action logic here Template::display("action.phtml"); } Template::display("footer.phtml");

Slide 12

Slide 12 text

Для базы данных 1. 1. PDO wrapper 2. INSERT/UPDATE/DELETE идут на master 3. SELECT запросы идут на slave a. кешировались изначально на 5 минут b. в течении двух-недель это тюнилось 1. Тяжёлые SELECT делятся между master и slave (таких лишь два на всю систему)

Slide 13

Slide 13 text

session has gone memcached has come

Slide 14

Slide 14 text

memcached must be

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

PHP framework • Memcached wrapper • PDO wrapper • Simple Active Record • Simple Template Engine • MVC в одном index.php Часть кода мигрировала в Bluz Framework

Slide 20

Slide 20 text

Посетители

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Profit для меня LEVEL UP

Slide 27

Slide 27 text

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