31
Архитектура Справочного API 2ГИС Сергей Коржнев 2gis.ru @rnd2gis

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

  • Upload
    2-

  • View
    877

  • Download
    0

Embed Size (px)

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

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

Архитектура Справочного API 2ГИС

Сергей Коржнев

2gis.ru @rnd2gis

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

Справочное API 2ГИС

• Справочник организаций, доступный через REST API

• Возможности

• Поиск организаций, гео-объектов

• Расчет маршрутов проезда транспорта

• Посещаемость

• 16 млн. уникальных посетителей в месяц

• 1600 RPS

2

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

Три кита

1. Отказоустойчивая архитектура

2. Обновление данных в распределенной системе

3. Ускорение веб-приложения

3

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

Отказоустойчиваяархитектура

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

Геораспределенность

5

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

Отказоустойчивость дата-центра

6

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

Отказоустойчивость ноды

7

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

8

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

Результаты

• Готовы к выведению из строя отдельных компонент архитектуры

• Распределение нагрузки

• Удобное горизонтальное масштабирование

9

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

Обновление данных враспределеннойсистеме

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

Единый центр управления данных

• Данные готовятся в одном месте

• Затем «разливаются» по всем дата-центрам

• Минусы

• Задержки доставки данных

• Ограничение на ширину канала

• Плюс

• Простота

11

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

База данных

12

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

PostgreSQL 9.3

13

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

Поисковые индексы

14

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

Результаты

• Как временное простое решение — отлично работает

• Следите за трафиком

• Будущее за децентрализацией

15

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

Ускоряемвеб-приложение

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

1. Ускоряем PHP

• Тяжелые вычисления на C++

• Yii-фреймворк

• 4 мс на инициализацию

• ORM для чтения

• Компоненты и Lazy Loading

• fastcgi_finish_request()

• Отвечаем, как можно раньше

• Количество Php-fpm worker'ов

17

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

2. Кэширование

18

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

Redis

• В сравнение с Memcache:

• Векторные структуры данных

• Поиск ключей по маске

19

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

Хеши в Redis

• TTL на всю структуру сразу

• При превышении допустимой памяти грохается весь хеш

20

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

Поиск ключей по маске

• geo::1::*

• На «слейве»

• На «мастере» — крайне редко и осторожно

21

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

Shared memory

• Ограниченный набор данных небольшого размера

• PHP APC

22

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

Результаты

• Увеличивается быстродействие системы

• При этом система может жить без кэша

23

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

3. Realtime-мониторинг

24

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

Необходимость мониторинга

• Чем больше компонентов, тем чаще что-нибудь выходит из строя

• Чем раньше проблема обнаружится, тем быстрее мы ее исправим

25

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

Мониторинг времени работыметодов API

• Измеряем время работы метода

• Отправляем данные по UDP на сервис сбора статистки

• Отслеживаем данных в системе комплексного мониторинга

• Pinba и Zabbix

26

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

Анализ проблемпроизводительности

• Расставляем Pinba-таймеры

• Отслеживаем какие именно участки кода медленные

• Триггеры, UI

• Косвенно мониторим PostgreSQL, Redis, поисковые утилиты

• Отслеживаем медленный PHP-код на реальных данных

27

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

Мониторинг ошибок

• Перехватываем ошибку в PHP

• Отправляем ее на некоторый сервис по UDP

• Триггеры, UI

• Graylog2

28

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

Результаты

• Не замедляем работу приложения

• Используем Pinba, как показатель работы системы

• Не забываем про другие системные параметры мониторинга

29

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

Выводы

• Балансировка нагрузки

• между дата-центрами и нодами (LVS)

• внутри ноды (Nginx, PgPool2, TwemProxy)

• Мониторинг системы (Zabbix, Pinba, Graylog2)

• Оптимизация веб-приложения

• Весь хардкор в C++ (Apache Thrift)

• Легковесный фреймворк (Yii)

• Отвечаем, как можно раньше

30

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

Вопросы?

Сергей Коржнев

[email protected]

31