Несколько приложений Multitenant Rails, использующих один и тот же сервер Redis

Сценарий:

У нас есть несколько приложений Multitenant, которые используют Sidekiq и Redis.

В каждом приложении Rails у нас есть несколько учетных записей. Каждая учетная запись работает независимо от других учетных записей. Каждый аккаунт соответствует отдельному клиенту.

Что касается затрат и обслуживания инфраструктуры, мы хотим использовать один и тот же сервер Redis для всех приложений. Трафик, генерируемый нашими приложениями Multitentant (у нас около 20 приложений и около 40 учетных записей), не является чрезмерным для одного сервера Redis, и поэтому наша проблема заключается только в настройке этого сервера.

Требования

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

Разделение / идентификация может выполняться на разных уровнях:

  • Разделение однозначно по счету

  • Отделение однозначно на машине (приложение). Каждый компьютер (приложение) имеет связанную базу данных, и в этой базе данных account_id уникальны. Каждое задание имеет идентификатор account_id, и поэтому, зная, к какому компьютеру (или базе данных) принадлежит задание, мы автоматически идентифицируем учетную запись.

Возможные решения

1- Определите учетные записи с помощью uuid. У каждой учетной записи будет поле uuid, которое будет использоваться для имен очередей, которые эта учетная запись будет использовать в Sidekiq.

Плюсы: мы могли легко фильтровать очереди по аккаунту, даже при мониторинге. Минусы: будет создано много очередей, поэтому, если мы не контролируем время опроса на сервере Redis, у нас могут возникнуть проблемы с производительностью.

2- Используйте разные базы данных. Разделив базы данных по машинам (приложениям), мы решим проблему уникальности учетных записей. Проблема в том, что Redis по умолчанию принимает только 16 bbdd, а также нумерует их от 0 до 15. Так что это будет очень деликатная обработка (вручную?) Этих идентификаторов базы данных.

3- Используйте пространства имен. Отклонено Майком Перхамом http://mikeperham.com/2015/09/24/storing-data-with-redis/ Пространства имен могут выступать в качестве разделителя для компьютера или очереди.

Мы будем очень признательны за любую помощь.

Заранее спасибо.

2 ответа

Наконец, мы используем как первый, так и второй варианты. Мы используем только один сервер Redis с идентификатором uid для очередей и разных баз данных, чтобы гарантировать, что задания не были приняты на неправильной машине.

Проблема в том, что Redis по умолчанию принимает только 16 bbdd, а также нумерует их от 0 до 15. Так что это будет очень деликатная обработка (вручную?) Этих идентификаторов базы данных.

Итак, зачем использовать default? Установите соответствующее значение для свойства databases в файле conf

127.0.0.1:6370> config get databases

1) "базы данных"
2) "65536"

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