Мы только что выпустили новый образ контейнера, который будет использоваться при следующем запуске команды ./launcher rebuild app. Как всегда, вам не нужно изменять вашу конфигурацию, если вы следовали нашей официальной стандартной инструкции по установке Discourse. Тем не менее, появились новые функции, которые помогут некоторым установкам.
Redis 6
Мы активно используем Redis во многих компонентах Discourse: для кэширования, Sidekiq, MessageBus, распределённых блокировок, ограничения скорости и так далее. В целом, это был надёжный выбор для нас.
Однако при определённых рабочих нагрузках Redis может стать узким местом. Из-за однопоточной природы Redis, а также невозможности использовать несколько экземпляров из-за наших LUA-скриптов, это стало серьёзным ограничением, которое трудно обойти.
К счастью, Redis 6 поддерживает использование пула потоков для операций ввода-вывода, и в наших тестах это отлично работает с кластерами Discourse, где производительность ограничена Redis.
Таким образом, если вы работаете на машине с большим количеством ядер процессора и метрики показывают, что Redis не справляется с нагрузкой, теперь вы можете включить использование потоков для операций записи через секцию параметров в файле app.yml:
params:
redis_io_threads: "4" # 1 отключает, n > 1 использует n-1 дополнительных потоков для записи операций ввода-вывода
Уменьшенный размер образа
На раннем этапе проекта мы решили выпускать большой образ контейнера, чтобы облегчить запуск Discourse нетехническим пользователям и обеспечить поддержку всех необходимых зависимостей, версионирование, обновления и т. д.
Тем не менее, недавно размер сжатого образа превысил 1 ГБ, что стало слишком много.
Чтобы смягчить постоянно растущий размер образа, мы переместили исходный код Discourse из образа: вместо полной копии кода теперь используется “shallow clone”, содержащий только самую последнюю версию кода.
Это изменение уменьшило размер сжатого образа на 25%, что привело к снижению требований к дисковому пространству на сервере и ускорению пересборки при выпуске нового образа. Также это должно контролировать рост размера образа со временем.
Мы протестировали изменения на ветках tests-passed/beta/stable как при пересборках, так и при обновлениях через веб-интерфейс, и стандартные пути не нарушаются. Однако пользователи, выполняющие нестандартные операции с git в хуках app.yml, возможно, смогут адаптировать свои настройки.