задачу, обратную задаче паттерна Copier, — объединяет две оче-реди в одну общую. Допустим, в вашем проекте много разных репозиториев исходного кода, коммиты в которые происходят одновременно. Вы хотите выполнить тестирование и сборку каж-
дого из них. Создавать отдельную инфраструктуру для сборки репозитория — плохо масштабируемое решение. Каждый из ре-позиториев можно смоделировать в виде очереди задач, служащей источником задач-коммитов. Все эти источники задач можно объединить в один интегрированный источник с помощью адап-тера-объединителя. Такой объединенный поток коммитов служит единственным источником задач для системы сборки, выступаю-щей исполнителем. Контейнер-объединитель является частным случаем реализации паттерна Adapter. Такой адаптер преобразует потоки задач от нескольких контейнеров-источников в общий по-ток задач. Схема паттерна Multi-Adapter приведена на рис. 11.7. 198Часть III. Паттерны проектирования систем пакетных вычислений
Рис. 11.7. Использование нескольких уровней контейнеровдля объединения нескольких очередей задач в одну общую
Практикум. Создание событийно-ориентированного потока задач для регистрации нового пользователя Пример конкретного потока задач позволяет показать, как эти паттерны можно объединить для получения полноценной рабо-чей системы. В данном примере рассматривается задача реги-страции нового пользователя.
Глава 11. Событийно-ориентированная пакетная обработка 199Представьте, что наша «воронка» получения пользователей работает в два этапа. Первый — верификация. После реги-страции в сервисе пользователь получает уведомление, по-зволяющее подтвердить его адрес электронной почты. После одобрения адреса пользователь получает письмо, подтвер-ждающее его членство. Затем его по желанию подписывают на почтовую и/или СМС-рассылку.
Первый шаг в событийно-ориентированном потоке задач — от-правка проверочного письма. Чтобы обеспечить его надежную реализацию, нужно сопоставить потенциальных пользователей одной из географических зон. Это позволит продолжать прини-
мать новых пользователей даже в условиях частичного отказа подсистемы регистрации. Каждый шард отправляет конечным пользователям проверочные письма. Первый этап потока за-вершен. Схема первого этапа приводится на рис. 11.8.
Рис. 11.8. Первый этап потока задач по регистрации нового пользователяПоток возобновляется при получении подтверждения от поль-зователя. Оно становится событием в отдельном (но связанном) потоке задач, который отправляет подтверждения и настраивает уведомления. Первый его этап служит примером реализации 200Часть III. Паттерны проектирования систем пакетных вычислений паттерна Copier, распределяющего пользователей в две очере-ди. Первая очередь задач отвечает за отправку приветственных электронных писем, а вторая — за настройку уведомлений. Как только задачи были распределены в две очереди, очередь на от-правку письма отправляет сообщение, и на этом данная ветвь пото-ка завершается. Но за счет использования паттерна Copier активна еще одна ветвь потока задач. Она связана с обработкой настроек уведомлений. Данная очередь задач относится к контейнеру-филь-тру, который делит ее на очереди подписки на почтовые и СМС-уведомления. Соответствующие очереди задач подписывают поль-зователей на уведомления по электронной почте и/или СМС. Оставшаяся часть потока задач приводится на рис. 11.9.
Читать дальше