Dev (Back & Front)ARTIGO

Respondendo a mudanças rapidamente com CEP

Com a globalização e o aumento da competitividade no mercado local e global, é comum que empresas multinacionais comprem outras empresas e assim alcancem uma fatia de mercado maior. Por questões de riscos e custos, nem sempre é possível ou viável reescrever 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
  • Análise 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 aplicá-la em outras situações, uma vez que você entenda 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 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 um 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ó o 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 de 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, porém sempre utilizada da maneira

tradicional

com um base de dados 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 acima.

Uma visão geral

CEP BásicoCEP Básico

Na Figura acima 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 mensagens 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 mandado 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 \Arquitetura Completa com os \”bois nomeados\”

Na figura acima 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á tomar 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 mostrarei como o Esper funciona e como podemos usá-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 está acontecendo com os dados em real-time e dá poder para que ele monitore isso, e também possa 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 à que mostrei na última figura e desenvolvendo um conjunto de interfaces e operações para realizarmos BAM, podemos dizer que possuímos 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.

é Técnico em Processamento de Dados e graduando em Ciências da Computação(7º sem.) na Ulbra. Já trabalhou com desenvolvimento de software em VB, ASP, .NET e PHP. Atualmente é Arquiteto de Software criando soluções corporativas em Java. Certificado pela SUN com SCJP 5 e SCWD 5. Mantém o blog (diego-pacheco.blogspot.com).

Ver perfil