Fastly, CloudFlare e algumas outras CDNs oferecem um modo onde aceleram conteúdo dinâmico.
Em resumo, você aponta o endereço IP do seu domínio para a CDN e a CDN decidirá inteligentemente como lidar com a solicitação.
- Conteúdo estático pode ser facilmente servido do cache
- Conteúdo dinâmico pode ser roteado para o site.
Isso oferece algumas vantagens em relação a enviar apenas ativos estáticos, o que é abordado no como usar CDN.
- Você pode optar por “blindagem” (shielding) 4 que protege seu site contra picos de tráfego.
- Conteúdo dinâmico pode ser acelerado usando técnicas como compressão delta. (nota: em geral, nossa carga útil cabe em 1 RTT, então isso tem menos impacto)
- A negociação SSL pode ocorrer na borda (edge), reduzindo viagens de ida e volta caras para a negociação.
Se você habilitar a aceleração total do site com uma CDN, é fundamental seguir 3 regras
-
O “barramento de mensagens” (message bus) deve ser servido da origem.
-
Você precisa configurar a confiança de X-Forwarded-For. Para Cloudflare, adicione
cloudflare.template.ymlao seu arquivoapp.yml. -
Tenha extremo cuidado com técnicas que aplicam otimização ao site, coisas como Rocket Loader podem impedir o funcionamento do Discourse. O Discourse já é altamente otimizado, isso não é necessário.
Para servir solicitações de “polling longo” (long polling) 6 de um domínio diferente, defina a configuração oculta do site long_polling_base_url para o servidor de origem. É melhor configurar isso adicionando a variável de ambiente DISCOURSE_LONG_POLLING_BASE_URL em seu app.yml, ou através do console Rails.
Por exemplo, se o seu site estiver em “http://forum.example.com”, você deve configurar http://forum-direct.example.com/ para se conectar à configuração do site. Se você não fizer isso, seu site ficará quebrado.
Se você estiver colocando o Discourse atrás do Varnish, provavelmente desejará seguir o mesmo truque aqui e ignorar o Varnish para as solicitações do barramento de mensagens.
Notas técnicas enfadonhas:
Alcançar um barramento de mensagens funcional em um domínio completamente diferente é bastante desafiador. Nosso barramento de mensagens está ciente de qual usuário está fazendo o polling; o outro domínio pode não ter um cookie configurado, então, sem alteração, há duas questões. Primeiro, você não pode sequer fazer solicitações ajax padrão entre domínios sem uma grande dança CORS.
Em segundo lugar, precisamos de um mecanismo para informar ao outro domínio quem é o usuário para que possamos fazer o polling das informações corretas.
Quando o URL base do polling longo é alterado, o Discourse envia uma meta tag extra que compartilha um token de autenticação “entre domínios” (cross domain). Este token é passado usando um cabeçalho personalizado de volta para o barramento de mensagens. O token expira após 7 dias ou assim que o usuário faz logout.
Você pode ver a maior parte da implementação aqui: FEATURE: allow long polling to go to a different url · discourse/discourse@aa9b3bb · GitHub

