A imagem acima mostra o lançamento em tons de cinza do Tencent, usuários comuns podem acessá-lo, o servidor Alibaba Cloud não pode ser acessado, o ping é normal e a resolução do IP também é normal
Só é inacessível, dá para ver que a Tencent também gosta de brincar com lançamento em tons de cinza...
1. Por que o lançamento em escala de cinza
- Os serviços de internet mudam frequentemente e os ciclos de lançamento são curtos. Velocidade e qualidade são sempre difíceis de combinar.
- A publicação em escala cinza pode reduzir o risco de publicar e diminuir o escopo do impacto.
- Reduzir a dependência de testes e diminuir o custo de construção de dados para autotestes offline.
- É conveniente monitorar os logs centralmente e publicá-los na íntegra. Devido ao papel do balanceamento de carga em cada camada, é difícil rastrear um link de chamada completo.
- Você pode usar contas de teste em escala de cinza e, depois contas, contas de usuários reais em escala de cinza após a passagem da conta de teste para reduzir ainda mais o risco e o impacto da publicação.
- Fácil de reverter.
Problemas que não podem ser resolvidos por lançamentos em tons de cinza
Deve-se enfatizar que o "impacto tolerável" mencionado acima deve ser recuperável, por exemplo, a API não pode ser chamada por um período de tempo, mas após o reparo, ela pode ser chamada com sucesso. A perda ou destruição permanente dos dados dos usuários (como informações de produtos, informações de pedidos, etc.) é intolerável. Portanto, é responsabilidade dos arquitetos das empresas de Internet reparar os dados perdidos dos usuários a um estado recente (como há uma hora a uma semana) por meio de intervenção manual em caso de perda de dados de usuários devido a distúrbios do sistema de produção (como backup regular dos dados do usuário, gravação de registros de operações, etc.).
DICAS: Teste primeiro a política de tons de cinza da sua conta para reduzir o risco de danificar ou perder dados reais de usuários.
2. Qual efeito é esperado? Independentemente da alteração, queremos que requisições específicas sejam encaminhadas para nossa versão da alteração (versão em tons de cinza) para observação e validação.
3. Estratégia em escala de cinza Na verdade, é para quais requisições devem ser direcionadas para nossa versão em tons de cinza (máquina em tons de cinza). Isso geralmente está fortemente relacionado aos negócios. Por exemplo, para APIs, geralmente existem os seguintes requisitos:
Usuários específicos (por exemplo, contas de teste) Apps específicos (por exemplo, aplicativos de teste ou apps parceiros) Módulos e interfaces específicos (apenas algumas interfaces precisam de escala de cinza, que geralmente é uma modificação dos contêineres de API, e algumas APIs que não são muito importantes são usadas para testes em escala de cinzas.) ) Máquina específica (alguns IPs de solicitação são encaminhados para a máquina em tons de cinza) 4. Discussão sobre esquemas em escala de cinza Solução 1: O nível do código é avaliado pela bandeira acordada, e o antigo e o novo são trocados dinamicamente - abordagem da Amazon
Implementação:
Enterre o interruptor no código, faça um julgamento if-else e configure o interruptor para ligado para máquinas que exigem escala de cinza, caso contrário ele está desligado. Existem duas versões para cada lançamento.
mérito
Rollback rápido, não precisa republicar e reiniciar o sistema. deficiência
Seja inclinado ao código. Lógica ramificada traz complexidade. Esse método foi usado pelo autor quando eu estava no Alibaba, trocando o banco de dados de mercadorias da Oracle para o MySQL e usando uma variável de estado para controle. Assim, se alcança o efeito de migração suave.
Opção 2: Máquina pré-lançamento - Prática do Alibaba
Na verdade, isso não é em tons de cinza no sentido verdadeiro. Porque essa máquina pré-lançamento é um IP interno e não possui serviço externo. A vinculação de domínio é necessária para verificação. Mas os dados estão totalmente online. Então, é basicamente uma abordagem simples para alguns usuários específicos do Grayscale (usuários que têm acesso à máquina de Grayscale, usuários de teste interno). Na verdade, há uma abordagem semelhante no lado da API, que é o nosso ambiente Gamma, e também fornecemos o nome de domínio da máquina Gamma para facilitar a cooperação de usuários cooperativos externos com os testes.
mérito
Simples deficiência
Desperdício de uma máquina (isso pode ser colocado no ambiente de produção após a conclusão do pré-lançamento e removido do nginx durante o pré-lançamento, mas é necessário suporte para O&M.) ) Não é flexível o suficiente Serviços IDL só podem ser usados para máquinas da camada de acesso, e serviços IDL precisam ser considerados separadamente. Opção 3: Implantação do SET
1. Desdobrar isoladamente de acordo com os serviços
Por exemplo, na prática atual dos contêineres de API, a granularidade da implantação pode ser alcançada até o nível da API, e a interface avança de acordo com nginx. Como o quê:
Contêiner de API de Micro Compras: api.weigou.qq.com Pat API Container:api.paipai.com Yixun API Container: api.yixun.com API de compras online Container:api.buy.qq.com O que foi dito acima é uma implantação isolada no nível de grandes negócios. Também pode ser refinado para o nível do módulo, como a API do comércio eletrônico de serviços virtuais, que é um submódulo de negócios sob o Paipai, mas como estão conectados ao WeChat, o número de visitas aumentou significativamente, para evitar afetar outros negócios da Paipai, e para evitar ser afetado por outros negócios, a API aqui é implantar duas máquinas separadamente para elas, o nginx pode ser configurado para drenar o acesso da API virtual:
Contêiner Virtual de API: http://api.paipai.com/v2/virbiz
Dessa forma, quando lançamos uma versão, podemos primeiro escolher o Yixun com o menor volume de negócios para publicar e, em seguida, observar que não há problema antes de usar todas as outras plataformas.
2. Implantação por isolamento do usuário
Isso não é muito adequado para plataformas abertas, mas é muito adequado para cenários de aplicação como SNS. Por exemplo, o sistema QQ é dividido em vários conjuntos de acordo com segmentos de número de usuários, e cada conjunto contém 100 milhões de números consecutivos. Assumindo que o número QQ mais recente esteja próximo de 1 bilhão, há um total de 10 conjuntos (do Conjunto 1 ao Conjunto 10). Dessa forma, você pode escolher um dos SETS para publicar a cada vez, e QQ de alto nível muitas vezes não é um usuário muito importante, então o SET10 será lançado primeiro.
mérito
Implantação isolada com impacto mínimo em diferentes linhas de negócio. Suporte automático à publicação em tons de cinza. deficiência
A granularidade da escala de cinza depende da granularidade do desdobramento isolado, que geralmente é grande. Desperdício de máquinas comparado à implantação centralizada. As versões de cada linha de negócios podem ser inconsistentes, o que não favorece uma gestão unificada. Existem certos custos de implementação e implantação Esquema 4: Roteamento dinâmico
Método: Use uma política em escala de cinza que possa ser configurada de forma flexível para afetar o comportamento do balanceamento de carga e permitir que ele retorne o IP e a porta do serviço em escala de cinza de acordo com a política em escala de cinza.
Adequado para escala de cinza de serviço com IDL de back-office.
mérito
Flexível, controlável. deficiência
O centro de configuração atual e o próprio L5 não consideram políticas de roteamento específicas e não são escaláveis, então precisam ser desenvolvidos fora delas. As fontes de metadados das APIs são relativamente dispersas, e atualmente os metadados de API e IDL, níveis de API e limites de frequência estão distribuídos entre diferentes fontes de dados, e agora é necessário adicionar uma fonte de dados de roteamento em escala de cinzas.
Geralmente existem três maneiras de publicar nginx+lua em tons de cinza: nginx é distribuído de acordo com cookies e nginx é atribuído de acordo com o peso:
nginx+lua distingue de acordo com o endereço IP do visitante, porque a empresa exporta um endereço IP, e o site será acessado na versão antiga ou na nova, que não é adequada para esse método O nginx atribui pesos com base em pesos, o que é simples de implementar e pode ser tentado Nginx divide com base em cookies, e Grayscale publica com base nos usuários
|