Глава 10. Системы на основе очередей задач 187
Такой подход позволяет без труда создать модуль масштабиро-вания очереди задач в сторону увеличения. Масштабирование в сторону уменьшения несколько проблематичнее. Тем не менее можно использовать те же расчеты, что и ранее, допол-
нительно заложив определяемый эвристическим путем резерв вычислительных ресурсов. К примеру, можно снижать коли-чество параллельно выполняемых задач до тех пор, пока время обработки одного задания не составит 90 % от межзадачного интервала.
Паттерн Multi-Worker
Одна из основных тем данной книги — использование контей-неров с целью инкапсуляции и повторного применения кода. Она актуальна и для паттернов построения очередей задач, опи-сываемых в данной главе. Помимо контейнеров, управляющих самой очередью, повторно использовать можно и группы кон-тейнеров, образующих реализацию исполнителей. Допустим, каждое задание в очереди вам необходимо обработать тремя разными способами. Например, обнаружить на фотографии лица, сопоставить их с конкретными людьми, а затем размыть соответствующие части изображения. Можно поместить всю обработку в один контейнер-исполнитель, но это одноразовое решение, которое невозможно будет использовать повторно. Для замазывания на фото чего-нибудь еще, например машин, придется с нуля создавать контейнер-исполнитель. Возможности такого рода повторного использования можно добиться путем применения паттерна Multi-Worker , который фактически является частным случаем паттерна Adapter, опи-санного в начале книги. Паттерн Multi-Worker преобразует набор контейнеров в один общий контейнер с программным интерфейсом контейнера-исполнителя. Этот общий контей-нер делегирует обработку нескольким отдельным, повторно 188Часть III. Паттерны проектирования систем пакетных вычислений используемым контейнерам. Данный процесс схематически изображен на рис. 10.4.
Рис. 10.4. Агрегирующий паттерн Multi-Worker, реализованный в виде группыконтейнеров
Благодаря повторному использованию кода путем комбини-рования контейнеров-исполнителей снижаются трудозатраты людей, проектирующих распределенные системы пакетной обработки.
11 Событийно-ориентированная пакетная обработка
В предыдущей главе мы рассмотрели общую инфраструктуру для организации очередей задач, а также несколько простых примеров приложений, их использующих. Очереди задач хоро-шо подходят для однократного преобразования одного набора входных данных в один набор выходных данных. Однако существует ряд приложений пакетной обработки, в ко-торых может понадобиться выполнить несколько преобразова-ний либо породить из одного набора входных данных несколько наборов выходных данных в разных форматах. В таких случаях приходится связывать очереди задач так, что выходные данные одной очереди задач становятся входными данными для другой очереди (или даже нескольких очередей) и т. д. За счет этого образуется последовательность шагов обработки, в которой каждая последующая очередь задач реагирует на событие за-вершения обработки в очереди предыдущего шага. 190Часть III. Паттерны проектирования систем пакетных вычислений Такого рода событийно-ориентированные системы часто назы-ваются системами с потоком задач , поскольку они основаны на потоке задач в направленном ациклическом графе взаимосвя-занных этапов обработки данных. Такая система схематически изображена на рис. 11.1.
Рис. 11.1. В данном потоке задачи копируются в несколько параллельнообрабатываемых очередей (этапы 2а, 2б), а затем снова объединяются в общую очередь (этап 3)
Простейшее приложение такого рода систем подразумевает пе-редачу выходных данных одной очереди на вход другой очереди. По мере усложнения систем появляются различные паттерны Глава 11. Событийно-ориентированная пакетная обработка 191связи очередей задач. Для понимания работы системы в целом чрезвычайно важно разбираться в этих паттернах. Принцип работы событийно-ориентированной очереди задач похож на принцип работы событийно-ориентированного FaaS-сервиса. Без общей схемы взаимодействия очередей друг с другом будет трудно в полной мере понять, как работает система. Паттерны событийно-ориентированной обработки
Читать дальше