Respondendo a Mudanças Rapidamente com CEP

Com a globalização e o aumento da competitividade no mercado local e global é comum que empresas multi nacionais comprem outros empresas e assim alcancem uma fatia de mercado maior. Por questões de riscos e custos nem sempre é possível ou viável re-escrever os sistemas que essas empresas já possuem. Esse é o clássico cenário para integração de sistemas.

CEP não é um técnica para integração de sistemas, não da maneira tradicional. CEP é um outro paradigma que se baseia no modelo de sistemas baseados em eventos. Suponha que você tem um sistema de aviação logo será necessário avaliar a previsão do tempo em diversos locais do mundo a medida que o tempo passa e o avião avança em sua rota. Para isso é necessário que sempre exista uma avaliação sobre essas condições climáticas e a partir do resultado disso (tudo em real-time) novas ações devem ser tomadas. Esse é o cenário ideal para utilizarmos uma técnica de CEP.

Para que Serve CEP?

As aplicações para CEP são muitas dentre elas gostaria de destacar:
  • Detecção de Fraudes
  • Logística e Operação de Vôos
  • Gerenciamento de SLAs
  • Analise em tempo real de páginas na Web
  • Automatização de supply chain
  • Monitoramento de Pacientes médicos
  • Mercado financeiro compra/venda


Entre tantas outras aplicações, se você quiser saber mais aplicações para CEP confira neste site aqui! Mas como essa técnica é um pattern você pode aplica-la em outras situações. Uma vez você entendendo bem o que ela é e como você pode implementar.

O que é CEP?

CEP é uma técnica para lidar com processamento de eventos complexos, imagine múltiplas fontes de eventos(sites na web, filas jms, arquivos txt, etc...) em grande quantidade, você pode encarar que um evento é uma mensagem pensando em MOM. A Idéia é que você possa tomar decisões em real-time baseado em dados que os eventos lhe entregam.

O Mercado financeiro utiliza CEP as previsões são que é 2010 o uso cresça para 50%. Normalmente nesse contexto o CEP é utilizado para por exemplo da situação de que se as ações da empresa X crescerem 2% nos últimos 30 minutos, então compre 5.000 ações da empresa X.

E isso deve ser feito em real-time, com CEP podemos fazer isso. E com a ajuda do Drools por exemplo podemos externalizar em regra em um conjunto de regras com um português estruturado (DSL). Juntando as duas tecnologias poderemos ter um sistema que responde a mudanças (em forma de eventos) de forma eficiente e parametrizável!

E seu eu usar um banco de dados?

Não vai dar certo. Estou falando de um volume de dados muito violento e mesmo que você coloque tudo em uma banco de dados você iria ter o tempo de carga, e iria ter que fazer a pesquisa, sem considerar que com a variação tão freqüente desse tipo de domínio iria ser complicado aplicar refactorings nessa base. Sem falar que os dados poderiam não estar em suas mãos, então só tempo de carga já poderia acabar com a sua janela de processamento, logo para esse tipo de problema você irá precisar muito mais do que um banco de dados.

PS: Nada contra o refactoring ou o banco de dados, mas não se encaixam nesse cenário.

Programação com Eventos é nova?

Não não é. Já existe há muitos anos, porem sempre utilizada da maneira *tradicional* com um base dedados onde você armazena os dados e depois faz consultas e a partir do resultado dessas consultas você toma ações, mas como eu disse antes isso não é real-time e não funciona em certos cenários descritos a cima.

Uma visão geral



CEP Básico

Na Figura a cima podemos ver um mecanismo CEP *visto de fora*. Aqui 3 bolsas de valores fictícias estão gerando eventos a cada subida e descida de ações das empresas. Os eventos podem ser mensagem que podem ser geradas nos mais diversos formatos, suponha que o Evento A é uma mensagem em XML publicada via WebService. O Evento B poderia ser outra mensagem só que publicada em um WebService REST com JSON por exemplo. O Evento C poderia ser um arquivo TXT que é enviado por e-mail por exemplo.

Dificilmente nesse contexto o arquivo seria mando em formato TXT, mas só quero exemplificar que os eventos podem ser de fontes, formatos, protocolos e plataformas diferentes. Então no desenho a engine CEP que é o quadrado cinza vê que ao ver o evento A e analisar os dados gera outro evento chamado de Evento D para a aplicação de finanças com ordens para vender 5% das ações da empresa X essa aplicação por fim conversa com a com a bolsa de valores e faz a operação.

Agora que você entendeu o contexto geral, podemos dar nomes aos bois :)


Arquitetura Completa com os "bois nomeados"


Na figura a cima podemos ver o mesmo desenho de antes só que agora explodido e com nomes nos componentes da solução. Bom aqui vocês podem perceber o Drools que é o Engine de Regras ele que irá fazer decisões em cima dos dados dos eventos assim ele pode rotear os dados para o sistema de Ações ou outros sistemas. Aqui aparece também o ESB que é usado como um grande HUB de mediação. Esse cara que acessa os eventos através de diversos protocolos como http, ftp, jms, etc... Tudo entra e sai através do CEP. Plugado ao ESB temos além do Drools o Esper que é um framework Java que implementa a técnica de CEP.

Nos próximos posts eu estarei mostrado como o Esper funciona e como podemos usa-lo em conjunto com outras tecnologias como o Drools. Como o assunto é muito extenso serão vários posts :)

Evoluindo ao ponto de BAM

BAM significa monitoramento de atividades de negócio. Você pode ter BAM através de CEP, você usa o CEP como técnica e gera interfaces que mostram ao usuário o que esta acontecendo os dados em real-time e da poder para que ele monitore isso e também poça efetuar tarefas em cima dos dados. A vantagem de se usar BAM é que a empresa ganha a capacidade de saber o que está acontecendo em real-time sendo assim ela pode tomar a decisão com mais velocidade e precisão. E tudo isso pode ser atingido através do uso de CEP!

Juntando Tudo

Quando juntamos a técnica de CEP através de uma arquitetura semelhante a que mostrei na ultima figura e desenvolvendo um conjunto de interfaces e operações para realizarmos BAM podemos dizer que possuimos uma Arquitetura EDA. Que se desenvolvida utilizando baixo acoplamento entre Serviços vamos chegar ao ponto de atingir SOA. Mais discussão sobre EDA e SOA vocês podem conferir nesses links:
Abraços e até a próxima.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java