Служба пульса AWS с использованием API Gateway / Lambda / DynamoDB

Я использую локальное приложение Windows и хочу знать, когда это приложение находится в автономном режиме (не позднее, чем через одну минуту).

Я думал создать API-шлюз с именем HeartbeatControllerAPI, и этот API будет вызывать лямбду, которая, в свою очередь, будет устанавливать последнее сердцебиение приложения в таблице Dynamodb под названием «Heartbeats», которая выглядит так:

Имя машины | Последнее сердцебиение

2:00 утра

Б 2:10 утра

С 2:05 утра

Поэтому, если у меня есть 3 машины следующим образом:

Машина 1 — с установленным приложением.

Машина 2 - с установленным приложением.

Машина 3 - с установленным приложением.

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

Является ли этот метод правильным? Я беспокоюсь (с точки зрения биллинга и перегрузки), что произойдет, если у меня будет 1 миллион таких машин, тогда как каждую минуту все они будут получать доступ к шлюзу API и обновлять таблицу Dynamodb.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 343
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как правило, сердцебиение — это наоборот, когда в вашем случае вы должны сделать что-то вроде запуска Lambda событием CloudWatch (событие cron, запускаемое каждые X минут), и эта Lambda будет вызывать ваши машины и подтверждать, что они работают и Бег. Таким образом, вашим машинам остается выполнять свою задачу, а ваша функция сердцебиения (лямбда) будет подтверждать, что они работают каждые X минут.

Это также будет означать, что вам нужна только одна лямбда для множества машин (в зависимости от производительности можно увеличить количество лямбд, если вы достигнете примерно 50 машин).

Поэтому, если вы будете следовать этому подходу, ваша Lambda будет запущена событием CloudWatch cron, проверьте, работают ли машины, а затем для каждой машины, если они работают, обновите таблицу со статусом, и если они не работают, вы могли бы, возможно, отправьте сообщение в тему SNS (и подпишитесь на эту тему), чтобы вы могли получать уведомления о том, что машина не работает (это также намного сложнее, если звонит машина, потому что, если она не работает, тогда вам нужно сканировать таблицу на время последнего обновления, это может стать дорогостоящим и неэффективным).

Спасибо большое, я вас понимаю кроме одной детали. Как я могу узнать из функции Lambda, работающей через cron, если машина запущена и работает и подключена к Интернету. Вы имеете в виду, что я должен сохранить общедоступный IP-адрес этих компьютеров и попытаться проверить связь с сервером, чтобы проверить, работают ли они?

SyndicatorBBB 31.05.2019 17:20

Да, либо сохраните их общедоступный IP-адрес (возможно, с помощью хранилища параметров SSM), либо откройте порт, через который они будут доступны для статуса.

Deiv 31.05.2019 18:35

Deiv, таким образом, пытаясь получить доступ к локальному компьютеру с сервера по IP, у меня могут быть проблемы с маршрутизатором. Не слишком ли это сложно? Я могу преодолеть брандмауэр, но маршрутизатор может доставить некоторые проблемы.

SyndicatorBBB 01.06.2019 11:44

Хм, в этом случае ваш подход может быть единственным способом... дайте подумать. Итак, в этом сценарии я бы сделал прокси-сервер API-шлюза для dynamodb, сопоставил запрос так, чтобы его вызов обновлял таблицу с отметкой времени. Таким образом, у вас могут быть сотни машин, вызывающих этот API, и вы не вызываете никаких дополнительных лямбда-выражений. Затем у вас может быть Lambda на основе таймера, которая сканирует таблицу и ищет машины, которые не обновлялись в течение последних X минут, а затем вы знаете, что что-то не так, и отправляете предупреждение.

Deiv 01.06.2019 16:53

Я думал об этом, но это хорошо для сотен, я не уверен, насколько это хорошо для миллионов. Я нашел статью о реализации лямбда-выражений как Websocket вместо простого REST. Это может решить проблему. Каждая машина может отправить запрос на подключение к лямбде, идентификатор подключения сохраняется в базе данных Dynamo, а затем я могу отправлять сообщения клиентам с этими идентификаторами подключения. Что Вы думаете об этом?

SyndicatorBBB 01.06.2019 20:08

Я думаю, что если вы говорите о миллионах, вы определенно хотите избежать использования Lambda в качестве посредника, потому что вы получите миллионы ненужных вызовов. Наличие лямбды хорошо для сотен, но прокси напрямую к dybamodb хорош для любого числа, так как между ними нет лямбды :)

Deiv 01.06.2019 20:17

Отлично, поэтому я пойду с лямбдой в качестве веб-сокета и посмотрю, как она подходит. Спасибо

SyndicatorBBB 01.06.2019 20:39

Другие вопросы по теме