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