Распределенная обработка - Apache Spark, Flink, Samza, Siddhi, Hazelcast Jet

Представьте себе систему обработки, которая получает данные от других внутренних систем или от конечных точек REST, доступных в Интернете. После получения набор (фоновых) задач (вычисление ответа от ввода на основе базы данных или других веб-сервисов) работает с данными параллельно, некоторые последовательно друг за другом или некоторые задачи по завершении нескольких параллельных задач. Последняя (пограничная) задача может отправить результат на внешний веб-сервис или внести в таблицу базы данных.

Задачи могут быть спроектированы как простые службы, которые обрабатывают сообщения от message-queues, доставленные ему другими такими службами, и отправляют результат в другую очередь для дальнейшей обработки. Вместо очереди система может использовать потоки для обработки. Я считаю, что этот подход (написание сервисов, связанных брокером сообщений) должен повторять обработку своих сценариев сбоя, масштабирования и пропускной способности.

Существуют ли какие-либо конкретные фреймворки (например, Flink, или Samza, или Storm, или Airflow, или Siddhi, или Hazelcast Jet) для реализации таких задач и их развертывания в кластере, который заботится о масштабировании и обработке сбоев, вместо того, чтобы реализовывать каждую задачу как подробные службы (например. весной) и масштабируйте их самостоятельно.


person Vijay Veeraraghavan    schedule 06.11.2019    source источник


Ответы (1)


Судя по вашему описанию, Hazelcast Jet может сделать все это в одном развернутом задании / конвейере: принимать данные из конечной точки REST, обогащать их с помощью сторонних входов («db или другие веб-службы»), обрабатывать данные в виде каскада шагов, где каждый шаг выполняется параллельно с данными и, наконец, помещает данные в другую очередь.

Такое задание может выполняться неограниченное количество времени на кластере машин. Единственная проблема, которую я вижу, - это перезапуск после сбоев, потому что источник данных REST не воспроизводится.

person Marko Topolnik    schedule 06.11.2019
comment
Запрос REST может быть передан в потоковые системы, такие как Redis, из которых Jet может получать свои задания. Однако, как вы думаете, учитывая, что это критически важная система, и ни одна транзакция не может быть потеряна, ее можно спроектировать для отказоустойчивой работы в кластере Jet? Потому что сам Hazelcast ничего не сохраняет на диске, а хранит данные только в памяти. - person Vijay Veeraraghavan; 06.11.2019
comment
Вы получаете безопасность за счет репликации на нескольких машинах. Что касается надежного, воспроизводимого потокового хранилища, Kafka является текущим стандартом. Функции Redis находятся на том же уровне, что и Hazelcast, это хранилище в памяти. - person Marko Topolnik; 06.11.2019
comment
Я установил сохраняемые данные redis на диск и включил репликацию, поэтому при любом сбое в главном устройстве подчиненное устройство выберет мастером и продолжит обслуживать запросы. Меня больше интересует Jet или другая сторона обработки сбоев фреймворка. - person Vijay Veeraraghavan; 07.11.2019
comment
Все распределенные системы обладают такой устойчивостью к сбоям, включая Hazelcast. Если вы можете предоставить воспроизводимый источник данных, Jet может предоставить вам гарантию единовременной обработки. - person Marko Topolnik; 07.11.2019