Qual é a diferença entre o modelo do ator e os microsserviços?

23

Ambos parecem ser uma rede paralela de processos de comunicação MPI. Eu identifico atores com serviços. Os atores são mais dinâmicos (você pode criá-los e matar como a respiração, enquanto a rede de serviços é mais estática) ou o quê?

Little Alien
fonte
1
speakerdeck.com/rore/…
Robert Harvey

Respostas:

11

Modelo de ator - é um modelo matemático para cálculos simultâneos e microsserviços - uma implementação da arquitetura orientada a serviços. As semelhanças são bastante coincidentes.

Certamente é possível construir microsserviços com base em algum modelo de ator e modelar alguma arquitetura de microsserviço com o modelo de ator, mas isso não significa que eles sejam equivalentes. Substitua "sistema de microsserviço" por "sistema de email", e isso ainda será verdadeiro. Substitua "modelo de ator" por "Comunicando processos sequenciais" (CSP) e também será "verdadeiro", porque os sistemas de modelo de ator e de CSP podem ser modelados um pelo outro.

Dado o modelo de ator, você pode implementá-lo usando microsserviços, SOA ou até e-mail, mas isso não significa que eles estejam no mesmo nível de abstração para realmente comparar.

Além disso, o modelo de ator enfatiza os buffers (podem ser vistos como filas de mensagens no mundo dos microsserviços); portanto, alguns atores / microsserviços podem não estar prontos enquanto a comunicação inerentemente assíncrona ainda é possível.

Em outras palavras, a comparação com o modelo de ator pode trazer algumas idéias criativas com um nível muito alto de consideração, mas principalmente são maçãs versus laranjas.

Se o objetivo é comparar o modelo matemático de SOA / microsserviços ao modelo Actor, também não é trivial, porque: 1) não há um modelo matemático acordado para SOA; 2) o modelo geralmente inclui o objetivo. E a modelagem de SOA / microsserviços provavelmente será diferente da finalidade do modelo de ator. Um exemplo de tentativa de modelar SOA aqui .

Obviamente, é possível criar um sistema de modelo de ator com microsserviços e chamar cada serviço de ator (consulte a definição estrita do que é modelo de ator). Mas isso não significa que exista qualquer relação significativa entre os dois no sentido geral.

Roman Susi
fonte
Quero dizer que o modelo de ator não pode ser comparado com microsserviços no mesmo nível. Deixe-me atualizar minha resposta
Roman Susi
Eu não disse isso. Os microsserviços podem implementar o modo de ator, assim como os programas de montagem ou C. Mas não digo que sempre o fazem ou mesmo com frequência. E sim, Erlang também é um exemplo de implementação de modelo de ator. Não tenho certeza se entendi seu argumento.
Roman Susi
Desculpe, li pela primeira vez que os atores são um modelo matemático e os uServices implementam (esse modelo). Eu não notei que eles implementam a arquitetura de serviço. Então, minha pergunta é como dois modelos matemáticos, Atores e SOA, se comparam. Um serviço é algo que possui um loop de mensagem que aceita solicitações e gera mensagens de resposta. É isso que o ator é / faz. Qual é a diferença do microsserviço em SOA? Em outras palavras, quando tenho uma rede distribuída de serviços, devo me referir a eles como microsserviços ou atores?
Estrangeiro pequeno
Observe que este é um site de perguntas e respostas, não um fórum ou feed de notícias. Monikers como UPDATE e EDIT não são necessários; todas as postagens no Stack Exchange já têm um histórico de edição detalhado que qualquer pessoa pode visualizar.
Robert Harvey
1

Os microsserviços são uma maneira de organizar o software dividindo cada área de preocupação em seu próprio artefato implementável (executável, script, JAR, WAR, etc.). Isso oferece flexibilidade, por exemplo, permitindo escalar implementando mais instâncias onde elas são necessárias. Digamos que os usuários passem mais tempo olhando seu catálogo do que adicionando itens a um carrinho de compras; um artefato implementável lida com funções de catálogo, outro lida com funções de carrinho de compras - você pode executar mais cópias dos serviços de catálogo para lidar com a carga.

Também os isola de mudanças internas. Digamos que você mude de um banco de dados relacional para um banco de dados de documentos para armazenar dados do produto - é provável que seus serviços de carrinho de compras não precisem ser alterados.

O modelo de ator é um nível inferior ao artefato implementável, mais sobre com que tipos de objetos você implementou o serviço. Continuando com o exemplo acima, você pode ter os carrinhos de compras em seu sistema representados por atores, portanto, o carrinho de cada usuário é um ator distinto, e as mensagens dizem para ele adicionar itens, remover itens, responder com o conteúdo atual, adicionar remessa, verificar , etc. Nesse caso, você ainda possui um microsserviço, que é implementado com o modelo de ator.

Rob Crawford
fonte
Quando você disse que você pode ter várias instâncias do mesmo serviço, comecei a pensar que é oposto: serviço é um tipo Considerando que os agentes são objetos :)
Estrangeiro pequeno
Os atores não podem ser implantados individualmente? Você tem certeza? dotnet.github.io/orleans/Documentation/Grain-Versioning/…
Daffy Punk
Para mim, parece que há, implementação sábio, talvez um pouco de uma convergência que ocorre entre os dois conceitos ...
Daffy Punk
1

Eu diria que a principal diferença é a granularidade.

Para o modelo de ator, é relativamente refinado, pois um ator tende a representar o equivalente a um objeto no OOP.

Para microsserviços, é relativamente granular, pois um único microsserviço pode consistir em um grande número de atores ou objetos.

Observe que você realmente não precisaria exagerar muito sua imaginação para dizer que a web moderna é exatamente a mesma coisa com uma granularidade ainda maior ("macro-serviços"); e que (por exemplo) um servidor HTTP é um serviço de macro, um servidor de banco de dados é um serviço de macro, um navegador da web é um serviço de macro etc.

É praticamente o mesmo - peças isoladas que se comunicam. É apenas o tamanho das peças (e, portanto, o número de peças) que muda.

Brendan
fonte
Todo aplicativo java, por maior que seja, é um único objeto. Os objetos são feitos de outros objetos e podem aumentar indefinidamente. Eu acho que os uServices também são tipos de aplicativos feitos de outros objetos.
Estrangeiro pequeno
0

Os microsserviços são escalonados horizontalmente, criando várias réplicas, cada uma capaz de atender solicitações devido à natureza sem estado do serviço. Eles são resistentes ao fracasso em virtude de sua natureza apátrida.

Os atores são escalonados, movendo-os para partições com menos carga ou mais recursos disponíveis. Eles são stateful . Eles são resistentes ao fracasso porque - dependendo da estrutura do ator - outro ator pode ser ativado dinamicamente ou um backup quente do ator pode ser mantido o tempo todo para lidar com a falha do ator principal.

Novamente, os microsserviços também podem ter um estado, mas isso contraria os princípios de design dos microsserviços.

Sushant
fonte