- O princípio de alta simultaneidade não se aplica ao
estado
sem o estado, o que é conveniente para a expansão horizontal
. A configuração com estado pode realizar a configuração sem estado por meio do centro de configuração.
Prática: Disconf, Yaconf, Zookpeer, Consul, Confd, Diamond,
Xdiamond, etc.
Dividir
dimensões do sistema: de acordo com as funções do sistema, divisão de negócios, como compras, liquidação, pedidos, etc.
Dimensões funcionais: divisão refinada das funções do sistema.
Dimensões de leitura e gravação: dividida de acordo com as características das taxas de leitura e gravação ; leia mais, considere o cache multinível; escreva mais, permita o teste de dimensões AOP da
subtabela da sub-biblioteca considerada
: Os padrões de acesso de acordo com ⾏ dividido em AOP, como mercadoria ⻚ ⽐ podem ser divididos em
CDN, ⻚ ⾯ sistema de renderização , o CDN é ⼀ um sistema de
dimensões de módulos AOP : a divisão geral da estrutura de código da Web, serviço, DAO
orientada a
serviço evolução orientada a serviço: serviço em processo autônomo remoto serviço-cluster registro manual serviço-registro automático e
agrupamento de serviço-serviço de descoberta, isolamento, governança de serviço de roteamento,
considere agrupamento de serviço, isolamento, limitação de corrente, lista negra, tempo limite, mecanismo de nova tentativa, roteamento,
compensação de falha , etc.
Prática: Utilize Nginx, HaProxy, LVS, etc. para obter balanceamento de carga , ZooKeeper, Consul,
etc. para obter registro automático e descoberta de serviços. Alvo da
fila de mensagens
: desacoplamento de serviço (consumo um-para-muitos), processamento assíncrono, buffer de redução de pico de tráfego, etc.
Armazenamento de fluxo de massa: Sacrifique a consistência para garantir consistência final (Caso: dedução de estoque, a dedução agora é feita no
Redis, registro de registro de dedução, aprovação O processo em segundo plano aplicará o registro de dedução ao BD)
Revisão de dados: Resolva o problema de perda de mensagens no mecanismo de mensagem assíncrona.
Heterogeneidade de dados . Heterogeneidade de
dados: receba alterações de dados por meio do mecanismo de fila de mensagens e armazene
dados originais . Loop de dados fechado: proteja várias fontes de dados e armazene dados heterogeneamente para formar um -loop
cache silver bullet
Camada do usuário:
cache DNS Cache do
navegador DNS do
sistema operacional Cache DNS
local do provedor de serviços
DNS Cache do servidor DNS Cache
do lado do cliente Cache do
navegador (Expira, Cache-Control, Last-Modified, Etag) *
Cache do cliente do aplicativo (js / css / image ...)
Camada de proxy:
cache CDN (geralmente construído com base em ATS, Varnish, Nginx, Squid, etc.,
nó de extremidade - nó de sub-nível-nó do meio - site de origem)
Camada de interface :
Nginx como um exemplo :
Proxy_cache: cache de proxy, você pode Armazenado em / dev / shm ou SSD
FastCGI Cache
Nginx + Lua + Redis: Cache de dados de negócios
PHP como exemplo:
Opcache:
camada de aplicativo Opcodes para cache de PHP : Cache de dados
estáticos de
negócios (Redis / Memcached / arquivos locais, etc.) Camada de dados da
fila de mensagens
:
NoSQL: Redis, Memcache, SSDB, etc.
MySQL: Innodb / MyISAM, etc. Cache de consulta, cache de chave, tamanho do
buffer Innodb etc.
Camada do sistema:
CPU: Cache L1 / L2 / L3 / disco de
memória NUMA
: cache do próprio disco, dirty_ratio / dirty_background_ratio, array card Concorrência do próprio
cache - Princípio de alta usabilidade
Downgrade
Downgrade de gerenciamento centralizado de switch: push switch informações de configuração para cada
aplicativo, downgrade de serviço de leitura de vários níveis: como chamada de serviço rebaixada para
interface de switch de cache local somente leitura : como Nginx + lua (OpenResty) Configure um estratégia de downgrade para desviar o tráfego; com base
nisso, uma estratégia de escala de cinza pode ser feita.
Downgrade de negócios: alta simultaneidade, garantindo funções essenciais, funções secundárias podem ser alteradas de estratégias síncronas para assíncronas ou
funções de bloqueio
Limite de fluxo
: evitar solicitações maliciosas ** * ou sistema além da
prática de pico : o
tráfego malicioso apenas solicita acesso ao Cache
penetra no back-end para aplicá-lo ao fluxo Use o limite Nginx para processar
IP malicioso Usando a política Nginx Negar ou recusar o
tráfego de corte de iptables
para fazer isso: a
prática de falha da máquina de blindagem :
o DNS: alterar a resolução do nome de domínio, como DNSPOD pode adicionar um IP de backup, quando um IP normal falha
, ele muda automaticamente para o endereço de backup; a prática efetiva é mais lenta
HttpDNS: a fim de contornar o agendamento de tráfego preciso implementado pelo operador LocalDNS
LVS / HaProxy / Nginx: Remova o nó com falha
e reverta . Quando a
versão de lançamento falhar, você pode reverter rapidamente para a versão estável anterior a qualquer momento - Princípios de design de negócios
anti-redesenho
design idempotente
definição de processo de
estado da máquina de estado de
operação do sistema de retorno pode ser alimentado por
sistemas de back office aprovação da
documentação que
backup de anotação - Conclusão É
necessário planejar e desenhar primeiro, ter planos para os problemas existentes e planos para o futuro, as
dívidas técnicas serão pagas mais cedo ou mais tarde. - A diferença entre distribuído e cluster:
Distribuído refere-se à distribuição de negócios diferentes em lugares diferentes. Cluster refere-se ao agrupamento de vários servidores para
alcançar o mesmo negócio - Transação distribuída:
- Submissão na segunda etapa:
a) Conceito: Os participantes informam o coordenador do sucesso ou fracasso da operação, e o coordenador
decide se cada participante deve enviar ou não a operação com base no feedback de todos os participantes.
b. Função: Principalmente garantir a originalidade das transações distribuídas; o primeiro estágio é o de preparação e o segundo
estágio é o de confirmação;
c. Desvantagens: não só deve bloquear todos os recursos dos participantes, mas também bloquear a coordenação. recurso, o custo é
grande. O resumo de uma frase é: 2PC é muito ineficiente e hostil para alta simultaneidade. - Confirmação de três fases:
a. Conceito: O protocolo de confirmação de três fases introduz um mecanismo de tempo limite tanto no coordenador quanto nos participantes e
divide a primeira fase do protocolo de confirmação de duas fases em duas etapas: consulta e, em seguida, bloqueia os recursos.
, ele é realmente enviado. Dessa forma, o envio de três fases tem três estágios: CanCommit, PreCommit e
DoCommit.
b. Desvantagens: Se após entrar no PreCommit, o Coordenador enviar uma solicitação de aborto.
Supondo que apenas uma Coorte receba e execute a operação de abortar,
outras Coortes que são desconhecidas sobre o status do sistema escolherão continuar com o Commit de acordo com o 3PC. Neste momento , o status do sistema
Inconsistent. - Transação flexível:
a. Conceito: A chamada transação flexível é uma transação rígida que é relativamente forçada a travar a mesa. Fluxo abaixo:
Se a transação do servidor A for executada sem problemas, a transação A. será enviada primeiro. Se a transação B também for executada
sem problemas, a transação B também será enviada e toda a transação será concluída. Porém, se SIM falha na transação B
falhar, o rollback da transação em B, então a transação A foi confirmada, é necessário executá-la uma operação de compensação
para a transação ter sido enviada para A Executar operação inversa da operação, não retornar para o O
status da transação A antes da execução .
b. Desvantagens: O negócio é muito intrusivo e são necessárias operações compensatórias, carece de universalidade e não pode ser promovido em grande escala
. - A implementação RabbitMQ da solução consistente de mensagem final:
a. Implementação: confirmação de envio + persistência da mensagem + confirmação do consumidor. - Quando usar o desenvolvimento distribuído:
a. Vantagens:
i. Desacoplamento do módulo: dividir módulos, usar comunicação de interface, reduzir o acoplamento entre os módulos.
Ii. Dividir projetos, diferentes equipes são responsáveis por diferentes subordinados Projeto: Dividir o projeto em vários
subprojetos , e diferentes equipes são responsáveis por diferentes subprojetos.
iii. Melhorar a escalabilidade do projeto: Ao adicionar funções, você só precisa adicionar outro subprojeto e chamá-lo. A conexão de
outros sistemas está bem.
iv. Implantação distribuída: A implantação distribuída pode ser realizada de forma flexível.
v. Melhorar a capacidade de reutilização do código: Como a camada de serviço, se você não usar uma
arquitetura de serviço de repouso distribuída , ela estará disponível no shopping WAP móvel, WeChat. shopping, pc, android e ios precisam
escrever uma lógica de camada de serviço. A quantidade de desenvolvimento é grande e é difícil de manter e atualizar. Neste momento, um
método de serviço de descanso distribuído pode ser adotado e uma camada de serviço pode ser usado publicamente.
a. Desvantagens:
i. A interação entre sistemas
requer o uso de comunicação remota para aumentar a carga de trabalho de desenvolvimento de acesso; ii. Há um atraso nas solicitações de rede;
iii. O processamento de transações é mais problemático e requer o uso de transações distribuídas. - cdn (Multiatividade em locais diferentes)
1. Multiatividade em locais diferentes: Multiatividade em locais diferentes refere-se a um cenário de negócios onde vários locais distribuídos em locais diferentes fornecem serviços para o mundo externo ao mesmo tempo
. Multiatividade em locais diferentes é um tipo de design de arquitetura de alta disponibilidade. A principal diferença do design de recuperação de desastre tradicional é a
"multiatividade", ou seja, todos os locais fornecem serviços externos ao mesmo tempo.
2. Esquema de transição de tolerância a desastres em dois
locais : A tolerância a desastres é a parte mais importante de várias atividades em diferentes lugares. Pegue o diagrama de arquitetura de várias atividades em duas cidades como exemplo:
Um
sistema comercial completo é implantado em duas cidades (a cidade 1 está localizada na região Sul da China 1 e a cidade 2 está localizada na região Leste da China 1) .
O negócio do pedido é classificado de acordo com "user_id"% 100. Em circunstâncias normais:
[00 ~ 49] Todas as leituras e gravações estão no banco de dados principal da instância do banco de dados na cidade 1.
[50 ~ 99] Todas as leituras e escritas das subpáginas estão no banco de dados principal da instância do banco de dados na cidade 2.
"Instância do banco de dados principal da cidade 1" e "Instância do banco de dados principal da cidade 2" estabelecem a replicação bidirecional DTS
.
Quando ocorre uma anormalidade, é necessária uma alternância de recuperação de desastres. Existem quatro cenários possíveis:
a segunda e a terceira situações anormais são todas tratadas pelo segundo caso, portanto, se são todas as
anormalidades do APP Server, todas as anormalidades do banco de dados e anormalidades da cidade inteira, basta seguir o
plano de recuperação de desastre no nível da cidade e alternar diretamente o servidor APP e banco de dados para outra cidade.
3. Várias cidades e lugares diferentes:
várias cidades e lugares diferentes, o modo de vários empregos refere-se à implantação de vários empregos em locais diferentes entre 3 ou mais cidades. Neste modo
, existem nós centrais e nós de unidade:
nó central: significa que os dados incrementais do nó de unidade precisam ser sincronizados para o nó central em tempo real, e o
nó central sincroniza todos os dados incrementais distribuídos para outros nós de unidade .
Nó da célula: o nó correspondente à leitura e escrita do ramo, o nó precisa sincronizar o incremento do ramo ao
nó central e receber os dados incrementais de outras partições do nó central.
A figura abaixo é um diagrama da arquitetura multiatividades em três cidades: East China 1 é o nó central e South China 1 e North China 1 são
nós de unidade.
9. Como lidar com o tempo de inatividade em um ambiente distribuído?
1. Dubbo: O servidor está fora do ar e zk é temporariamente excluído;
2. Springcloud: Envie a detecção de um salto a cada 30s para entrar novamente no lease. Se o cliente não puder
renovar o lease várias vezes , ele será removido do centro de registro do servidor em 90s.
3. Monitoramento de Apm:
10.