4. Поиск по Интранету
› Десятки сервисов – Вики, Трекер, Код и т.п.
› Сотни миллионов документов
Поиск по сервисам внутри Яндекс Коннект
› Тысячи организаций
Продукты
9. 〉Два брокера
› MongoDB – глобальные распределенные
очереди
› Redis – локальные очереди на одной машине
〉Отдельные ноды и очереди для каждой стадии
Celery
16. Базовый степ
class Step(object):
def get_future(self, state, requester):
""" Переопределяется в наследниках,
возвращает таску с основной
логикой степа. Не переопределяется для тех,
у кого нет хождений по http """
moment = gen.Future()
moment.set_result(None)
return moment
17. @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
18. 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)
19. 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)