Архитектура Справочного API 2ГИССергей Коржнев
2gis.ru @rnd2gis
Справочное API 2ГИС• Справочник организаций, доступный через REST API
• Возможности
• Поиск организаций, гео-объектов
• Расчет маршрутов проезда транспорта
• Посещаемость
• 16 млн. уникальных посетителей в месяц
• 1600 RPS
2
Три кита1. Отказоустойчивая архитектура
2. Обновление данных в распределенной системе
3. Ускорение веб-приложения
3
Отказоустойчиваяархитектура
Геораспределенность
5
Отказоустойчивость дата-центра6
Отказоустойчивость ноды7
8
Результаты
• Готовы к выведению из строя отдельных компонент архитектуры
• Распределение нагрузки
• Удобное горизонтальное масштабирование
9
Обновление данных враспределеннойсистеме
Единый центр управления данных• Данные готовятся в одном месте
• Затем «разливаются» по всем дата-центрам
• Минусы
• Задержки доставки данных
• Ограничение на ширину канала
• Плюс
• Простота
11
База данных12
PostgreSQL 9.313
Результаты
• Как временное простое решение — отлично работает
• Следите за трафиком
• Будущее за децентрализацией
14
Поисковые индексы15
Ускоряемвеб-приложение
1. Ускоряем PHP• Тяжелые вычисления на C++
• Yii-фреймворк
• 4 мс на инициализацию
• ORM для чтения
• Компоненты и Lazy Loading
• fastcgi_finish_request()
• Отвечаем, как можно раньше
• Количество Php-fpm worker'ов
17
2. Кэширование
18
Redis
• В сравнение с Memcache:
• Векторные структуры данных
• Поиск ключей по маске
19
Хеши в Redis• TTL на всю структуру сразу
• При превышении допустимой памяти грохается весь хеш
20
Поиск ключей по маске• geo::1::*
• На «слейве»
• На «мастере» — крайне редко и осторожно
21
Shared memory• Ограниченный набор данных небольшого размера
• PHP APC
22
Результаты
• Увеличивается быстродействие системы
• При этом система может жить без кэша
23
3. Realtime-мониторинг
24
Необходимость мониторинга• Чем больше компонентов, тем чаще что-нибудь выходит из строя
• Чем раньше проблема обнаружится, тем быстрее мы ее исправим
25
Мониторинг времени работыметодов API
• Измеряем время работы метода
• Отправляем данные по UDP на сервис сбора статистки
• Отслеживаем данных в системе комплексного мониторинга
• Pinba и Zabbix
26
Анализ проблемпроизводительности
• Расставляем Pinba-таймеры
• Отслеживаем какие именно участки кода медленные
• Триггеры, UI
• Косвенно мониторим PostgreSQL, Redis, поисковые утилиты
• Отслеживаем медленный PHP-код на реальных данных
27
Мониторинг ошибок• Перехватываем ошибку в PHP
• Отправляем ее на некоторый сервис по UDP
• Триггеры, UI
• Graylog2
28
Результаты
• Не замедляем работу приложения
• Используем Pinba, как показатель работы системы
• Не забываем про другие системные параметры мониторинга
29
Выводы
• Балансировка нагрузки
• между дата-центрами и нодами (LVS)
• внутри ноды (Nginx, PgPool2, TwemProxy)
• Мониторинг системы (Zabbix, Pinba, Graylog2)
• Оптимизация веб-приложения
• Весь хардкор в C++ (Apache Trift)
• Легковесный фреймворк (Yii)
• Отвечаем, как можно раньше
30
Top Related