Длинный опрос с AWS Lambda - PullRequest
       10

Длинный опрос с AWS Lambda

0 голосов
/ 12 марта 2019

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

В настоящее время без какого-либо длительного опроса вокруг моих функций, я получилследующее:

  let gameAPI = new game(
      [
        "email@email.com",
        "password",
        "secret",
        "secret"
      ]
  );


  let lastModified;

  gameAPI.login().then(() => {

      gameAPI.getProfileStats(process.argv[2], process.argv[3], process.argv[4]).then(stats => {
          //first run grab this only
          if(lastModified < stats.data.lastModified) {
              //we found new data, stop polling & update mySQL database.
          } else {
              //continue to run every 1 minute...
          }
      });

  });

Будет ли AWS Lambda хорошим решением для этой теории?если так, как бы я поступил так, поскольку Lambda взимает плату за использование компьютера?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Нет, определенно не очень хорошая идея, в этом случае вы не позволяете лямбда-функции завершиться и вам постоянно выставляется счет. Кроме того, максимальное время выполнения Lambda составляет 15 минут, поэтому вам нужно будет как-то часто его запускать.

Одним из жизнеспособных подходов по-прежнему будет использование Lambda, но вместо продолжения работы выйдите из оператора else и используйте триггер CloudWatch для вызова вашей функции каждую минуту, таким образом, вы можете запускать проверку каждую минуту, но только Плата за время выполнения вашей функции проверки.

Редактировать

Если есть много пользователей для мониторинга, то в зависимости от фактического числа, простое решение будет иметь EC2 с долгим жизненным процессом, и вы сохраните отметку времени последней проверки в БД. Для каждого периода (скажем, 1 минута) выберите базу данных для элементов, которые в последний раз обновлялись> 1 минуту назад, и сохраните их в очереди в этом локальном процессе. И в процессе, с определенной скоростью (скажем, 1 / сек), выполните выборку и проверьте логику и обновите данные и данные последней проверки в БД.

Если вы ожидаете большой объем, вы можете использовать SQS + Lambda с CloudWatch + ELB с отметкой времени последней проверки:

  1. Каждую минуту CloudWatch запускает Lambda и выбирает записи, которые требуют обновления, и помещает идентификаторы в очередь SQS.
  2. Использовать рабочую среду ELB и использовать очередь для обновления.

Таким образом, вы можете иметь практически бесконечную скорость. Или, если вам нравится немного меньшая сложность, вы можете использовать простой экземпляр EC2 и вручную управлять экземплярами и масштабом.

0 голосов
/ 12 марта 2019

Будет хорошо, если "GAME API" отправит статистику в очередь SQS.

Тогда потребители будут долго опрашивать очередь и сохранять результаты в любом месте.Это имеет несколько преимуществ.

  1. Вы получаете функцию длинного опроса из коробки от SQS (нет необходимости его реализовывать)
  2. Включив длинный опрос, вы уменьшаете количество запросов к вашемуигровой API, таким образом, вы также уменьшаете затраты
  3. Вы можете увеличивать и уменьшать своих потребителей в любое время, вы не будете подвергаться риску дублирования, поскольку SQS позволяет установить тайм-аут видимости для сообщений

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

Например, Dynamo DB имеет возможность указывать WCU (Единицы записи емкости) для таблиц, таким образом, вы экономите затраты и контролируете то, что вы предоставляете.

Наконец, SQS может быть интегрирован с лямбда-функцией (асинхронный лямбда-вызов) как потребитель, это гарантирует, что вы запускаете функцию только тогда, когда это необходимо, потому что SQS запускает функцию, когда существует запись для сохранения.

Итак, ответ на ваш вопрос - да, это хорошая идея, чтобы использовать Lambda, но вы должны использовать ее с очередью SQS.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...