Читать «Распределенные системы. Паттерны проектирования» онлайн - страница 94
Б Бёрнс
Практикум. Конвейерная разметка и обработка изображений
Чтобы понять, как координированная пакетная обработка мо-жет быть использована для выполнения сложных пакетных задач, рассмотрим задачу разметки и обработки наборов изо-бражений. Предположим, есть большой набор фотографий Глава 12. Координированная пакетная обработка 213 шоссе в час пик. Нужно посчитать количество автомобилей, грузовиков и мотоциклов, а также статистическое распределе-ние цветов машин. Допустим также, что в целях анонимизации предварительно выполняется размытие изображений номерных знаков.
Фотографии предоставляются в виде последовательности URL-адресов HTTPS, каждый из которых указывает на необработан-ное изображение. Первый этап конвейера — нахождение и раз-мытие номерных знаков. Чтобы упростить задания в очередях, введем двух исполнителей. Один будет обнаруживать номерной знак, а другой — размывать соответствующую область изо-бражения. Объединим эти два контейнера-исполнителя в одну группу, как показано в главе 10 при рассмотрении паттерна Multi-Worker. Такое распределение обязанностей на первый взгляд может показаться избыточным. Его польза в том, что контейнер-исполнитель для размытия фрагментов изображений можно использовать повторно, например для размытия лиц на фотографиях.
Кроме того, для повышения надежности и максимизации па-раллелизма будем шардировать изображения на несколько очередей. Полная схема потока задач по размытию участков изображений с применением шардирования приведена на рис. 12.3.
После размытия номерных знаков на всех изображениях ре-зультат загрузим в другое место, а исходные изображения уда-лим. Оригиналы не следует удалять до тех пор, пока не будут обработаны все изображения. Они понадобятся на случай ка-тастрофического сбоя, если придется заново перезапустить процесс обработки. Для того чтобы дождаться обработки всех изображений, воспользуемся паттерном Join, рассмотренным в предыдущей главе. С его помощью мы объединим шардиро-ванные очереди задач в одну общую очередь, которая освободит 214 Часть III. Паттерны проектирования систем пакетных вычислений
Рис. 12.3. Шардированная очередь с несколькими шардами для размытия изображения
элементы для дальнейшей обработки только после того, как все шарды завершат работу.
Теперь можно удалить оригиналы и начать распознавание ма-рок и цветов машин. Пропускную способность данного кон-вейера также хотелось бы максимизировать, поэтому восполь-зуемся паттерном Copier из предыдущей главы и создадим две отдельные очереди: