Avançar para o conteúdo principal

RPC (Remote Procedure Call)

RPC (Remote Procedure Call)

RPC (Remote Procedure Call) é um protocolo que permite que um programa solicite um serviço de outro programa localizado em uma rede sem precisar entender detalhes da comunicação de rede. É uma abstração que facilita a comunicação entre diferentes processos ou sistemas distribuídos.

Funcionamento do RPC:

  1. Cliente-Servidor: No RPC, existe uma divisão clara entre o cliente e o servidor. O cliente é quem faz a chamada para um procedimento remoto, e o servidor é quem implementa e executa o procedimento.
  2. Chamada de Procedimento: O cliente chama uma função ou procedimento que parece ser local, mas na verdade está sendo executado remotamente no servidor.
  3. Serialização e Deserialização: Os parâmetros da chamada de procedimento são serializados em um formato que pode ser transmitido pela rede. No lado do servidor, esses parâmetros são desserializados de volta em tipos de dados utilizáveis pelo código.
  4. Transparência: O RPC oferece uma abstração que torna a comunicação entre cliente e servidor transparente. Ou seja, o cliente não precisa se preocupar com os detalhes de como os dados são transmitidos ou como o servidor implementa a lógica.
  5. Protocolos e Frameworks: Existem vários protocolos e frameworks RPC, como gRPC, Apache Thrift, SOAP, CORBA, entre outros. Cada um desses tem suas próprias características e propósitos, mas todos compartilham o mesmo objetivo básico de facilitar a comunicação entre processos distribuídos.

Exemplo de RPC usando gRPC (em Python):

Aqui está um exemplo simples de como um cliente pode chamar um procedimento remoto usando gRPC em Python:

Arquivo example.proto (Definição de Mensagem e Serviço):

syntax = "proto3";

message Request {
  string name = 1;
}

message Response {
  string message = 1;
}

service Greeter {
  rpc SayHello (Request) returns (Response);
}

Implementação do Servidor em Python:

import grpc
from example_pb2 import Request, Response
from example_pb2_grpc import GreeterServicer, add_GreeterServicer_to_server

class GreeterService(GreeterServicer):
    def SayHello(self, request, context):
        return Response(message=f"Hello, {request.name}!")

def serve():
    server = grpc.server(grpc.insecure_channel())
    add_GreeterServicer_to_server(GreeterService(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

Implementação do Cliente em Python:

import grpc
from example_pb2 import Request
from example_pb2_grpc import GreeterStub

def run():
    channel = grpc.insecure_channel('localhost:50051')
    stub = GreeterStub(channel)
    response = stub.SayHello(Request(name='Alice'))
    print("Resposta do servidor:", response.message)

if __name__ == '__main__':
    run()

Explicação do Exemplo:

  • Protocolo Protobuf: example.proto define mensagens (Request e Response) e um serviço (Greeter) usando Protocol Buffers.
  • Servidor: Implementa o serviço Greeter definido em example.proto. Ele recebe solicitações do cliente, executa o procedimento (SayHello neste caso) e retorna uma resposta.
  • Cliente: Chama o procedimento remoto SayHello no servidor gRPC. Ele cria um canal para se comunicar com o servidor, cria um stub (proxy) para o serviço Greeter e invoca o método SayHello com um objeto Request.

O RPC, neste caso usando gRPC, permite uma comunicação eficiente e estruturada entre processos distribuídos usando mensagens serializadas e uma definição clara de serviço e método. Isso facilita muito o desenvolvimento de sistemas distribuídos, micro-serviços e APIs que precisam escalar e manter a eficiência de comunicação.

Comentários

Mensagens populares deste blogue

Sistema de Recomendação do Twitter

Sistema de Recomendação do Twitter O sistema de recomendação complexo do Twitter, onde múltiplos componentes trabalham em conjunto para selecionar e classificar os tweets que são exibidos para os usuários na aba "Para você". Vamos descrever cada componente e fase do processo, ilustrando com diagramas e exemplos de código onde aplicável. Fases do Sistema de Recomendação Candidate Sourcing Esta fase é responsável por selecionar os tweets candidatos que podem ser recomendados ao usuário. Os candidatos são coletados de diferentes fontes e algoritmos, como RealGraph, TweepCred, Trust & Safety, GraphJets, etc. Light Ranker (Earlybird) Depois de obter os candidatos, um modelo de machine learning leve (light ranker) faz uma primeira classificação desses tweets. Heavy Ranker Os tweets classificados pelo light ranker são então processados por um modelo mais pesado e complexo (heavy ranker) para uma classificação mais precisa. Heurísticas e Filtros Após o ranqueamento dos tweets, el...

REPL (Read-Eval-Print Loop)

REPL (Read-Eval-Print Loop) O termo "REPL" se refere a "Read-Eval-Print Loop", que é um ambiente interativo usado em muitas linguagens de programação e sistemas. Aqui está uma explicação detalhada: O REPL é um ciclo de interação que permite aos desenvolvedores escrever comandos ou expressões, avaliá-los imediatamente, obter os resultados dessa avaliação e, em seguida, repetir o processo. É uma ferramenta poderosa para explorar e experimentar com uma linguagem de programação de forma interativa. Componentes do REPL: Read (Ler) : O REPL lê (ou recebe) a entrada do usuário, que pode ser uma expressão, um comando ou uma linha de código. Eval (Avaliar) : Após ler a entrada do usuário, o REPL avalia (executa) a expressão ou comando fornecido. Isso envolve interpretar a sintaxe da entrada e calcular o resultado correspondente. Print (Imprimir) : Após avaliar a expressão, o REPL imprime o resultado dessa avaliação na tela para que o usuário possa ver. Loop (Laço) : Após im...

Binary Tree e BST Explained

Árvore binária e BST explicada Na computação, a árvore binária (ou binary tree, em inglês) é uma estrutura de dados hierárquica composta por nós, onde cada nó tem no máximo dois filhos: um filho à esquerda e um filho à direita. Esta estrutura é amplamente utilizada em várias áreas da ciência da computação, como organização de dados, algoritmos de busca, compressão de dados, entre outros. Estrutura da Árvore Binária Componentes da Árvore Binária Nó (Node) : Cada elemento da árvore é chamado de nó. Ele contém um valor ou dado e referências (ponteiros) para seus filhos. Raiz (Root) : O nó superior da árvore. É o ponto de entrada e não tem pai. Filhos (Children) : Nós que descendem de um outro nó. Cada nó pode ter até dois filhos. Folhas (Leaves) : Nós que não têm filhos. Subárvore (Subtree) : Qualquer nó com todos os seus descendentes forma uma subárvore. Tipos de Árvores Binárias Árvore Binária Completa : Todos os níveis, exceto possivelmente o último, estão completamente preenchidos, e ...