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

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
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015Alex Chistyakov
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.HappyDev-lite
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterpriseAlex Chistyakov
 
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"GeeksLab Odessa
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScriptOleg Podsechin
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on itPavel Kurochkin
 

What's hot (19)

On Docker
On DockerOn Docker
On Docker
 
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
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
 
Current State of Server Side JavaScript
Current State of Server Side JavaScriptCurrent State of Server Side JavaScript
Current State of Server Side JavaScript
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
Sama5d3: how to run linux on it
Sama5d3: how to run linux on itSama5d3: how to run linux on it
Sama5d3: how to run linux on it
 
Devconf15
Devconf15Devconf15
Devconf15
 

Viewers also liked

Пишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниПишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниendeveit
 
Аудитория мобильного интернета в Казахстане
Аудитория мобильного интернета в КазахстанеАудитория мобильного интернета в Казахстане
Аудитория мобильного интернета в КазахстанеVladimir Merkushev
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложенийYandex
 
7 советов девелоперу. Ощепков О.Е., OZON Group.
7 советов девелоперу. Ощепков О.Е., OZON Group.7 советов девелоперу. Ощепков О.Е., OZON Group.
7 советов девелоперу. Ощепков О.Е., OZON Group.metrosphera
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...IT-Portfolio
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
ITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd Almaty
 
Александр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkАлександр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkOleg Poludnenko
 

Viewers also liked (9)

Пишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниПишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камни
 
Аудитория мобильного интернета в Казахстане
Аудитория мобильного интернета в КазахстанеАудитория мобильного интернета в Казахстане
Аудитория мобильного интернета в Казахстане
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений
 
Kolesa
KolesaKolesa
Kolesa
 
7 советов девелоперу. Ощепков О.Е., OZON Group.
7 советов девелоперу. Ощепков О.Е., OZON Group.7 советов девелоперу. Ощепков О.Е., OZON Group.
7 советов девелоперу. Ощепков О.Е., OZON Group.
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
ITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в командеITCrowd 2 - Разработка крупного проекта в команде
ITCrowd 2 - Разработка крупного проекта в команде
 
Александр Трищенко: Phalcon framework
Александр Трищенко: Phalcon frameworkАлександр Трищенко: Phalcon framework
Александр Трищенко: Phalcon framework
 

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

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
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
 

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"
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
 

Разработка 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 Конец