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
dubbo (apache alibaba java)
Motan (Weibo)
alcatrão (interno ao Tencent)
grpc
economia
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
O cliente chama a interface e vai até a classe proxy, monta a solicitação e a serializa, depois codifica o protocolo e envia
O servidor recebe a solicitação, realiza análise e desserialização do protocolo para obter os parâmetros da solicitação.
O servidor chama a implementação da interface com base nos parâmetros da solicitação e então monta a resposta
A resposta é retornada da mesma maneira
Como os dois módulos de rede estão conectados?
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
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
Facilite a criação de aplicativos distribuídos, dissocie serviços e expanda facilmente
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.
O RPC requer um centro de registro que possa detectar e visualizar dinamicamente as mudanças no serviço.
Funções ricas de gerenciamento em segundo plano, gerenciamento unificado de serviços de interface, sem percepção para o chamador, operação unificada
Protocolo simplificado, maior eficiência, alta privacidade e segurança
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ção,Escreva 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 estabilidade,Portanto, 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
Evite objetos que sejam muito complexos para serem construídos, que tenham muitos atributos e vários níveis de aninhamento
Evite objetos muito grandes: strings grandes, arrays muito grandes, etc.
Evite passar tipos como parâmetros que não são suportados pela estrutura de serialização
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
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
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.