Compartilhamento de tecnologia

[2-1: Projeto RPC]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

RPC

1. Noções básicas

1.1 Definição e Recursos

RPC, chamada de procedimento remoto, chamada de procedimento remoto, que define o comportamento de um programa em uma máquina chamando uma sub-rotina em outra máquina
Características:

  • Mudou a implementação remota para local. Na verdade, não há diferença entre chamadas remotas e chamadas locais.
  • Usando o modo cs, o cliente inicia uma solicitação e o servidor a executa após receber os parâmetros da solicitação.
  • Proteger a complexidade subjacente das chamadas entre processos e entre redes nos permite focar mais na lógica de negócios

1.2 Quadro de implementação específico

  1. dubbo (apache alibaba java)
  2. Motan (Weibo)
  3. alcatrão (interno ao Tencent)
  4. grpc
  5. economia
  6. nuvem de primavera openfeign

1.3 Cenários de aplicação

Pode ser usado para comunicação entre redes

2. Principais pontos técnicos do RPC e uma chamada para o processo RPC

2.1 Processo RPC

processo

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

  1. O cliente chama a interface e vai até a classe proxy, monta a solicitação e a serializa, depois codifica o protocolo e envia
  2. O servidor recebe a solicitação, realiza análise e desserialização do protocolo para obter os parâmetros da solicitação.
  3. O servidor chama a implementação da interface com base nos parâmetros da solicitação e então monta a resposta
  4. A resposta é retornada da mesma maneira

Como os dois módulos de rede estão conectados?

Insira a descrição da imagem aqui

O centro de registro é um local onde os dados são armazenados e é melhor fornecer funções de monitoramento.O centro de registro é separado da estrutura RPC
Centros de registro comuns: zookeeper, nacos, etcd

Outras características

Insira a descrição da imagem aqui

  • Filtros de rota provedores disponíveis
  • Balanceamento de carga: escolha qual provedor usar entre os provedores disponíveis
  • Limitação de fusível: controle de fluxo
  • processamento de rede
  • Processamento de protocolo

Vantagens de RPC

  1. Facilite a criação de aplicativos distribuídos, dissocie serviços e expanda facilmente
  2. O RPC geralmente usa conexões longas, o que elimina a necessidade de estabelecer uma conexão para cada comunicação e reduz a sobrecarga da rede.
  3. O RPC requer um centro de registro que possa detectar e visualizar dinamicamente as mudanças no serviço.
  4. Funções ricas de gerenciamento em segundo plano, gerenciamento unificado de serviços de interface, sem percepção para o chamador, operação unificada
  5. Protocolo simplificado, maior eficiência, alta privacidade e segurança
  6. Possui funções como balanceamento de carga, disjuntor e limitação de corrente.

2.2 Tecnologia de serialização

  • Qualquer estrutura de serialização: a ideia central é o designum protocolo de serializaçãoEscreva o tipo de objeto, o tipo de atributo e o valor do atributo no fluxo de bytes binários em um formato fixo para completar a serializaçãoe, em seguida, leia o tipo de objeto, o tipo de atributo e o valor do atributo um por um de acordo com o formato fixo e recrie um novo objeto por meio dessas informações para concluir a desserialização.

Método de serialização

  • Serialização nativa JDK
  • Formato leve de troca de dados de texto-json/XML
    • Possui boa legibilidade e é conveniente para leitura e depuração. O arquivo de bytes após a serialização com suporte a vários idiomas é relativamente grande e relativamente ineficiente, mas o fluxo de bytes após a serialização é menor. especialmente para o front-end e terceiros fornecem APIs.
  • HessianoÉ um tipo dinâmico, binário e suporta estrutura Xu Lihua entre idiomas
    • O desempenho Hessian é muito mais eficiente do que a serialização JDK e JSON. E o número de bytes gerados também é menor.Muito boa compatibilidade e estabilidadePortanto, Hessian é mais adequado como protocolo de serialização para comunicação remota na estrutura RPC.
  • protobuf
    • A biblioteca de sequências de código aberto lançada pelo Google é um formato de armazenamento de dados estruturado, leve e eficiente, com suporte a vários idiomas.
    • Velocidade rápida, alta taxa de compactação, tamanho pequeno O volume após a serialização é muito menor que JSON e Hessian. O formato do disco colorido do curso tem boa expansão, atualização e compatibilidade e pode ser compatível com versões anteriores.

Como o PRC escolhe uma estrutura de serialização?

  • Fatores de seleção
    • Segurança: A primeira consideração é que se houver vulnerabilidades de segurança na serialização, então os serviços online provavelmente serão invadidos (a serialização nativa do JDK tem vulnerabilidades
    • Compatibilidade: A compatibilidade do protocolo de serialização é muito boa após a atualização da versão, seja ela plataforma cruzada, linguagem cruzada, etc.
    • Versatilidade: Capaz de serializar e desserializar qualquer tipo. O servidor não será incapaz de chamar repentinamente o método da interface de serviço após adicionar um determinado tipo de parâmetro.
    • Desempenho e eficiência: O processo de serialização e desserialização é um processo necessário para chamadas RPC. O desempenho e a eficiência estão diretamente relacionados ao desempenho geral e à eficiência da estrutura RPC.
    • Sobrecarga de espaço: o tamanho dos dados binários após a serialização. Quanto menor o tamanho dos dados de bytes serializados, menor será a quantidade de dados transmitidos pela rede e mais rápido os dados serão transmitidos. tempo de resposta

Considerações

  1. Evite objetos que sejam muito complexos para serem construídos, que tenham muitos atributos e vários níveis de aninhamento
  2. Evite objetos muito grandes: strings grandes, arrays muito grandes, etc.
  3. Evite passar tipos como parâmetros que não são suportados pela estrutura de serialização
  4. Impedir que objetos tenham relacionamentos de herança complexos

2.3 Protocolo de comunicação da camada de aplicação-http

2.3.1 Conceitos básicos

A maioria dos RPCs desenvolve http por conta própria e também oferece suporte a http1.1

Insira a descrição da imagem aqui

O que é IO

IO é o processo de cópia de dados entre o computador interno e dispositivos externos.
Depois que os dados da rede chegam, eles são primeiro armazenados na área de cache do kernel do sistema operacional e aguardam que o aplicativo os colete.

borda acionada

Ao usar o modo de disparo de borda, quando um evento legível ocorre no descritor de soquete monitorado, o servidor só despertará de epoll_wait uma vez. Mesmo que o processo não chame a função de leitura para ler os dados do kernel, ele ainda despertará apenas. up uma vez. Portanto, nosso programa deve garantir que os dados no buffer do kernel sejam lidos todos de uma vez.

gatilho horizontal

Ao usar o modo de disparo horizontal, quando ocorre um evento legível no soquete monitorado, o servidor acorda continuamente de epoll_wait até que os dados do buffer do kernel sejam lidos pela função de leitura. ler. .

IO orientado a eventos

Depois de iniciar uma solicitação de leitura, aguarde a notificação do evento de leitura pronta antes de ler os dados.

E/S assíncrona

Depois de iniciar uma solicitação de leitura, aguarde até que o sistema operacional o notifique após a conclusão da leitura e entregue completamente a função ao sistema operacional para implementação.

2.3.2 Quais são os modelos IO do sistema operacional?

Bloqueio síncrono IO
E/S síncrona sem bloqueio
Multiplexação IO
IO acionado por sinal
E/S assíncrona
Insira a descrição da imagem aqui

Bloqueio síncrono IO

O primeiro estágio de leitura é bloqueado, que é o que costumamos chamar de bloqueio de IO. Ou seja, se o primeiro estágio de leitura estiver bloqueado aguardando a leitura estar pronta, chamamos isso de bloqueio de IO.

listenfd = socket();   // 打开一个网络通信套接字
bind(listenfd);        // 绑定
listen(listenfd);      // 监听
while(1) {
   
  connfd = accept(listenfd);  // 阻塞 等待建立连接
  int n = read(connfd, buf);  // 阻塞 读数据
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7