Olá, aqui é o Yoshida, que é o engenheiro principal do serviço de ativação de equipe "Goalous".
Neste artigo, vamos falar sobre como o Goalous migrou do HTTP/1.1 para o HTTP/2 e como ele realmente migrou.
Por que migramos?
Até o mês passado, passávamos mais de um mês e meio fazendo melhorias de desempenho em grande escala em todo o serviço.
O Goalous tem sido bastante perceptível por muito tempo devido à sua resposta ruim, e muitas pessoas disseram que a velocidade de exibição era lenta. Como equipe de desenvolvimento, queríamos reduzir o estresse do usuário e melhorar a usabilidade do serviço, e queríamos que funcionasse de forma nítida, mas não pudemos começar porque adicionar e melhorar funções era prioridade.
No entanto, realmente queríamos responder antes de cobrar pelo serviço, então, em maio deste ano, decidimos trabalhar para melhorar o desempenho de todo o serviço com toda a nossa equipe. A transição para o HTTP/2 é um dos esforços para melhorar o desempenho. Desta vez, vou omitir os detalhes dos benefícios do HTTP/2, mas se quiser saber mais, por favor, consulte aqui.
Decidimos migrar para o HTTP/2 porque queríamos aproveitar os benefícios da multiplexação de requisição e resposta, e havia outro motivo importante para nós. Isso é um problema da AWS.
O Goalous utiliza OpsWorks na AWS, um serviço de gerenciamento de configuração para configurar e operar aplicações na nuvem corporativa usando o Chef.
Existem dois tipos de OpwsWorks: a pilha OpsWorks e a OpsWorks para Chef Automate, e a Goalous usa a pilha OpsWorks.
A stack OpsWorks é claramente diferenciada pela versão 11 ou 12 do Chef. Usamos a stack do Chef 11 há muito tempo, mas queríamos atualizar para o Chef 12 em breve, então essa migração para HTTP2 foi uma boa oportunidade.
Além disso, eu não podia usar HTTP/2 a menos que o balanceador de carga fosse ALB e não ELB, então decidi me arriscar e criar uma pilha completamente nova de Chef12+ALB.
Como migramos?
Infelizmente, a receita do Chef da Goalous não pode ser publicada, então este artigo vai focar em como configurar a pilha Chef12 e o ALB do Opsworks para alcançar HTTP/2, e explicará os passos para uma configuração minimalista usando uma receita de exemplo do Chef.
Referência: Use Balanceadores de Carga de Aplicações com suas pilhas AWS OpsWorks Chef 12
Passo 1.Criação ALB
Basicamente, ele é criado de acordo com a documentação oficial da AWS.
No entanto, pule o passo 5: Defina alvos para os grupos-alvo. A criação e o registro de alvos em grupos-alvo são feitos no OpsWorks.
Passo2. Criando uma pilha OpsWorks
Na página do painel do OpsWorks, clique no botão Adicionar Pilha.

Após a transição para a página Adicionar Pilha, primeiro selecione Chef12 Stack,
- Nome da pilha
- Região
- VPC
- Sub-rede padrão
- Sistema operacional padrão
- Chave SSH padrão
Aparecem cada um deles.

Em seguida, selecione Sim em Usar livros de receitas personalizados do Chef na moldura vermelha para especificar o repositório Git da receita de exemplo do Chef mencionada acima.
- Tipo de repositório: Git
- URL do repositório: https://github.com/awslabs/opsworks-example-cookbooks
Após entrar, clique no botão Adicionar Pilha no canto inferior direito para confirmar que a pilha foi adicionada.

Passo3.conceder permissões para a API ELB
Você pode pular se o perfil que você selecionou no perfil de instância padrão do IAM já tiver permissões relacionadas à API ELB.
Selecione a pilha que você criou na Etapa 2. Você verá as informações detalhadas da pilha, clique no link para o perfil registrado no quadro vermelho do Perfil de Instância Padrão IAM no grupo de Opções Avançadas.

Na página de detalhes do cargo, clique no botão Criar Política de Função.

Selecione uma apólice personalizada e prossiga para a próxima etapa.

Insira o nome de uma política e cole o JSON a seguir para conceder permissões da API ELB para completar a aplicação da política.

Passo 4.Criação de camadas
Depois de selecionar a Pilha que você criou, clique na aba Camada no menu esquerdo e clique no link Adicionar Camada (ou no botão Adicionar no canto superior direito).

Insira qualquer string em Nome e Nome Abreviado para completar a criação.

Vinculando Grupos-Alvo ALB à pilha OpsWorks
Ponto: Em agosto de 2017, o ALB ainda não é compatível com a configuração do balanceador de carga para stacks OpsWorks. Portanto, vincular a stack ao ALB deve ser feito na receita do Chef.
Clique no link de Configurações para a camada criada.

Na aba Configurações Gerais, há um item chamado Custom Json. Agora você vai associar o grupo-alvo ALB criado no Passo 1 à pilha OpsWorks.

O template JSON Personalizado está listado abaixo. Cole este JSON na área de texto Json Personalizado.
Em seguida, substitua o valor de alvo_group_arn pela string ARN do grupo alvo ALB criado na Etapa 1. Para verificar a ARN do grupo alvo, selecione o grupo de alvos no menu esquerdo do console EC2 e então selecione o grupo alvo criado na Etapa 1. As informações detalhadas do grupo de alvos são exibidas na parte inferior da tela, e há um campo ARN nele, então copie e cole a string de valores no Json Personalizado acima para salvar as configurações.

Preparando receitas de chef para rodar
Vá na aba Receitas, atribua a receita ao evento do ciclo de vida da seguinte forma e salve as configurações: • Adicione uma receita para Setup:alb_support::install_http_server,alb_support::attach_to_alb ・Adicione uma receita para Shutdown:alb_support::d etach_from_alb,alb_support::uninstall_http_server
*Este é apenas um exemplo de usar ALB no OpsWorks para realizar requisições HTTP/2. Na verdade, acho que a instalação de servidores web como Apache e Nginx está incorporada em outras receitas, então, nesse caso, alb_support::install_http_server,alb_support::uninstall_http_server não é necessário.

Adicionando Instâncias EC2 - Verificando Solicitações HTTP/2
Selecione Instâncias no menu esquerdo do OpsWorks e depois adicione uma instância.

Inicie a instância que você adicionou.

Após a inicialização bem-sucedida, acesse o domínio associado ao ALB no Route53. É uma requisição HTTP/2!

Como incorporar isso em um projeto real
Neste artigo, usamos a receita de exemplo para verificar requisições HTTP/2 na pilha Chef12+ALB. No entanto, ao usar isso em um projeto real,
- O que fazer na pilha Chef12 porque o livro de receitas comunitário não é mais importado automaticamente ao executar uma receita
- Como gerar automaticamente receitas para serem referenciadas em pilhas em ambientes de desenvolvimento e estágios
Existem muitos problemas.
Pretendo escrever sobre a resolução desses problemas no próximo artigo como uma edição prática, então, por favor, aguarde um pouco.