Пример использования паттерна Splitter для рассылки уведом-лений о доставке приведен на рис. 11.4.
Паттерн Sharder
Паттерн Sharder — несколько более общая форма паттерна Splitter. Задача шардера потока задач, во многом как и шар-дирующего сервера, рассмотренного несколькими главами ранее, — разделить очередь задач на несколько равных частей с помощью некоторой шардирующей функции. Необходимость в шардировании потока задач может возникнуть по нескольким причинам. Одна из основных — повышение надежности. При шардировании очереди задач отказ одного из потоков задач из-за неудачного обновления, отказа инфраструктуры или по любой другой причине повлияет лишь на часть пользователей вашего сервиса.
Глава 11. Событийно-ориентированная пакетная обработка 195
Рис. 11.4. Пример реализации паттерна пакетной обработки Splitterдля рассылки уведомлений о доставке посредством двух очередей задач Представьте, к примеру, что вы неудачно обновили контей-нер-исполнитель, в результате чего все его экземпляры отка-зали и очередь задач перестала обрабатываться. Если задачи обрабатываются только одной очередью, то сервис окажется полностью недоступным для всех пользователей. Если бы вы шардировали очередь на четыре части, то у вас была бы воз-можность организовать поэтапное развертывание контейнера-исполнителя. Предположим, вы обнаруживаете отказ на первом этапе развертывания. При шардировании на четыре части отказ
повлияет только на четверть пользователей вашего сервиса. Еще один довод в пользу шардирования — более равномерное распределение нагрузки на вычислительные ресурсы. Если вам не особенно важно, за обработку каких задач будет отвечать конкретный центр обработки данных (ЦОД), шардером можно воспользоваться для распределения задач между несколькими ЦОД, чтобы выровнять нагрузку серверов в них. Что касается 196Часть III. Паттерны проектирования систем пакетных вычислений обновлений, распределение очереди задач между несколькими точками отказа повышает надежность, позволяя избежать от-каза всех серверов в конкретном ЦОД или целом регионе. Шардированная очередь, работающая в штатном режиме, по-казана на рис. 11.5.
Рис. 11.5. Пример реализации шардированной очереди, работающейв штатном режиме
Если в силу отказов количество рабочих шардов уменьшилось, алгоритм шардирования динамически перестраивается на рас-пределение работы только между рабочими шардами, даже если осталась только одна очередь задач. Это показано на рис. 11.6. Паттерн Merger
Последним среди паттернов событийно-ориентированных систем пакетной обработки рассмотрим паттерн Merger. Он выполняет Глава 11. Событийно-ориентированная пакетная обработка 197
Рис. 11.6. При отказе одной из очередей задач оставшиеся переходятв другую очередь
Читать дальше