View
877
Download
0
Category
Preview:
DESCRIPTION
В своем докладе мы рассмотрим архитектуру сервиса и основные инфраструктурные процессы. Архитектура: 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 городах России, Падуе (Италия), нескольких городах в Украине и Казахстане.
Citation preview
Архитектура Справочного 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.3
13
Поисковые индексы
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 Thrift)
• Легковесный фреймворк (Yii)
• Отвечаем, как можно раньше
30
Вопросы?
Сергей Коржнев
s.korzhnev@2gis.ru
31
Recommended