Oobj utiliza tecnologia da Netflix para reduzir custo computacional

1
hystrix-netflix-oobj Tempo de leitura: 4 minutos

É comum que sistemas hoje em dia não funcionem sozinhos. Faz parte do core da maioria das aplicações a integração com outros sistemas para entregar valor ou para executar ações básicas. 

Na Oobj, sendo uma empresa que trabalha na integração com ERP’s e PDV’s para emissão de documentos fiscais, isso é uma realidade. Integrar de forma resiliente com este tipo de aplicação e com a própria Sefaz é o que torna nossas aplicações robustas.

Circuit Breaker

Em cenários de integração remota, é comum que alguma aplicação a qual consumimos serviços fique off-line ou não se comporte conforme esperado. Isso pode acarretar em travamento de recursos importantes em nossas aplicações enquanto aguardamos resposta ou tentamos atingir um host que está off-line. Para tratar este tipo de situação, existe um pattern chamado Circuit Breaker.

O pattern Circuit Breaker, funciona como um fusível elétrico. Ao perceber uma tensão sobre o circuito fora do esperado, o mesmo interrompe a conexão evitando que a falha estrague todo o resto em cascata. No caso do software, isto evita a exaustão de pools de conexão, ou da CPU por infinitas re-tentativas.

Netflix Hystrix

Existem diversas aplicações deste pattern nas diversas linguagens do mercado. Todas se baseiam em métricas, avaliar a saúde do serviço e decidir se ele está apto a responder de forma correta a requisição. Uma das principais implementações do pattern para a linguagem Java é provida pela biblioteca open source Netflix Hystrix . A biblioteca é de uso simples e necessita apenas de HystrixCommand para ativar boa parte de suas funcionalidades.

Hystrix Dashboard

Apesar de funcional, apenas o uso do pattern não entrega a visibilidade o Hystrix pode entregar. Para isso precisamos de um projeto adicional chamado Hystrix Dashboard . Ele permite à Equipe de Operações da Oobj ter visibilidade da saúde de todos os serviços de diversas Sefaz. Podemos ver isso no exemplo abaixo:

painel

O projeto do dashboard, apresenta informações como:

  • nome do circuito que está sendo apresentado (em nosso caso, ele carrega informações da UF, Modelo e Serviço que estamos consumindo);
  • porcentagem de falhas; e
  • tempo médio de comunicação com o serviço da Sefaz de cada estado.

Todas as informações providas pelo dashboard, são lidas de uma stream, que é publicada pelo serviço de métricas do Hystrix. Este serviço deve ser configurado na sua aplicação que utiliza o circuit breaker. A configuração pode ser feita utilizando um servidor Jetty Embedded. Abaixo o código de exemplo:

 

codigo

A partir daí, o serviço do dashboard poderá consumir essa stream para apresentações. Outras aplicações poderão utilizar a mesma para levantar métricas e gerar dados de qualidade do serviço.

Benefícios para os Usuários

No contexto do varejo, a latência tem que ser muito baixa. Em poucos segundos o cliente pode desistir de uma compra caso o Cupom Fiscal não seja emitido pelo PDV.

No  caso da NFCe, para que o cupom seja impresso é necessário que o software obtenha autorização. Essa autorização depende da disponibilidade da Sefaz Autorizadora e também dos Serviços Oobj que rodam na nuvem (AWS).

Desde o início do desenvolvimento do nosso Emissor de NFCe, implementamos um mecanismo de Contingência Offline Automática. Quando a Sefaz está fora do ar, o software automaticamente imprime o cupom em modo off-line e depois se encarrega de obter a autorização.

Antes, para esse mecanismo ser ativado, primeiro a aplicação fazia uma tentativa de envio da NFCe ou consultava a disponibilidade da Sefaz em questão. Isso requer tempo e consome recursos computacionais.

Com o Hystrix, nosso software tem informações da saúde do serviço e é capaz de acionar o mecanismo de contingência automaticamente sempre que perceber qualquer degradação. Sejam os próprios serviços da Oobj na nuvem ou o serviço de recepção/autorização da Sefaz. Com isso reduzimos o tempo de impressão dos cupons mesmo em condições adversas.

Por decisão arquitetural da Netflix, o Hystrix gera métricas por nó, e o acionamento do circuit breaker também. Ou seja, em um cluster de aplicação com 10 nós, você terá 10 métricas de circuitos sendo geradas. Para agregar todas estas métricas em uma só, a Netflix fornece mais uma aplicação chamada Netflix Turbine que é um agregador de qualquer tipo de stream. Seu uso é muito simples e portanto, falaremos sobre isso depois.

Esperamos que este artigo seja útil e traga uma melhora na visão arquitetural das integrações por aí. Abaixo alguns links relevantes sobre o pattern e a solução aplicada.

Até mais.

__

Sobre o autor:

Ricardo Faria

 

Ricardo Faria é super-herói, Desenvolvedor de Software 12 horas por dia, leitor de ônibus, e nas horas vagas, divide entre jogos e as cervejas especiais que ainda não experimentou.

 reading4dev.com

 

 

___

Circuit Breaker por Martin Fowler – https://martinfowler.com/bliki/CircuitBreaker.html

Building Microservices é um livro do autor Sam Newman. Além do pattern que falamos, o livro traz diversos outros patterns e visões sobre arquiteturas de integração voltados para microserviços:  https://www.amazon.com.br/Building-Microservices-Sam-Newman/dp/1491950358

Release IT! é um livro de Michael T. Nygard. Acredito que ele é um dos primeiros a trazer abertamente uma apresentação deste pattern no dia-a-dia: https://www.amazon.com/Release-Production-Ready-Software-Pragmatic-Programmers/dp/0978739213

Parâmetros de configuração do Hystrix: https://github.com/Netflix/Hystrix/wiki/Configuration

 

1 Comentário

  1. Tá de parabéns, Ricardo!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *