Noções básicas de rede: 3. Cenários de aplicação do Reactor

reator

1. Por que o reator funciona com E/S sem bloqueio?

  1. Em um ambiente multiencadeado, coloque um listenfd em vários epolls para processamento
  2. No caso de disparo de borda, quando o evento de leitura é acionado, read lê o buffer de leitura em um loop de eventos
  3. Select tem um bug. Quando um dado chega, select relatará um evento de leitura; no entanto, os dados podem não passar na detecção de checksum, então eles são descartados e select já relatou o evento de leitura. Se você usar io read bloqueado para lido neste momento, ele irá bloquear o tópico

2. A multiplexação de IO deve ser combinada com IO sem bloqueio?

não

  1. Tome o MySQL como exemplo, selecione recebe conexões e cada conexão é uma thread
  2. libevent é adicionar uma chamada de sistema para verificar a quantidade de dados no buffer, mas a eficiência é relativamente baixa

Redis

1. O que é Redis?

Redis é um banco de dados de armazenamento de valor-chave na memória que pode ser usado como cache, fila de mensagens e armazenamento de dados. Ele oferece suporte a uma variedade de estruturas de dados (como strings, tabelas de hash, listas, conjuntos e conjuntos ordenados), fornece uma variedade de operações de comando e possui desempenho e confiabilidade eficientes de leitura e gravação. O Redis também oferece suporte a recursos como replicação mestre-escravo, persistência e clustering, tornando-o uma solução popular de banco de dados de código aberto.

2. Por que o Redis usa um único reator?

  1. lógica de negócios de thread único
  2. Ao operar comandos específicos, a complexidade do tempo é relativamente baixa

3. Quais otimizações o Redis fez para o Reactor?

  1. O Redis adota um modelo multithreading, que separa a E/S de rede e a execução de comandos em diferentes threads, para que o Redis possa processar várias solicitações de clientes ao mesmo tempo.
  2. O Redis usa um mecanismo eficiente orientado a eventos, como epoll em E/S de rede, que pode responder rapidamente a um grande número de solicitações simultâneas.
  3. O Redis usa algumas tecnologias baseadas em I/O assíncrono, como reescrita AOF e operações de persistência RDB, que podem concluir operações de disco sem afetar o desempenho do thread principal.
  4. O Redis implementa seu próprio mecanismo de comunicação de mensagens e melhora a eficiência da transmissão de mensagens, otimizando a estrutura dos pacotes de dados da rede e compactando os dados.
  5. O Redis adota a tecnologia de cópia zero, que reduz a sobrecarga da replicação de dados e melhora o desempenho de E/S da rede.

Memcached

1. O que é Memcached?

O Memcached é um sistema de armazenamento em cache de objeto de memória distribuída de alto desempenho que geralmente é usado para acelerar aplicativos da Web dinâmicos e reduzir a carga do banco de dados. O Memcached pode armazenar dados na memória, evitando assim a sobrecarga de acessar o banco de dados todas as vezes. Ele oferece suporte a várias linguagens de programação e sistemas operacionais, além de ser escalável e altamente disponível.

2. Por que o Memcached usa vários reatores?

  1. Dados kv fáceis de operar
  2. Pode lidar com negócios com alta simultaneidade

O Memcached usa vários reatores principalmente para melhorar a capacidade de processamento simultâneo e a taxa de transferência do sistema. O Memcached é um sistema de cache de objeto de memória distribuída de alto desempenho que precisa lidar com um grande número de solicitações de clientes e responder a essas solicitações rapidamente. O uso de vários reatores pode distribuir solicitações para diferentes threads para processamento, aumentando a taxa de transferência do servidor; ao mesmo tempo, vários reatores podem fazer pleno uso das vantagens de CPUs multi-core para melhorar os recursos de processamento simultâneo do sistema. Além disso, vários reatores também podem garantir que o Memcached processe solicitações de clientes diferentes igualmente, evitando a situação em que outras solicitações de clientes sejam bloqueadas devido a muitas solicitações de um cliente.

NginxGenericName

1. Quais são as características do Nginx?

  1. proxy reverso
  2. negócio de multiprocessamento

Nginx é um servidor web de código aberto de alto desempenho e um servidor proxy reverso. Ele pode ser usado como um servidor HTTP, servidor SMTP e servidor proxy TCP/UDP, suporta diversas plataformas de aplicativos e linguagens e tem as vantagens de alta simultaneidade e baixo consumo de memória, sendo amplamente utilizado em servidores Web.

2. Por que o Nginx usa vários processos?

  1. Tipos complexos de negócios
  2. O bloqueio pode ser evitado executando no isolamento do processo
  3. Relativamente independente entre as requisições

A principal razão pela qual o Nginx usa vários processos é melhorar o desempenho e a simultaneidade do servidor. O Nginx adota o modelo Master/Worker, o processo Master é responsável por gerenciar o processo Worker e o processo Worker lida com as solicitações do cliente.

Quando um cliente se conecta ao Nginx, o processo mestre atribui a conexão a um processo de trabalho para processamento.Se o processo de trabalho estiver processando outras solicitações, ele pode processar várias solicitações ao mesmo tempo, melhorando assim a capacidade de simultaneidade. Ao mesmo tempo, cada processo de trabalho é independente e não afetará um ao outro. Portanto, quando ocorre um problema no processo de trabalho, o processo mestre pode reiniciar rapidamente um novo processo de trabalho, garantindo a estabilidade e a confiabilidade do servidor.

Além disso, o Nginx também usa um modelo orientado a eventos, que é baseado em callbacks de eventos para processar solicitações, evitando perda de desempenho causada pela troca de contexto de thread, que também é uma das razões importantes para o alto desempenho do Nginx.

3. Como o Nginx lida com o Reactor?

  1. Resolva o grupo chocante bloqueando o estado do usuário, o objetivo é lidar com o balanceamento de carga da conexão na camada do usuário
  2. Quando o processo atingir 7/8*conexões, não processe mais a conexão, deixe que outros processos processem a conexão
  3. Quando todos os processos atingirem 7/8*conexões, o processamento da conexão ficará lento

O Nginx usa o modo Reactor para lidar com conexões simultâneas. Nesse modo, o Nginx transfere todas as operações de E/S para uma thread (ou processo) separada, chamada de "processo principal". Quando novas solicitações de conexão chegam, elas são colocadas em uma fila e o processo principal verifica periodicamente essa fila para processamento.

Quando o processo principal detecta uma nova solicitação de conexão, ele cria um processo filho chamado "worker", que lida com a solicitação real. Como o modo Reactor é orientado a eventos, os processos de trabalho esperam que os eventos ocorram em vez de consultar os descritores de arquivo para verificar se os dados estão disponíveis. Quando ocorre um evento, o processo de trabalho acionará a função de retorno de chamada correspondente para lidar com o evento.

Ao usar o modo Reactor, o Nginx pode gerenciar com eficiência um grande número de conexões simultâneas sem competição ou bloqueio de recursos. Além disso, como a arquitetura do Nginx é muito modular, novos recursos e extensões podem ser facilmente adicionados.

Recomendo um curso aberto gratuito da Zero Sound Academy. Pessoalmente acho que o professor ensinou bem, então gostaria de compartilhar com vocês:

Linux, Nginx, ZeroMQ, MySQL, Redis, fastdfs, MongoDB, ZK, streaming media, CDN, P2P, K8S, Docker, TCP/IP, corrotinas, DPDK e outros conteúdos técnicos, aprenda agora

Acho que você gosta

Origin blog.csdn.net/weixin_44839362/article/details/130333173
Recomendado
Clasificación