A arquitetura de aplicativo monolítico convencional para aplicativos de servidor passou recentemente por uma mudança de paradigma na indústria de software, e a arquitetura de microsserviços está atualmente tomando seu lugar. A ideia de uma coleção de módulos leves e frouxamente conectados, cada um representando uma única funcionalidade e executada em seus processos, tem sido bastante popular e por boas razões. Escalabilidade, confiabilidade e alta disponibilidade são possibilitadas pela arquitetura de microsserviços, pois cada serviço separado é criado, gerenciado e testado independentemente, sem quaisquer dependências.
Como os microsserviços são fracamente acoplados, faz sentido que um agente de mensagens se encaixe nessa infraestrutura para permitir a comunicação assíncrona de microsserviços, mantendo o desacoplamento. A comunicação assíncrona significa que nenhum dos serviços precisa esperar pelo outro. Para isso, o modelo de publicação-assinatura tem sido amplamente adotado como meio de comunicação entre microsserviços.
NCache é um armazenamento de dados distribuído em memória para .NET e fornece publicação/assinatura em memória rica em recursos para comunicação orientada a eventos. Por isso, NCache pode ser facilmente configurado como um agente de mensagens para comunicações assíncronas entre microsserviços usando o modelo Pub/Sub.
NCache Adicionar ao carrinho Mensagens e eventos do Pub/Sub Pub / Sub NCache Docs
utilização NCache Pub/Sub na memória para microsserviços
O Pub/Sub está ativado em NCache definindo um tópico no qual os microsserviços (construídos em .NET/.NET Core) pode publicar eventos, bem como assiná-los. Os eventos são publicados fora do microsserviço, para o NCache corretor de mensagens. Cada microsserviço de assinante contém um manipulador de eventos para manipular o evento apropriado depois que o microsserviço do editor o publica. Um diagrama simples e lógico dessa arquitetura é destacado na Figura 1:
Para .NET/.NET Core microsserviços, NCache atua como um barramento de eventos ou intermediário de mensagens através do qual as mensagens são retransmitidas para um ou mais assinantes. Para mais detalhes sobre o NCache modelo Pub/Sub, consulte o NCache documentação ou nosso blog em utilização NCache como Pub/Sub na memória.
Esta postagem do blog usa o eShopOnContainers aplicativo de exemplo estendido com NCache e carregado no GitHub. O projeto injeta NCache como um barramento de eventos para a coordenação de aplicativos entre os microsserviços .NET. NCacheA função de neste aplicativo é mostrada na Figura 2.
NCache Adicionar ao carrinho Mensagens e eventos do Pub/Sub Pub / Sub NCache Docs
Exemplo rápido de uso NCache Pub/Sub na memória
Com o eShopOnContainers aplicação, NCache atua como um intermediário de mensagens em vários cenários. Um cenário destacado aqui é o evento de checkout do usuário em que os detalhes da cesta são publicado ao NCache barramento de eventos, e o aplicativo de pedidos pode ter subscrito para qualquer cesta recebida no checkout do usuário para processar o pedido.
- Publicar: Este trecho de código simplificado mostra uma parte da lógica de checkout da cesta no microsserviço Basket.API, onde a ID do usuário e todos os detalhes da cesta, como endereço, número do cartão e mais, são adicionados como uma carga de mensagem e publicados no barramento de eventos. O código Basket.API pode ser encontrado em BasketController.cs aula no GitHub.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Route("checkout")] [HttpPost] public async Task<ActionResult> CheckoutAsync([FromBody]BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = GetUserIdentity(); basketCheckout.RequestId = GetRequestID(); var basket = await GetBasketAsync(userId); var userName = User.FindFirst(x => x.Type == "unique_name").Value; var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.Address, basketCheckout.CardNumber, basketCheckout.RequestId, basket); // This message is published to the NCache Pub/Sub store eventBus.Publish(eventMessage); } |
- Inscrever-se: O snippet de código a seguir é do microsserviço Ordering.API, cujo código é carregado no GitHub. Isso contém uma assinatura para o evento UserCheckout onde, uma vez que um usuário faz check-out da cesta, um evento é publicado como uma mensagem e o manipulador do assinante é chamado para processar o pedido posteriormente.
1 2 3 4 |
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
NCache Adicionar ao carrinho Mensagens e eventos do Pub/Sub Pub / Sub NCache Docs
Durabilidade da mensagem Pub/Sub com assinaturas duráveis
Como os microsserviços são fracamente acoplados, isso significa que os microsserviços podem entrar ou sair do aplicativo a qualquer momento. Além disso, e se você tiver alguma falha de rede durante a passagem de mensagens de alto tráfego? Isso significa que a conexão do microsserviço com o barramento de eventos deve ser resiliente o suficiente, para que as mensagens não sejam perdidas mesmo se a rede cair temporariamente.
NCache oferece dois tipos de assinaturas duráveis para acomodar a durabilidade de sua mensagem entre seus .NET/.NET Core microsserviços:
- Assinaturas duráveis compartilhadas: Vários assinantes podem assinar uma assinatura. O método Round Robin é usado para enviar mensagens para vários assinantes. Mesmo que algum assinante saia da rede, as mensagens entre os assinantes ativos continuam a ser distribuídas.
- Assinaturas duráveis exclusivas: Uma assinatura tem apenas um assinante ativo por vez. Nenhuma solicitação de novo assinante é aceita na mesma assinatura até que a conexão esteja ativa.
NCache Adicionar ao carrinho Mensagens e eventos do Pub/Sub Pub / Sub NCache Docs
Confiabilidade da comunicação com tentativas de conexão
Como os microsserviços dependem da rede para comunicação, pode haver falhas de rede indesejadas que exigiriam um mecanismo de estabelecimento de conexão. Desta forma, NCache mantém uma plataforma de comunicação confiável com tentativas de conexão e mantenha vivo recursos para garantir que seu .NET/.NET Core os serviços tentam se conectar automaticamente ao cache em caso de falha de rede. Isso elimina a necessidade de políticas de repetição por qualquer biblioteca de terceiros, como Polly.
NCache Adicionar ao carrinho Novas tentativas de conexão Confiabilidade da Comunicação NCache Docs
Sua marca NCache?
À medida que as organizações estão adotando a arquitetura de microsserviços sobre aplicativos monolíticos, NCache torna-se seu armazenamento de dados distribuído na memória para ser usado como um meio intermediário para seu .NET/.NET Core aplicações de microsserviços.
- Extremamente rápido e linearmente escalável: Estar na memória, NCache fornece comunicação mais rápida do que outras soluções Pub/Sub. Além disso, ser distribuído permite NCache para permitir que você dimensione em movimento à medida que adiciona mais servidores ao cluster do Message Broker para lidar com cargas maiores.
- Alta disponibilidade: NCache fornece uma arquitetura em cluster ponto a ponto dinâmica e autorrecuperável que garante nenhum ponto único de falha. Além disso, NCache replica de forma inteligente as mensagens e também fornece assinaturas duráveis para que não haja perda de mensagens caso um servidor de cache fique inativo, garantindo alta disponibilidade de seus microsserviços para comunicação. NCache também oferece alta disponibilidade quando você precisa aumentar o número de servidores no cluster, permitindo adicionar esses servidores em tempo de execução sem interromper o cluster.
- Nativo .NET Core: Para microsserviços integrados em .NET/.NET Core, NCache fornece um .NET 100% / .NET Core pilha nativa para integrar-se perfeitamente à sua pilha de aplicativos.
Para resumir, enquanto os microsserviços simplificam seu aplicativo em unidades lógicas, também se torna difícil gerenciar a comunicação entre eles. Conseqüentemente, NCache elimina a complexidade adicional de introduzir um agente de mensagens altamente disponível que também respeita a dissociação ao mesmo tempo.
Temos outro blog em Escalando o desempenho de microsserviços com cache distribuído. Vá verificar isso!
NCache Adicionar ao carrinho Baixar NCache Comparação de edições