Запускайте длинные процессы Java по требованию с помощью AWS - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу обработать большой CSV (миллионы строк) с помощью приложения Java на AWS и записать результаты в другой CSV.

Приложение упаковано в один jar-файл и может быть запущено с некоторымикоманда оболочки java -jar myJar.jar -option1 -option2.

Приложение может быть вызвано в любое время, в зависимости от пользователя, загружающего CSV, запускающего приложение.

  • Сначала я подумал о том, чтобы загрузить CSV в s3 и имеет лямбда-функцию , запускающуюся при каждой загрузке.Эта лямбда запускает jar (также хранится на s3), а затем записывает результаты в s3 .

Проблема: Работает для небольших файлов, ноЛямбда-функции ограничены по времени выполнения, оперативной памяти, процессору и временному хранилищу файлов.Они на самом деле созданы для коротких процессов.

  • Другое решение - запустить кластер ec2 , а приложение ожидает триггер.

Проблема: Наличие кластера, даже если он простаивает, означает оплату за него.

Есть ли решение для запуска этого jar без кодирования его эквивалента в специальной технологии AWS?

РЕДАКТИРОВАТЬ: Чтобы ответить на комментарии

  • Потребность в "реальном времени" заключается в том, что она должна быть запущена конечными пользователями, и они будут ждатьрезультаты для отображения.Несколько минут хорошо продумано, и я попробую решение ec2, предложенное @stdunbar, чтобы посмотреть, как оно идет.
  • Я знаю, что 1M маленький, и описанное выше решение lambda / s3 хорошо работает на5M-линии CSV.Но я ищу какое-то решение, которое хорошо масштабировалось бы, и которое можно было бы использовать при локальном управлении банкой, а это несколько часов, и мы больше не могли бы позволить его запускать локально.(Я все еще на стадии эксперимента и являюсь новичком в облачных решениях)

1 Ответ

0 голосов
/ 20 декабря 2018

Есть несколько частей, где вы можете заставить его работать более эффективно и экономить деньги.

Требуется кодировка:

  • Еслине обязательно обрабатывать целые строки 1М одновременно / вместе, пытаться разбить его на более мелкие части.
  • Напишите лямбду, которая реагирует на создание CSV, лямбда-порождающие EC2 от вашего имени и отправьте задания наEC2 для обработки (я думаю, что для настройки достаточно)

Требуется меньше кодирования:

  • Вы бы неНужно, чтобы весь кластер EC2 работал, только один маленький экземпляр и масштабировался по мере увеличения рабочей нагрузки, то же самое с решением ниже
  • Перейти к Elastic Beanstalk.Они выполняют автоматическое масштабирование для вас, вы просто загружаете .jar

Обратите внимание, что самая большая Lambda довольно мощная, на данный момент, 3000 МБ ОЗУ с эквивалентной мощностью процессора, и это дает вам 15 минут, чтобы сделатьзадача.Чтобы поддерживать один T2.Medium (4 Гб ОЗУ, 2vCore), работающий 24/7 в месяц, вам потребуется ~ 38

или оба:

  • Вы можете хранить спящий / остановленный экземпляр EC2, который будет стоить вам доли простоя / ожидания.Лямбда может запустить экземпляр.Авто-масштабирование будет масштабировать количество экземпляров вверх и вниз.Cloudwatch может вернуть конечный экземпляр в состояние «Остановлено» после некоторого периода простоя процессора
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...