quarta-feira, 25 de junho de 2008

Framework Error Hospital do Oracle SOA Suite - Parte 1

O Error Hospital consiste em padrão de projetos (Design Patterns) para prover tratamento de exceções com um serviço. Onde, para prover simplicidade e performance para os processos de negócios, os mesmos são projetados como assíncronos ou síncrono (“event short-lived”). Desta forma, quando uma exceção neste processos são lançadas, as mensagens são publicadas em um processo error hospital que então prover a gestão necessária, incluíndo intervenções humanas se necessário.


Com isto, é possível listar as instâncias dos processos BPEL que necessitam de uma intervenção humana para continuar seus fluxos em cenários onde:
  • As Transações distribuídas ficam em estados inconsistentes após todas as retentativas e rollbacks automatizados;

  • As Transações que deveriam sempre ser terminadas (assíncronas sem retorno via callback) não chegaram ao fim após todas as tentativas automatizadas;

  • As Transações distribuídas que ficam em estados inconsistentes após todas as retentativas e não tem rollbacks configurados.
O Framework Error Hospital está disponível a partir da versão 10.1.3.3 do Oracle SOA Suite, permitindo que definições de políticas de tratamento de erros em tempo de execução sejam definidas, tais como Remote Faults e Binding Faults.

Os Remote Faults ocorrem quando o serviço que o processo BPEL tenta invocar não pode ser localizado, por exemplo, no caso de uma falha de rede ou servidor. Assim, em caso de Remote Faults, o processo BPEL pode ser reiniciado. No caso dos Binding Faults, os mesmos indicam um desencontro entre prestador de serviços e consumidores. Neste caso, uma intervenção humana faz-se necessário. Veja o macro fluxo abaixo.


No próxima post deste tema, estaremos tratando a integração do Framework Error Hospital com o Oracle BAM para permitir o controle dessas instâncias em tempo real, provendo uma solução mais prá-ativa.

O BAM matou o BI?

BAM: Business Activity Monitoring
BI: Business Intelligence

Essa é uma pergunta que escuto com bastante frequencia por alguma pessoas quando estamos falando sobre SOA, mais especificamente sobre BAM.

Não, as ferramentas de BAM não acabaram com as aplicações das ferramentas de BI. Na verdade, o BAM é uma tecnologia nova para monitoramento em tempo real dos indicadores de desempenho das empresas. O mesmo é voltado para tomada de ações imediatas a partir do acesso a informação. Já o BI, é voltado para tomadas de decisões futuras a partir de informações históricas.

Com a tecnologia BAM muitos fornecedores de soluções BI passaram a incluir em seus produtos alguns mecanismos de monitoração e tomadas de decisões em tempo real.

Da mesma forma, posso armazenar informações históricas na base de dados do BAM, porém sua perfornse e resposta não será tão boa, pois as ferramentas que hoje o implementam não estão preparadas para isto.

Porém, eu particularmente continuo enchergando os BAM e BI com uma fronteira bem distinta. Onde, o BI é focado em "O que aconteceu" e o BAM "O que está acontecendo". Você acha que acabou? Não, ainda o tem "O que aconteceria?", e esse é implementado por ferramentas CPM (Corporate Performance Management).



Devo usar BPEL ou ESB?

A pergunta do título pode paracer estranha. Concordam? Mas, por incrível que pareça, muitos ainda se confrontam com essa dúvida em cenários onde os mesmos precisam implementar uma composição de serviços para atender a uma determinada situação.

Diante disto, eu decidi escrever neste post alguns aspectos que devem ser levados em consideração para sanar esta dúvida.

Bem, primeiramente nós sabemos e concordamos que ambos podem ser utilizados para a composição de serviços, inclusive podem ser utilizados em conjunto. Mas se eu tenho que decidi entre um e outro, qual devo usar?

Vamos então para alguns cenários:

1. Se o cenário alvo de implementação é focado apenas nos requisitos de conectividade, mensageria e roteamento, o ESB é a melhor opção. Entretanto, se o cenário é focado em atividades um pouco mais complexas tais como intervenções humanas (workflow) e orquestração para controlar como e quando os fluxos de dados vão sendo trocado entre sistema, o BPEL é a melhor opção.

2. Se o cenário é focado em processos de vida curta (short-lived) e baseado em armazenamento, transporte e simples transformação de mensagens, o ESB é a melhor opção. Porém, para processos de vida longa (long-lived) que podem ter que aguardar para se completar, além de necessidade de transformações de mensagens mais ricas e complexas, o BPEL volta a ser a melhor opção.

3. Se o cenário é direcionado para uma implementação de um processo cuja a natureza de virtualização (entede-se por transparência de localização) dos serviços seja necessária, fazendo com que o processo fique imutável caso ocorra alguma movimentação de serviços, o ESB é a melhor opção. Pois somente com BPEL, as URLs dos serviços estarão acopladas nos PartnerLinks do processo, e qualquer movimentação dos mesmos deve alterar o BPEL novamente. Assim, se nos cenário 1 e 2 o BPEL for a melhor opção e também se desejar a uma maior virtualização, utilize o BPEL para a composição de serviços com o ESB provendo essa virtualização.

Outro cenário que eu gostaria de descatar, que não recomendo a utilização BPEL, é para aquele onde o foco está em processos de migração de dados (e tem gente querendo ver o BPEL funcionando nestes processos), onde o volume de dados são muito grandes e uma boa performance é fundamental, eu sugiro a utilização de ferramentas especializadas tais como Oracle Data Integrator, Informatica Power Center, dentre outras, por garantirem estes requisitos além de fornecer melhor controle transacional, agendamentos, filtros, transformações específicas de um formato para outro, qualidade dos dados, dentre outros benefícios.

Porém, se mesmo assim você quer utilizar o BPEL, recomendo não buscar todos os dados a mesmos tempo e acionar o seu processo, sugiro você implementar um polling (listener service) que a medidas que os dados vão chegando ou vão sofrendo alguma alteração, os mesmo serão automaticamente migrados pelo processo. Além disso, sugiro compor o serviço de polling e o processo BPEL através do ESB.

Espero ter colaborado com alguma coisa. Qualquer dúvida ou sugestão estou a disposição.