«Архитектура Справочного API 2ГИС» — Сергей Коржнев,...

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