Acabamos de lançar uma nova imagem de contêiner que será utilizada na sua próxima execução de ./launcher rebuild app. Como sempre, não há necessidade de alterar nenhuma configuração, desde que você tenha seguido nossa Instalação Padrão Oficial do Discourse. Dito isso, há novos recursos que ajudarão algumas instalações.
Redis 6
Fazemos uso intenso do Redis em vários lugares do Discourse, seja para cache, Sidekiq, MessageBus, bloqueios distribuídos ou limites de taxa. No geral, tem sido uma escolha extremamente sólida para nós.
No entanto, em cargas de trabalho muito específicas, o Redis pode se tornar um gargalo. E, devido à natureza de thread única do Redis, somada à nossa incapacidade de usar múltiplas instâncias por causa de nossos scripts LUA, isso representava um gargalo difícil de contornar.
Felizmente, o Redis 6 traz suporte para uso de um pool de threads para operações de I/O, e durante nossos testes, funcionou muito bem em clusters do Discourse com gargalo no Redis.
Portanto, se você está rodando em uma máquina com muitos núcleos de CPU e métricas mostrando que o Redis está com dificuldade para lidar com a carga, agora você pode optar por usar threads para operações de escrita através da seção params do app.yml:
params:
redis_io_threads: "4" # 1 desativa, n>1 usa n-1 threads extras para escritas de IO
Imagem menor
Optamos por lançar uma imagem de contêiner grande no início do projeto, para facilitar a execução do Discourse por pessoas não técnicas e gerenciar todas as dependências necessárias, versionamento, atualizações, etc.
Dito isso, recentemente ultrapassamos 1 GB para a imagem comprimida, o que foi um pouco demais.
Para mitigar o aumento constante do tamanho da imagem, movemos o código-fonte do Discourse dentro da imagem de uma cópia completa para um “clone raso” contendo apenas a versão mais recente do código.
Essa mudança reduz o tamanho da imagem comprimida em 25%, o que resulta em menos espaço em servidor necessário e rebuilds mais rápidos quando uma nova imagem é lançada. Também deve controlar o crescimento da imagem ao longo do tempo.
Testamos nas versões tests-passed/beta/stable, tanto com rebuilds quanto com atualizações via web, e nada quebra os caminhos padrão. No entanto, usuários que fazem coisas mais exóticas com git nos hooks do app.yml podem precisar adaptar suas personalizações.