В своем докладе мы рассмотрим архитектуру сервиса и основные инфраструктурные процессы.
Архитектура: Yii-фреймворк и компоненты, PgSQL, Sphinx, С++-демоны для многокритериального поиска.
Развертывание: серверы (Новосибирск, Москва, Амстердам), Phing, Chef.
Мониторинг: Zabbix API, Pinba + утилита профилирования методов API, Graylog.
Кеширование: Nginx + Lua, Redis, APC, шардинг кеша и инвалидация.
Также мы расскажем, как нам удаётся стабильно делать релизы каждый вторник и обновлять данные по всем городам каждый день. И многое другое…
Справочный API 2ГИС — крупнейший REST API в Рунете.
Более 300 партнёров, среди которых 2ГИС-Онлайн, Mail.ru, НГС, Е1.ru. Месячная аудитория — 14 млн.
Сервис предоставляет информацию об 1.3 млн. фирм и 1.8 млн. POI в 200 городах России, Падуе (Италия), нескольких городах в Украине и Казахстане.
2. 2
Справочное API 2ГИС
• Справочник организаций, доступный через REST API
• Возможности
• Поиск организаций, гео-объектов
• Расчет маршрутов проезда транспорта
• Посещаемость
• 16 млн. уникальных посетителей в месяц
• 1600 RPS
11. 11
Единый центр управления данных
• Данные готовятся в одном месте
• Затем «разливаются» по всем дата-центрам
• Минусы
• Задержки доставки данных
• Ограничение на ширину канала
• Плюс
• Простота
17. 17
1. Ускоряем PHP
• Тяжелые вычисления на C++
• Yii-фреймворк
• 4 мс на инициализацию
• ORM для чтения
• Компоненты и Lazy Loading
• fastcgi_finish_request()
• Отвечаем, как можно раньше
• Количество Php-fpm worker'ов
25. 25
Необходимость мониторинга
• Чем больше компонентов, тем чаще что-нибудь выходит из строя
• Чем раньше проблема обнаружится, тем быстрее мы ее исправим
26. 26
Мониторинг времени работы
методов API
• Измеряем время работы метода
• Отправляем данные по UDP на сервис сбора статистки
• Отслеживаем данных в системе комплексного мониторинга
• Pinba и Zabbix
27. 27
Анализ проблем
производительности
• Расставляем Pinba-таймеры
• Отслеживаем какие именно участки кода медленные
• Триггеры, UI
• Косвенно мониторим PostgreSQL, Redis, поисковые утилиты
• Отслеживаем медленный PHP-код на реальных данных
29. 29
Результаты
• Не замедляем работу приложения
• Используем Pinba, как показатель работы системы
• Не забываем про другие системные параметры мониторинга
30. 30
Выводы
• Балансировка нагрузки
• между дата-центрами и нодами (LVS)
• внутри ноды (Nginx, PgPool2, TwemProxy)
• Мониторинг системы (Zabbix, Pinba, Graylog2)
• Оптимизация веб-приложения
• Весь хардкор в C++ (Apache Thrift)
• Легковесный фреймворк (Yii)
• Отвечаем, как можно раньше