Windows Workflow Foundation - Uma alternativa para a camada de processos numa arquitetura SOA.

Olá pessoal, tudo certo?

Nas últimas semanas, tenho conversado com alguns clientes que iniciaram suas primeiras visões sobre a camada de composição de processos e o consumo de serviços num ambiente SOA. Realmente, o assunto "Arquitetura Orientada a Serviços" ainda está bem presente no meio corporativo, pois muitas questões ainda estão em aberto.

Entre as considerações recorrentes nessa discussão temos:

  • O que é um serviço?
  • Quais são os patterns para criação de serviços?
  • Quais os mecanismos de conexão e comunicação entre serviços e aplicações LOB - Line Of Business?
  • Quais funcionalidades serão implementadas no formato de serviços?
  • Como organizar os sistemas e investimentos já existentes na organização?
  • Como publicar os serviços gerados?
  • Como consumir os serviços gerados?
  • Como administrar os serviços gerados?
  • O que é governança de serviços? ...entre outras...

Nesse post, vamos revisar alguns conceitos sobre a arquitetura SOA e falar um pouco sobre a implementação da Camada de Processos através do Windows Workflow Foundation, o WF do .NET Framework 3.0.

Quando pensamos no paradigma de distribuição e consumo de serviços, a figura abaixo é uma boa representação:

image 

Vemos que num ambiente orientado a serviços, existirá uma camada de implementação e integração com fontes de dados, sistemas legados e aplicações linhas de negócio (LOB - Line of Business Applications). Acima dessa camada, pensamos um conjunto de serviços atômicos que exportam de maneira consistente as funcionalidades das aplicações. Nessa camada é que existem as grandes considerações sobre anatomia de serviços, publicação, barramento de serviços, etc.

E para consumir esses serviços, podemos pensar na composição e na colaboração de uma camada de processos. Uma camada de processos pode ser organizada através de orquestrações ou fluxos de atividades ou ainda máquinas de estado, que através de regras de negócio decidem quais serviços serão consumidos. Note que sobre uma camada de processos, aplicações compostas podem oferecer uma rica oferta de funcionalidades para usuários corporativos finais. Aqui temos os chamados Mashups Corporativos.

Em teoria, o cenário acima é perfeito. Porém, para a implementação dessa visão muitos cuidados são necessários e a escolha das tecnologias corretas se torna crítica.

O Windows Workflow Fountation (ou simplesmente WF) é um framework componente do .NET 3.0 que permite a construção de orquestrações ou fluxos de atividades. Pense numa atividade como um trecho de código, manipulação de dados, interação com usuário, chamadas para web services ou serviços WCF que sejam necessários para um processo. Assim, em WF, um conjunto de atividades coordena pessoas e/ou software de forma organizada através de um fluxo de trabalho.

A figura abaixo apresenta um visão sobre a arquitetura geral do WF:

image

Note que todo workflow ou fluxo de atividades criado em WF é executado por um host. Esse host pode ser um serviço Windows, uma aplicação .NET ou mesmo um serviço WCF em execução. E nessa arquitetura, o Runtime Engine é o módulo responsável pela execução do fluxo de atividades. Como parte integrante desse ambiente temos o Visual Designer, uma interface integrada ao Visual Studio 2005 (via extensions) ou 2008 (de forma nativa) que permite a construção de fluxos de atividades WF de forma visual. Veja na figura abaixo um exemplo de workflow construído no Visual Designer:

image

Ao final, um fluxo de atividades WF deve gerar um assembly .NET, seja uma .DLL ou um .EXE de acordo com o tipo de host gerado. Esse assembly será executado numa máquina, que proverá o workflow para os demais sistemas. De fato, o assembly irá encapsular uma classe em .NET, com a seguinte estrutura:

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;

namespace MyWorkflowConsoleApplication
{
public sealed partial class MyWorkflow: SequentialWorkflowActivity
{
public MyWorkflow()
{
InitializeComponent();
}

        private void codeActivity_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("codeActivity_ExecuteCode");
}
}
}

Assim, uma vez dentro de um método ou trecho de código do workflow, temos acesso a todos os recursos e funcionalidades do .NET Framework, o que permite uma grande flexibilidade na construção e integração com outras aplicações. Note que da mesma forma, valerão as boas práticas de performance e recomendações para .NET no desenvolvimento de código de uma classe Workflow, como vista acima. Como boa prática, é importante evitar construções com um número excessivo de shapes de código. Assim, sempre que possível é melhor consolidar atividades num único shape ou simplesmente evitar um número elevado de chamadas para componentes externos, para que cada workflow seja simples e assim, com uma boa performance. Cada shape de código é implementado através de um método private void codeActivity_nonon(object sender, EventArgs e) , como visto no exemplo acima. Lembre-se que um workflow com alta latência terá impacto na performance final da aplicação front-end que o consome.

Enfim, tivemos aqui apenas uma introdução sobre o tema Windows Workflow Foundation e seu uso como alternativa para orquestrações na camada de processos de uma arquitetura orientada a serviços.

Como boas referências para avançarmos sobre o estudo do WF, recomendo alguns links:

Hands-on Labs for Windows® Workflow Foundation in C# and VB.NET
Ref.: https://www.microsoft.com/downloads/details.aspx?familyid=2e575633-e357-4ee7-aaff-34138f00e830&displaylang=en

BPEL for Windows Workflow Foundation March CTP
Ref.: https://www.microsoft.com/downloads/details.aspx?FamilyId=6D0DAF00-F689-4E61-88E6-CBE6F668E6A3&displaylang=en

Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)
Ref.: https://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&displaylang=en

Windows Workflow Foundation, Part 1 – by Dino Esposito
Ref.: https://msdn.microsoft.com/msdnmag/issues/06/03/CuttingEdge/

Windows Workflow Foundation, Part 2 – by Dino Esposito
Ref.: https://msdn.microsoft.com/msdnmag/issues/06/04/cuttingedge/default.aspx

E um bom livro é o lançamento do Paul Andrew, veja abaixo:

Presenting Windows Workflow Foundation
Ref.: https://www.amazon.com/Presenting-Windows-Workflow-Foundation-Andrew/dp/0672328488

Em posts futuros vamos discutir mais questões de otimização e performance sobre a camada de orquestração e o desenvolvimento sobre o Windows Workflow Foundation. Como sempre, fiquem ligados.

Por enquanto é só! Até o próximo post :)

Waldemir.