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

Б Бёрнс

‰ ‰ очередь задач по удалению оригиналов; ‰ ‰ очередь задач по определению цвета и марки машины. На рис. 12.4 схематически изображены упомянутые стадии об-работки.

Глава 12. Координированная пакетная обработка 215

Рис. 12.4. Этапы слияния и копирования очередей, удаления исходных изображений и распознавания образов

Наконец, необходимо разработать очередь задач по распознава-нию автомобиля и его цвета, которая бы подводила статистику  по  данным  параметрам.  Для  этого  сначала  применим  шарди-рование,  чтобы  распределить  работу  на  несколько  очередей.  В каждой из очередей будет два исполнителя: один будет рас-познавать положение и тип транспортного средства, а второй —  определять  цвет  распознанной  области.  Для  слияния  снова  воспользуемся паттерном Multi-Worker, рассмотренным в гла-ве 10. Как и ранее, разделение кода на несколько контейнеров  216 Часть III. Паттерны проектирования систем пакетных вычислений позволяет использовать контейнер, определяющий цвет, в дру-гих  системах  для  определения  цветов  других  объектов,  а  не  только автомобилей.

Выходные  данные  очереди  в  формате  JSON  будут  выглядеть  примерно следующим образом:

{

"ТС": {

"автомобиль": 12,

"грузовик": 7,

"мотоцикл": 4

},

"цвета": {

"белый": 8,

"черный": 3,

"синий": 6,

"красный": 6

}

}

В  этих  данных  представлена  информация,  найденная  в  одном  изображении.  Чтобы  собрать  данные  воедино,  воспользуемся  описанным ранее паттерном Reduce, ставшим популярным бла-годаря MapReduce. Просуммируем все элементы точно так же,  как и в примере с подсчетом. Стадия свертки в качестве резуль-тата выдает итоговое количество образов и цветов, найденных  во всем множестве снимков.

13 Заключение — новое начало? Все компании, независимо от своего происхождения, становят-ся  цифровыми.  Такие  преобразования  требуют  создания  API  и сервисов, используемых в мобильных приложениях, устрой-ствах Интернета вещей (IoT) и даже в автономном транспорте  и других системах. Рост ответственности, возлагаемой на такие  системы,  означает,  что  они  должны  проектироваться с  учетом  избыточности,  отказоустойчивости  и  высокой  доступности.  В то же время требования бизнеса обуславливают потребность  в высокой маневренности в плане разработки и внедрения но-вого ПО, поддержки старого, а также экспериментов с новыми  пользовательскими и программными интерфейсами. Сочетание  упомянутых  факторов  привело  к  значительному  увеличению  потребности в распределенных системах.

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

Исторически  возникновение  подобных  ситуаций  в  сфере  раз-работки ПО и технологий приводило к появлению новых уров-ней  абстракции  и  паттернов проектирования  ПО.  Они  делали  процесс  разработки  быстрее,  проще  и  надежнее.  Впервые  это  произошло  с  созданием  первых  компиляторов  и  языков  про-граммирования. Потом появились объектно-ориентированные  языки  программирования  на  основе  управляемого  промежу-точного  кода.  В  каждый  из  этих  моментов  накопленные  тех-нические  результаты  кристаллизовали  суть  знаний  и  навыков  экспертов  в  виде  множества  алгоритмов  и  паттернов  соответ-ственно.  Это  позволило  пользоваться  данными  результатами  более широкой аудитории разработчиков-практиков. Развитие  технологий и укоренение паттернов делало процесс разработки  программного обеспечения более демократичным и расширяло  круг разработчиков, способных строить приложения на новой  платформе.  Это,  в  свою  очередь,  привело  к  появлению  еще  большего количества приложений и росту их разнообразия, что,  в свою очередь, повышало спрос на разработчиков с подобными  навыками.