2016-10-21 4 views
4

В настоящее время я разрабатываю систему для анализа и визуализации текстовых данных на основе НЛП.Очередь сообщений с сельдереем против обработки задач AWS Lambda

Бэкэнд (Python + Колба + AWS EC2) обрабатывает анализ и использует API для подачи результата обратно в веб-интерфейс (КОЛБУ + D3 + Heroku) приложения, которое только обрабатывает интерактивные визуализации.

В настоящий момент анализ в прототипе представляет собой базовую функцию python, которая означает, что на больших файлах анализ занимает больше времени и, таким образом, приводит к таймауту запроса во время соединения данных API с интерфейсом. Как и анализ многих файлов, выполняется в линейной очереди блокировки.

Чтобы масштабировать этот прототип, мне нужно изменить функцию Analysis(text), чтобы быть фоновой задачей, чтобы она не блокировала дальнейшее выполнение и не могла выполнить обратный вызов после выполнения функции. Текст ввода извлекается из AWS S3, а выход - относительно большой формат JSON, предназначенный для хранения в AWS S3, поэтому API-интерфейс будет просто извлекать этот JSON, который содержит данные для всех графиков в интерфейсном приложении. (Я считаю, что S3 немного легче обрабатывать, чем создание большой структуры реляционной базы данных для хранения постоянных данных.)

Я делаю простые примеры с сельдереем и считаю это подходящим решением, однако я просто немного читал в AWS Лямбда, которая на бумаге кажется лучшим решением с точки зрения масштабирования ...

Функция Analysis(text) использует предварительно построенную модель и выполняет функции относительно распространенных пакетов Python NLP. Поскольку мой недостаток опыта в масштабировании прототипа я хотел бы попросить о вашем опыте и суждении о том, какое решение будет наиболее подходящим для этого сценария.

Спасибо :)

ответ

0

Я хотел бы поделиться личным опытом. Я переместил свои тяжелые задачи на AWS Lambda, и я должен признать, что рентабельность инвестиций была довольно хорошей. Например, одной из моих задач было создание ежемесячных отчетов для клиентов, а затем отправка их клиентам. Данные для каждого утверждения были загружены в шаблон Jinja, который дал мне HTML-код инструкции. Используя Weasyprint, я преобразовал HTML в файл Pdf. И тогда пересылка этих писем в формате pdf была последним шагом. Я исследовал различные варианты создания файлов PDF напрямую, но они не выглядели выполнимыми для меня.

При этом, когда шкала была низкой, то есть когда количество клиентов было небольшим, сельдерей был замечательным. Однако, если учесть, что во время этой задачи я наблюдал, что загрузка процессора очень высока. Я бы добавил в очередь на сельдерей эту задачу для каждого из клиентов, из которой рабочие сельдерея подбирали задачи и выполняли ее.

Но когда масштаб пошел высоко, сельдерей не оказался надежным вариантом. Процессоры были довольно высокими (я не виню сельдерей за это, но это то, что я наблюдал). Сельдерей все еще хорош. Но поймите это, что с сельдереем вы можете столкнуться с проблемами масштабирования. Вертикальное масштабирование может не помочь вам. Таким образом, вам нужно горизонтально масштабироваться по мере роста вашего бэкэнда, чтобы получить хорошую производительность от сельдерея. Когда в очереди ждут много задач, а число работников ограничено, естественно, многие задачи придется ждать.

Так что в моем случае я переместил эту задачу с интенсивным использованием процессора на AWS Lambda. Итак, я развернул функцию, которая сгенерировала бы оператор Pdf из данных оператора клиента и отправила его после этого. Сразу же, AWS Lambda решила проблему масштабирования. Во-вторых, поскольку это была скорее задача периода, а не ежедневная задача - поэтому нам не нужно было ежедневно заниматься сельдереем. Лямбда запускается в случае необходимости - но не запускается, когда не используется.Кроме того, эта функция была в NodeJS, так как пакет npm, который я нашел, оказался более эффективным решением, которое я имел в Python. Поэтому Lambda также выгодна, потому что вы можете использовать преимущества различных языков программирования, но ваше ядро ​​может не измениться. Кроме того, я лично считаю, что Lambda довольно дешево - поскольку свободный уровень предлагает много времени на вычисление в месяц (в ГБ-секундах). Кроме того, базовые серверы, на которых ваши Lambdas позаботятся, должны обновляться до последних исправлений безопасности, когда и когда они доступны. Как вы можете видеть, моя стоимость обслуживания резко упала.

AWS Lambdas шкала согласно потребности. Кроме того, они могут служить хорошим вариантом для задач, таких как обработка потока в реальном времени или для тяжелых задач обработки данных, или для запуска задач, которые могут быть очень интенсивными.

Смежные вопросы