Для чего в Discourse используется Redis?

В настоящее время моя установка Discourse использует управляемую базу данных PostgreSQL и управляемый экземпляр Redis от DigitalOcean. Нужен ли управляемый сервер Redis?

Хранит ли Discourse что-либо постоянное в Redis или он используется только для кэширования и других видов временных данных?

Моя текущая конфигурация (безусловно, избыточная, но она упростит масштабирование, если это понадобится в будущем):

  • Управляемый сервер PostgreSQL от DigitalOcean
  • Управляемый экземпляр Redis от DigitalOcean
  • Балансировщик нагрузки DigitalOcean
  • Два сервера Droplet от DigitalOcean, на каждом из которых запущен Discourse

Более простая конфигурация, которую я рассматриваю:

  • Управляемый сервер PostgreSQL от DigitalOcean
  • Один сервер, на котором запущены и Redis, и приложение Discourse, с плавающим IP-адресом для переключения на резервный сервер при необходимости.

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

Спасибо,
Фрэнсис

+1 У меня тот же вопрос. Я бы очень хотел, чтобы кто-нибудь был так добр и немного подробнее объяснил про Redis и Discourse :kissing_smiling_eyes:

Discourse использует Sidekiq — это открытый планировщик заданий, написанный на Ruby. Sidekiq, как правило (и по умолчанию), только выполняет задания, но не занимается их планированием, или, по крайней мере, так говорят источники (возможно, что-то изменилось?). Однако, насколько я понимаю, корпоративная версия Sidekiq включает планирование «из коробки».

Sidekiq использует Redis как хранилище структур данных в оперативной памяти и также написан на Ruby. Sidekiq читает задания из очереди Redis, используя модель первым пришёл — первым вышел (FIFO), для обработки заданий. Обработка заданий асинхронна и позволяет веб-потоку обслуживать живые запросы, вместо того чтобы обрабатывать тяжёлые задачи, которые можно «запланировать» для выполнения в фоновом режиме.

Sidekiq описывается как «хорошо известное программное обеспечение для обработки очередей» и используется в Discourse для заданий, которые предназначены для работы как фоновые задачи, а не выполняются напрямую в запросах веб-приложения.

Вы можете изучить множество типов заданий, которые выполняет Discourse, на основе этого краткого обзора в репозитории Discourse:

Redis может использоваться в Discourse и в других частях архитектуры, но, насколько я помню, основное применение Redis — это «компаньон» для Sidekiq, «парня, отвечающего за задания». Участники команды Discourse, более опытные, чем я, в вопросах высокоуровневой архитектуры (HLA) Discourse, безусловно, смогут предоставить более подробную информацию о том, как именно Redis используется в HLA Discourse.

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

Это немного устаревший пост, но я подумал, что стоит расширить этот ответ, так как я столкнулся с этим вопросом, когда искал информацию о Discourse и Redis.

Вот ответ от участника команды на вопрос, для чего ещё, кроме Sidekiq, Discourse использует Redis:

Привет, @Francis, какова была ваша примерная стоимость за все эти услуги Digital Ocean? Мне просто интересно, потому что я планирую установить аналогичный сервис в Google Cloud (200$ бесплатно). Стоимость сервиса Discourse SaaS выходит за рамки моего бюджета.

Предположим, что балансировщик нагрузки, Redis и PostgreSQL обойдутся в 50 долларов в месяц плюс сумма, которую вы платите за дроплет(ы).

Если вы беспокоитесь о расходах, рекомендую начать с дроплета на 2 ГБ и удвоить его мощность, если этого окажется недостаточно.