Я запускаю веб-сайт на AWS, на котором несколько веб-серверов (скажем, 4 из них) работают за балансировщиком нагрузки. Для этого конкретного веб-сайта у меня есть один лицензионный ключ New Relic для работы с инструментами. В любой момент я хочу, чтобы только один из 4 веб-серверов использовал ключ. Если этот сервер отключится, я хочу, чтобы один из оставшихся веб-серверов мог начать использовать лицензионный ключ.
Кто-нибудь знает об услуге, которая позволила бы мне управлять этим процессом? Службе не нужно особо хранить ключ, а просто управлять тем фактом, что только один веб-сервер может сдавать в аренду право на использование ключа в любое время. Что-то, к чему веб-серверы должны будут возвращаться каждые несколько минут и продлевать аренду, и если они этого не сделают, это станет доступно кому-то другому.
Я просто понял, что, возможно, смогу выполнить взломанную версию этого, используя файл на S3, но это не предотвращает состояния гонки / и т.д. и определенно является хакерским.
Любые мысли приветствуются. FWIW, этот сайт построен на Ruby on Rails. Спасибо!
JP
Удивительно, как часто ответы появляются после того, как задается вопрос. Я почти уверен, что смогу добиться этого, просто сохранив лицензионные ключи в базе данных, которая уже используется этими веб-серверами. В таблице базы данных будет
Я могу создать движок ruby gem / rails, который используют все веб-серверы для взаимодействия с этой таблицей. Когда они обращаются к таблице, они могут использовать блокировку и транзакции для предотвращения проблем с условиями гонки / параллелизма. Если веб-сервер, у которого есть аренда ключа, выйдет из строя, он не будет продлевать аренду. Другие серверы будут периодически проверять лицензию, и когда один из них видит, что она не была продлена достаточно недавно, он проверяет ее и начинает использовать.