Читать «Распределенные системы. Паттерны проектирования» онлайн - страница 94

Б Бёрнс

Практикум. Конвейерная разметка и обработка изображений

Чтобы понять, как координированная пакетная обработка мо-жет  быть  использована  для  выполнения  сложных  пакетных  задач,  рассмотрим  задачу  разметки  и  обработки  наборов  изо-бражений.  Предположим,  есть  большой  набор  фотографий  Глава 12. Координированная пакетная обработка 213 шоссе  в  час  пик.  Нужно  посчитать  количество  автомобилей,  грузовиков и мотоциклов, а также статистическое распределе-ние цветов машин. Допустим также, что в целях анонимизации  предварительно выполняется размытие изображений номерных  знаков.

Фотографии предоставляются в виде последовательности URL-адресов HTTPS, каждый из которых указывает на необработан-ное изображение. Первый этап конвейера — нахождение и раз-мытие номерных знаков. Чтобы упростить задания в очередях,  введем двух исполнителей. Один будет обнаруживать номерной  знак,  а  другой  —  размывать  соответствующую  область  изо-бражения. Объединим эти два контейнера-исполнителя в одну  группу,  как  показано  в  главе  10  при  рассмотрении  паттерна  Multi-Worker.  Такое  распределение  обязанностей  на  первый  взгляд  может  показаться  избыточным. Его  польза  в  том,  что  контейнер-исполнитель для размытия фрагментов изображений  можно использовать повторно, например для размытия лиц на  фотографиях.

Кроме того, для повышения надежности и максимизации па-раллелизма  будем  шардировать  изображения  на  несколько  очередей.  Полная  схема  потока  задач  по  размытию  участков  изображений  с  применением  шардирования  приведена  на  рис. 12.3.

После  размытия  номерных  знаков  на  всех  изображениях  ре-зультат загрузим в другое место, а исходные изображения уда-лим.  Оригиналы  не  следует  удалять  до  тех  пор,  пока  не  будут  обработаны  все   изображения.  Они  понадобятся  на  случай  ка-тастрофического  сбоя,  если  придется  заново  перезапустить  процесс  обработки.  Для  того  чтобы  дождаться  обработки  всех  изображений,  воспользуемся  паттерном  Join,  рассмотренным  в  предыдущей  главе.  С  его  помощью  мы  объединим  шардиро-ванные очереди задач в одну общую очередь, которая освободит  214 Часть III. Паттерны проектирования систем пакетных вычислений

Рис. 12.3. Шардированная очередь с несколькими шардами для размытия изображения

элементы для дальнейшей обработки только после того, как все  шарды завершат работу.

Теперь можно удалить оригиналы и начать распознавание ма-рок  и  цветов  машин.  Пропускную  способность  данного  кон-вейера также хотелось бы максимизировать, поэтому восполь-зуемся паттерном Copier из предыдущей главы и создадим две  отдельные очереди: