SlideShare a Scribd company logo
1 of 23
Download to read offline
Александр Кошелев, PyCon Russia 2017
Ещё один поиск
Яндекса
Общее описание
Ещё один поиск Яндекса
Поиск по Интранету
› Десятки сервисов – Вики, Трекер, Код и т.п.
› Сотни миллионов документов
Поиск по сервисам внутри Яндекс Коннект
› Тысячи организаций
Продукты
〉Python 2
〉Django, Tornado, Gunicorn
〉Celery
〉PostgreSQL, MongoDB, Redis
〉Docker
Технологии
Архитектура
APIAdmin
Abovemeta
Celery
Frontend
PostgreSQL MongoDB
MapReduce
SearchBack
Инфраструктура
индексации
Ещё один поиск Яндекса
〉Два брокера
› MongoDB – глобальные распределенные
очереди
› Redis – локальные очереди на одной машине
〉Отдельные ноды и очереди для каждой стадии
Celery
Конвейер индексации
setup walk fetch create store
Индексатор
class Source(BaseIndexer):
def do_setup(self):
for user in users:
self.next('walk', user=user)
def do_walk(self, user):
for opponent in get_user_opponents(user):
self.next('fetch', user=user, opponent=opponent)
def do_fetch(self, user, opponent):
for messages in get_messages(user, opponent):
self.next('create', message=message)
def do_create(self, message):
doc = self.create_document(...)
doc.emit_snippet(...)
doc.emit_body(...)
doc.emit_facet_attr('date', ...)
doc.emit_search_attr('author', ...)
self.next('store', document=doc, body_format='json')
Инфраструктура
поиска
Ещё один поиск Яндекса
Tornado
› Асинхронный поход в API
› Простая агрегация данных
Django
› Удобное окружение
› ORM
› REST API
Почему Django и Tornado
Схема Abovemeta
Обработказапроса
Базовый степ
class Step(object):
def get_future(self, state, requester):
""" Переопределяется в наследниках,
возвращает таску с основной
логикой степа. Не переопределяется для тех,
у кого нет хождений по http """
moment = gen.Future()
moment.set_result(None)
return moment
@gen.coroutine
def execute(self, state, requester):
""" Метод который запускает выполнение таски
из self.get_future """
if not state.errors:
res = yield self.get_future(state, requester)
self.process_response(state, res)
def process_response(self, state, response):
""" Переопределяется в наследниках.
По умолчанию не делает ничего """
pass
ParallelStep
class ParallelStep(CompoundStep):
@gen.coroutine
def execute(self, state, requester):
steps = self.get_steps(state)
if not state.errors and steps:
responses = yield [step.get_future(state, requester)
for step in steps]
for response, step in zip(responses, steps):
step.process_response(state, response)
self.process_response(state, responses)
ChainStep
class ChainStep(CompoundStep):
@gen.coroutine
def execute(self, state, requester):
data = []
steps = self.get_steps(state)
for step in steps:
if state.errors:
break
response = yield step.get_future(state, requester)
data.append(response)
step.process_response(state, response)
self.process_response(state, data)
Использование
class IntraSearchHandler(BaseSearchHandler):
def create_steps(self):
return steps.ChainStep([
steps.AuthStep(),
steps.ParallelStep([
steps.FormulasStep(),
steps.ExternalWizardStep(),
steps.ErrataStep(),
]),
steps.ParallelStep([
steps.FeaturesStep(),
steps.RevisionsStep(),
]),
steps.DeciderStep(),
steps.FullSearchStep(),
steps.ParallelStep([
steps.FacetsStep(),
steps.FullGroupAttrs(),
]),
])
Деплой
Ещё один поиск Яндекса
〉Все компоненты в одном образе
〉У компонента свой набор процессов
〉Контроль процессов с помощью supervisord
〉Для разработки docker-compose
Docker
Александр Кошелев
alexkoshelev@yandex-team.ru
Спасибо!
@alexkoshelev

More Related Content

What's hot

Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...Ontico
 
Настоящее и будущее рекомендательных систем. Михаил Ройзнер
 Настоящее и будущее рекомендательных систем. Михаил Ройзнер Настоящее и будущее рекомендательных систем. Михаил Ройзнер
Настоящее и будущее рекомендательных систем. Михаил РойзнерYandex
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDBVadim Tsesko
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?Alexey Tokar
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)Ontico
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанкуNikolay Sivko
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Ontico
 
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Ontico
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминHOWWEDOIT
 

What's hot (20)

Dapper + QueryObject
Dapper + QueryObjectDapper + QueryObject
Dapper + QueryObject
 
Кратко о MongoDB
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDB
 
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
 
Настоящее и будущее рекомендательных систем. Михаил Ройзнер
 Настоящее и будущее рекомендательных систем. Михаил Ройзнер Настоящее и будущее рекомендательных систем. Михаил Ройзнер
Настоящее и будущее рекомендательных систем. Михаил Ройзнер
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Elasticsearch(java) fluentd(ruby) kibana(javascript)
Elasticsearch(java)fluentd(ruby) kibana(javascript)Elasticsearch(java)fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentd(ruby) kibana(javascript)
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Анализируем данные с Clickhouse
Анализируем данные с  ClickhouseАнализируем данные с  Clickhouse
Анализируем данные с Clickhouse
 
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
Архитектура хранилища бинарных данных на Одноклассниках (Александр Христофоро...
 
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий КузьминClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
ClickHouse как решение для бизнес аналитики. Дмитрий Кузьмин
 

Similar to Ещё один поиск Яндекса

Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)AvitoTech
 
Yandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYelena Jetpyspayeva
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...Yandex
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized WebYandex
 
Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.MageCloud
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Tanya Denisyuk
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
State of the Standardized Web. YaC 2014
State of theStandardized Web. YaC 2014State of theStandardized Web. YaC 2014
State of the Standardized Web. YaC 2014Yandex
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Webmaster tools in Yandex 2011 (Kazan, Kharkov), Mikhail Senin, Alex Shubin
Webmaster tools in Yandex 2011 (Kazan, Kharkov),  Mikhail Senin, Alex ShubinWebmaster tools in Yandex 2011 (Kazan, Kharkov),  Mikhail Senin, Alex Shubin
Webmaster tools in Yandex 2011 (Kazan, Kharkov), Mikhail Senin, Alex ShubinAlex Shubin
 
Docker и оркетсрация контейнеров в облаке Azure
Docker и оркетсрация контейнеров в облаке AzureDocker и оркетсрация контейнеров в облаке Azure
Docker и оркетсрация контейнеров в облаке AzureStas Pavlov
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...Yandex
 
Владислав Моргун
Владислав МоргунВладислав Моргун
Владислав МоргунSEO.UA
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Vladislav Morgun
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 

Similar to Ещё один поиск Яндекса (20)

Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
Yandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutions
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized Web
 
Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.Sphinx + MongoDB: работаем вместе.
Sphinx + MongoDB: работаем вместе.
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
State of the Standardized Web. YaC 2014
State of theStandardized Web. YaC 2014State of theStandardized Web. YaC 2014
State of the Standardized Web. YaC 2014
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Webmaster tools in Yandex 2011 (Kazan, Kharkov), Mikhail Senin, Alex Shubin
Webmaster tools in Yandex 2011 (Kazan, Kharkov),  Mikhail Senin, Alex ShubinWebmaster tools in Yandex 2011 (Kazan, Kharkov),  Mikhail Senin, Alex Shubin
Webmaster tools in Yandex 2011 (Kazan, Kharkov), Mikhail Senin, Alex Shubin
 
Docker и оркетсрация контейнеров в облаке Azure
Docker и оркетсрация контейнеров в облаке AzureDocker и оркетсрация контейнеров в облаке Azure
Docker и оркетсрация контейнеров в облаке Azure
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...
Архитектура высоконагруженного сервиса на примере бэкенда Яндекс.Store — Андр...
 
Владислав Моргун
Владислав МоргунВладислав Моргун
Владислав Моргун
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
Автоматизация SEO-процессов в продуктовых компаниях - DVOMA.pro 30.08
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 

Ещё один поиск Яндекса