Análise do Spark kernel (3) Análise do princípio da arquitetura de comunicação do Spark

1. Visão geral da arquitetura de comunicação do Spark

A versão 2.x do Spark usa a estrutura de comunicação Netty como componente de comunicação interna.
Insira a descrição da imagem aqui
A nova estrutura de rpc do Spark com base no Netty baseia-se no design da Akka. É baseada no modelo de ator, conforme mostrado na figura a seguir: Cada componente (cliente / mestre / trabalhador) na estrutura de comunicação do Spark pode ser considerado um por um 独立的实体, e cada entidade passa por Mensagem para comunicar. A relação específica entre os vários componentes é a seguinte:
Insira a descrição da imagem aqui
Endpoint (Cliente / Mestre / Trabalhador) lá 1 个 InBox, e N 个 OutBox(N> = 1, N e dependendo de quantos outros Endpoint Endpoint se comunicam ou se comunicam com um correspondente da outra Endpoint OutBox), Endpoint 接收到的消息被写入 InBox,发送出去的消息写入OutBox ,并被发送到其他 Endpoint 的 InBox 中.

Dois, análise da arquitetura de comunicação do Spark

A arquitetura de comunicação do Spark é mostrada na figura abaixo:
Insira a descrição da imagem aqui
(1) RpcEndpoint: endpoint RPC, Spark chama cada nó (Cliente / Mestre / Trabalhador) de endpoint Rpc e todos implementam a interface RpcEndpoint. O design interno é diferente de acordo com as necessidades dos diferentes endpoints. Mensagens e processamento de negócios diversos, caso precise enviar (consulta), ligue para Dispatcher;

(2) RpcEnv: ambiente de contexto RPC, o ambiente de contexto do qual cada ponto de extremidade RPC depende durante o tempo de execução é chamado RpcEnv;

(3) Dispatcher: Distribuidor de mensagens, para terminais RPC que precisam enviar mensagens ou mensagens recebidas de RPC remoto, distribua-as para a caixa de entrada / saída do comando correspondente. Se o destinatário da instrução for ele mesmo, coloque-a na caixa de entrada; se o destinatário da instrução não for ele mesmo, coloque-a na caixa de saída;

(4) Inbox: Caixa de entrada da mensagem de instrução, um RpcEndpoint local corresponde a uma caixa de entrada, o Dispatcher adiciona o EndpointData correspondente ao ReceiverQueue interno toda vez que uma mensagem é armazenada na Caixa de entrada e um thread separado é iniciado quando o Dispatcher é criado. Pergunte ao ReceiverQueue para consumir mensagens da caixa de entrada;

(5) RpcEndpointRef: RpcEndpointRef é uma referência a RpcEndpoint remoto. Quando precisamos enviar uma mensagem para um RpcEndpoint específico, geralmente precisamos obter uma referência para o RpcEndpoint e, em seguida, enviar a mensagem por meio do aplicativo.

(6) OutBox: Caixa de saída da mensagem de instrução. Para o RpcEndpoint atual, um RpcEndpoint de destino corresponde a uma caixa de saída. Se enviar informações para vários RpcEndpoints de destino, haverá várias caixas de saída. Quando a mensagem é colocada na caixa de saída, ela é enviada via TransportClient. A mensagem é colocada na caixa de saída e o processo de envio é realizado no mesmo thread;

(7) RpcAddress: Representa o endereço do RpcEndpointRef remoto, Host + Port.

(8) TransportClient: cliente de comunicação Netty, uma OutBox corresponde a um TransportClient, TransportClient pesquisa a OutBox continuamente e solicita o TransportServer remoto correspondente de acordo com a informação do receptor da mensagem OutBox;

(9) TransportServer: servidor de comunicação Netty, um RpcEndpoint corresponde a um TransportServer, após receber a mensagem remota, o Dispatcher é chamado para distribuir a mensagem para a caixa de envio e recebimento correspondente;

Com base na análise acima, a visão de alto nível da arquitetura de comunicação do Spark é mostrada na figura a seguir:
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_43520450/article/details/108607367
Recomendado
Clasificación