SlideShare a Scribd company logo
1 of 30
Download to read offline
Как делать classified'ы?

Легко! *
*Если у вас есть API ;)
Кто здесь и зачем?
● Никита, один из ведущих разработчиков в «Колёсах»
● В данный момент отвечаю за разработку market.kz, API и

по чуть-чуть за kolesa.kz и krisha.kz
● Знаю много страшных слов и программирую на кучке разных

языков программирования
Расскажу:
● Что было в 2010-2011
● Что есть сейчас
● Что будет завтра
Экскурс в историю
Колёса 2010
Экскурс в историю
Крыша 2010
Технологии
А что под капотом?
А что под капотом?
Технологии
Окружение 2010-2012
● PHP 5.2
● MySQL 4.x
● GlusterFS
● 100500 XML-файлов на сетевой файловой системе
● И еще больше фотографий там же
● Поиск через sphinxsearch исключительно в live
Технологии
Разработка 2010-2012
● Пилим фичу для колес
● Если все получилось, Ctrl+C / Ctrl+V на крышу с
«небольшими» изменениями
● Вечерами плачем из-за медленной сетевой FS
● Круглые сутки ревем навзрыд из-за отсутствия надежности
● Из-за угла маячат мобильные приложения
Технологии
Так жить нельзя!
Viva la revolución
Придумываем API
● API един для всех сайтов
● HTTP — это доступно, просто и легко, даже Tcl из «коробки»
умеет делать HTTP-запросы
● Отдавать все будем в JSON
● Не RESTFul!
● Весь функционал сайта повторять не нужно
● «Драйверы» для хранилищ
API
Драйвер? О чем ты?
● Реализует единые интерфейсы для всех сайтов
● Знает, что такое категории, параметры, пользователи и
объявления
● Умеет со всем этим работать (CRUD)
● Реализует специфичные для каждого сайта штуки
● Можно наследовать от других драйверов
API. Драйверы
Тот самый первый драйвер
● Пишет и читает данные объявлений из XML-файлов на
GlusterFS
● Сохраняет фотографии в GlusterFS
● Знает что и где лежит в MySQL (комментарии, пользователи,
антиспам, etc)
● Есть «печенька» — поиск по всем объявлениям через Solr
API. Драйверы
Прекращаем писать данные
объявлений напрямую в XML
API. Переезд
Перестаем дергать GlusterFS при
загрузке фотографий
API. Переезд
Учим сайт искать объявления не в
sphinx'е, а через API
API. Переезд
Сначала фотографии
● Жесткие диски сыпятся
● Писать свое надежное и реплицируемое файловое
хранилище в blob'ах — затратно (мы пока еще не facebook)
API. Надежность
У нас есть механизм драйверов и мы можем прозрачно для
клиентов делать, что хотим.
И где хранить эту кучу файлов?
API. Надежность
OpenStack Swift
● Не сетевая ФС
● Хранилище объектов
● Каждый объект реплицируется минимум на 3 ноды в двух
разных датацентрах
● Медленный :(
● Но у нас есть прокси и куча кэшей! :)
API. Надежность
А дальше по накатанной:
● Пишем новый драйвер и прозрачно уносим объявления из
XML в MongoDB
● Отдаем API партнерам (Smart TV, виджеты на других сайтах)
● Запускаем мобильные приложения
● Пишем драйвер, который все так же прозрачно
«объединяет» личные кабинеты пользователей на сайтах
● Запускаем market.kz
● Переезжаем на elasticsearch
API. Надежность
Софт
● Для кода — PHP 5.4
● Для мета-информации — Percona Server 5.5
● Для объявлений — MongoDB 2.4
● Для фотографий — OpenStack Swift
● Для поиска — Elasticsearch 1.3 и немножко Solr
● Для логов — Graylog2
● Для очередей — beanstalkd
● Для кешей — Redis
● Для анализа производительности — BTP (и клиент к нему)
API. Сегодня
BTP daemon
API. Сегодня
BTP
daemon
API. Сегодня
Грабли MongoDB
● Работаете из PHP? Сразу запускайте mongos
● Впрочем, когда не из PHP, тоже запускайте
● Не используйте точки в именах полей, иначе можно
попрощаться с версией 2.6
● Не используйте map/reduce или aggregation framework на
серверах в продакшене
● Стабильная работа replicaSet'а в двух датацентрах — миф,
%username%
● Типы данных — это важно
API. Сегодня
Грабли OpenStack Swift
● Репликация медленная
● Запись тоже не блещет скоростью, так что проксируем все
через брокер очередей и быстрое хранилище (у нас
beanstalkd+redis)
● Чем меньше нод, тем ниже производительность
API. Сегодня
Цифры
● 3 MongoDB и 26M объектов объявлений в них
● 330М объектов фотографий, занимающих 25TB в OSS (75TB
с учетом реплик)
● 85-195 запросов в секунду от мобильных приложений
● 550-1000 запросов в секунду от сайтов
● 82/164 Мбит/сек трафика
● 8 нод эластика на колесах и 1 на маркете, на крыше все еще
Solr
● 20 серверов redis'а для разных кэшей
API. Сегодня
Что будет завтра?
На самом деле, никто не знает, но попробуем погадать:
● Повышение надежности (может быть и отказ от MongoDB)
● Гео-рапределенность
● Ускорение кода, переезд на HHVM
● Разработка новых интересных фич
API. Завтра
Вопросы?
Никита Вершинин
Ведущий разработчик ТОО «Колёса»
Email: endeveit@gmail.com
Skype: endeveit
Конец
Спасибо!

More Related Content

What's hot

Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.PVasili
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConAlex Chistyakov
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovdrupalconf
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQLAlex Chistyakov
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsAlex Chistyakov
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest
 
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)Ontico
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Vladimir Malyk
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр КолесеньIT Share
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...Ontico
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...Ontico
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Vladimir Malyk
 

What's hot (20)

Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.Инструментарий начинающего разработчика Drupal.
Инструментарий начинающего разработчика Drupal.
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
 
Kolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosovKolosov drupalconf2011 2_kolosov
Kolosov drupalconf2011 2_kolosov
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQL
 
On Docker
On DockerOn Docker
On Docker
 
Salt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systemsSalt and Ansible - Python-based CM systems
Salt and Ansible - Python-based CM systems
 
CodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали ГрупонCodeFest 2012. Евтухович И. — Как мы делали Групон
CodeFest 2012. Евтухович И. — Как мы делали Групон
 
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
Мониторинг быстродействия web-проекта / Владимир Буянов (Ultimate Guitar)
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
openSUSE Build Server от Б до Ю
openSUSE Build Server от Б до ЮopenSUSE Build Server от Б до Ю
openSUSE Build Server от Б до Ю
 
«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень«​Масштабируемый DevOps​» Александр Колесень
«​Масштабируемый DevOps​» Александр Колесень
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
От репозитория до CI/CD-инфраструктуры в продакшне за неделю / Дмитрий Чумак ...
 
Using Ansible
Using AnsibleUsing Ansible
Using Ansible
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 

Viewers also liked

Web Performance в Казнете
Web Performance в КазнетеWeb Performance в Казнете
Web Performance в КазнетеITCrowd Almaty
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработкеITCrowd Almaty
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Мобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахМобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахITCrowd Almaty
 
Ключ от всех дверей: чем опасен Великий Казахстанский Файерволл
Ключ от всех дверей: чем опасен Великий Казахстанский ФайерволлКлюч от всех дверей: чем опасен Великий Казахстанский Файерволл
Ключ от всех дверей: чем опасен Великий Казахстанский ФайерволлITCrowd Almaty
 
ITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd Almaty
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используютITCrowd Almaty
 
Чем бесят программисты
Чем бесят программистыЧем бесят программисты
Чем бесят программистыITCrowd Almaty
 
Александр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkАлександр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkOleg Poludnenko
 

Viewers also liked (11)

Web Performance в Казнете
Web Performance в КазнетеWeb Performance в Казнете
Web Performance в Казнете
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
На плаву!
На плаву!На плаву!
На плаву!
 
React + Flux
React + FluxReact + Flux
React + Flux
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Мобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещахМобильность на Колёсах: об инструментах и полезных вещах
Мобильность на Колёсах: об инструментах и полезных вещах
 
Ключ от всех дверей: чем опасен Великий Казахстанский Файерволл
Ключ от всех дверей: чем опасен Великий Казахстанский ФайерволлКлюч от всех дверей: чем опасен Великий Казахстанский Файерволл
Ключ от всех дверей: чем опасен Великий Казахстанский Файерволл
 
ITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в команде
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
Чем бесят программисты
Чем бесят программистыЧем бесят программисты
Чем бесят программисты
 
Александр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkАлександр Трищенко: Phalcon framework
Александр Трищенко: Phalcon framework
 

Similar to Разработка API для большого, нагруженного сервиса

Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentialsPavlo Iuriichuk
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Mail.ru Group
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLDmitry Kremer
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HRKonstantin Osipov
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP Анна Магас
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...it-people
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighLoad2009
 
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...DevGAMM Conference
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesWhite Nights Conference
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...Vyacheslav Nikulin
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Ontico
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Yury Bushmelev
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
 

Similar to Разработка API для большого, нагруженного сервиса (20)

Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Mobile Web Apps development essentials
Mobile Web Apps development essentialsMobile Web Apps development essentials
Mobile Web Apps development essentials
 
Sivko
SivkoSivko
Sivko
 
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
 
Перевод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQLПеревод новостного приложения на БД PostgreSQL
Перевод новостного приложения на БД PostgreSQL
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Говорим о СУБД языком HR
Говорим о СУБД языком HRГоворим о СУБД языком HR
Говорим о СУБД языком HR
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP                PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
 
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...
CI/CD в Playrix: Как собирать тысячи билдов в день для разных платформ / Юрий...
 
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic GamesAlexey Savchenko, Evangelist, Unreal Engine/ Epic Games
Alexey Savchenko, Evangelist, Unreal Engine/ Epic Games
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
кри 2014 elastic search рациональный подход к созданию собственной системы а...
кри 2014 elastic search  рациональный подход к созданию собственной системы а...кри 2014 elastic search  рациональный подход к созданию собственной системы а...
кри 2014 elastic search рациональный подход к созданию собственной системы а...
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
 
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
 

More from ITCrowd Almaty

Система управления конфигурациями Ansible
Система управления конфигурациями AnsibleСистема управления конфигурациями Ansible
Система управления конфигурациями AnsibleITCrowd Almaty
 
Система мониторинга Zabbix
Система мониторинга ZabbixСистема мониторинга Zabbix
Система мониторинга ZabbixITCrowd Almaty
 
Designer ≠ дизайнер
Designer ≠ дизайнерDesigner ≠ дизайнер
Designer ≠ дизайнерITCrowd Almaty
 
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основе
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основеITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основе
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основеITCrowd Almaty
 
ITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd Almaty
 
ITCrowd - Потенциал казахоязычной аудитории РК
ITCrowd - Потенциал казахоязычной аудитории РКITCrowd - Потенциал казахоязычной аудитории РК
ITCrowd - Потенциал казахоязычной аудитории РКITCrowd Almaty
 
ITCrowd - Почему и как я стал фрилансером?
ITCrowd - Почему и как я стал фрилансером?ITCrowd - Почему и как я стал фрилансером?
ITCrowd - Почему и как я стал фрилансером?ITCrowd Almaty
 
ITCrowd - Правильная структура лендинга
ITCrowd - Правильная структура лендингаITCrowd - Правильная структура лендинга
ITCrowd - Правильная структура лендингаITCrowd Almaty
 

More from ITCrowd Almaty (10)

Система управления конфигурациями Ansible
Система управления конфигурациями AnsibleСистема управления конфигурациями Ansible
Система управления конфигурациями Ansible
 
Система мониторинга Zabbix
Система мониторинга ZabbixСистема мониторинга Zabbix
Система мониторинга Zabbix
 
WatchKit 101
WatchKit 101WatchKit 101
WatchKit 101
 
AngularJS
AngularJSAngularJS
AngularJS
 
Designer ≠ дизайнер
Designer ≠ дизайнерDesigner ≠ дизайнер
Designer ≠ дизайнер
 
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основе
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основеITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основе
ITCrowd 2 - Обзор существующих стандартов разметки и продуктов на ее основе
 
ITCrowd - Метапрограммирование
ITCrowd - МетапрограммированиеITCrowd - Метапрограммирование
ITCrowd - Метапрограммирование
 
ITCrowd - Потенциал казахоязычной аудитории РК
ITCrowd - Потенциал казахоязычной аудитории РКITCrowd - Потенциал казахоязычной аудитории РК
ITCrowd - Потенциал казахоязычной аудитории РК
 
ITCrowd - Почему и как я стал фрилансером?
ITCrowd - Почему и как я стал фрилансером?ITCrowd - Почему и как я стал фрилансером?
ITCrowd - Почему и как я стал фрилансером?
 
ITCrowd - Правильная структура лендинга
ITCrowd - Правильная структура лендингаITCrowd - Правильная структура лендинга
ITCrowd - Правильная структура лендинга
 

Разработка API для большого, нагруженного сервиса

  • 1. Как делать classified'ы?
 Легко! * *Если у вас есть API ;)
  • 2. Кто здесь и зачем? ● Никита, один из ведущих разработчиков в «Колёсах» ● В данный момент отвечаю за разработку market.kz, API и
 по чуть-чуть за kolesa.kz и krisha.kz ● Знаю много страшных слов и программирую на кучке разных
 языков программирования Расскажу: ● Что было в 2010-2011 ● Что есть сейчас ● Что будет завтра
  • 6. А что под капотом? Технологии
  • 7. Окружение 2010-2012 ● PHP 5.2 ● MySQL 4.x ● GlusterFS ● 100500 XML-файлов на сетевой файловой системе ● И еще больше фотографий там же ● Поиск через sphinxsearch исключительно в live Технологии
  • 8. Разработка 2010-2012 ● Пилим фичу для колес ● Если все получилось, Ctrl+C / Ctrl+V на крышу с «небольшими» изменениями ● Вечерами плачем из-за медленной сетевой FS ● Круглые сутки ревем навзрыд из-за отсутствия надежности ● Из-за угла маячат мобильные приложения Технологии
  • 9.
  • 11. Придумываем API ● API един для всех сайтов ● HTTP — это доступно, просто и легко, даже Tcl из «коробки» умеет делать HTTP-запросы ● Отдавать все будем в JSON ● Не RESTFul! ● Весь функционал сайта повторять не нужно ● «Драйверы» для хранилищ API
  • 12. Драйвер? О чем ты? ● Реализует единые интерфейсы для всех сайтов ● Знает, что такое категории, параметры, пользователи и объявления ● Умеет со всем этим работать (CRUD) ● Реализует специфичные для каждого сайта штуки ● Можно наследовать от других драйверов API. Драйверы
  • 13. Тот самый первый драйвер ● Пишет и читает данные объявлений из XML-файлов на GlusterFS ● Сохраняет фотографии в GlusterFS ● Знает что и где лежит в MySQL (комментарии, пользователи, антиспам, etc) ● Есть «печенька» — поиск по всем объявлениям через Solr API. Драйверы
  • 14. Прекращаем писать данные объявлений напрямую в XML API. Переезд
  • 15. Перестаем дергать GlusterFS при загрузке фотографий API. Переезд
  • 16. Учим сайт искать объявления не в sphinx'е, а через API API. Переезд
  • 17.
  • 18. Сначала фотографии ● Жесткие диски сыпятся ● Писать свое надежное и реплицируемое файловое хранилище в blob'ах — затратно (мы пока еще не facebook) API. Надежность У нас есть механизм драйверов и мы можем прозрачно для клиентов делать, что хотим. И где хранить эту кучу файлов?
  • 20. OpenStack Swift ● Не сетевая ФС ● Хранилище объектов ● Каждый объект реплицируется минимум на 3 ноды в двух разных датацентрах ● Медленный :( ● Но у нас есть прокси и куча кэшей! :) API. Надежность
  • 21. А дальше по накатанной: ● Пишем новый драйвер и прозрачно уносим объявления из XML в MongoDB ● Отдаем API партнерам (Smart TV, виджеты на других сайтах) ● Запускаем мобильные приложения ● Пишем драйвер, который все так же прозрачно «объединяет» личные кабинеты пользователей на сайтах ● Запускаем market.kz ● Переезжаем на elasticsearch API. Надежность
  • 22. Софт ● Для кода — PHP 5.4 ● Для мета-информации — Percona Server 5.5 ● Для объявлений — MongoDB 2.4 ● Для фотографий — OpenStack Swift ● Для поиска — Elasticsearch 1.3 и немножко Solr ● Для логов — Graylog2 ● Для очередей — beanstalkd ● Для кешей — Redis ● Для анализа производительности — BTP (и клиент к нему) API. Сегодня
  • 25. Грабли MongoDB ● Работаете из PHP? Сразу запускайте mongos ● Впрочем, когда не из PHP, тоже запускайте ● Не используйте точки в именах полей, иначе можно попрощаться с версией 2.6 ● Не используйте map/reduce или aggregation framework на серверах в продакшене ● Стабильная работа replicaSet'а в двух датацентрах — миф, %username% ● Типы данных — это важно API. Сегодня
  • 26. Грабли OpenStack Swift ● Репликация медленная ● Запись тоже не блещет скоростью, так что проксируем все через брокер очередей и быстрое хранилище (у нас beanstalkd+redis) ● Чем меньше нод, тем ниже производительность API. Сегодня
  • 27. Цифры ● 3 MongoDB и 26M объектов объявлений в них ● 330М объектов фотографий, занимающих 25TB в OSS (75TB с учетом реплик) ● 85-195 запросов в секунду от мобильных приложений ● 550-1000 запросов в секунду от сайтов ● 82/164 Мбит/сек трафика ● 8 нод эластика на колесах и 1 на маркете, на крыше все еще Solr ● 20 серверов redis'а для разных кэшей API. Сегодня
  • 28. Что будет завтра? На самом деле, никто не знает, но попробуем погадать: ● Повышение надежности (может быть и отказ от MongoDB) ● Гео-рапределенность ● Ускорение кода, переезд на HHVM ● Разработка новых интересных фич API. Завтра
  • 29. Вопросы? Никита Вершинин Ведущий разработчик ТОО «Колёса» Email: endeveit@gmail.com Skype: endeveit Конец