SaaS - Software as a Service - Uma visão sobre o software como serviço.

Olá pessoal, tudo certo?

SOA, SaaS, S+S, ESB, WEB 2.0 e VIRTUALIZAÇÃO são de fato temas constantes em muitas mesas de discussão de arquitetos. Estão entre as mais quentes definições de arquitetura de hoje em dia. Assim, vamos atacar um desses temas hoje, o SaaS - Software as a Service (Software como Serviço).

Alguns especialistas afirmam que o mercado ao redor de SaaS envolve cifras em torno de US$ 5 bilhões. Ainda, de acordo com o Gartner Group, SaaS representou cerca de 5% do mercado total de software em 2005 e até 2011, deverá representar 25% das vendas totais para o segmento corporativo. O uso de SaaS para a automação dos processos de negócio fim-a-fim, como ordens de pagamento para grandes empresas por exemplo, deve crescer ainda mais nos próximos anos.

Do wikipedia, tiramos a seguinte definição:

"Software as a service (SaaS) is a software application delivery model where a software vendor develops a web-native software application and hosts and operates (either independently or through a third-party) the application for use by its customers over the Internet. Customers do not pay for owning the software itself but rather for using it. They use it through an API accessible over the Web and often written using Web Services or REST. The term SaaS has become the industry preferred term, generally replacing the earlier terms Application Service Provider (ASP) and On-Deman." [6]

Em poucas palavras teríamos que SaaS é um software distribuído como um serviço, implementado em plataforma web de forma nativa e acessado usando tecnologias e protocolos de internet. Do ponto de vista do usuário, é um software que não é instalado localmente na infra-estrutura do cliente (on-premise), mas é utilizado através da web e pago pelo tempo de uso, por demanda. Desse modo, um software SaaS envolve mecanismos de tarifação e métricas de uso e billing. Ainda, é um software que fornece uma API para acesso pela web, através de Web services, serviços REST e outros. Do ponto de vista da arquitetura, podemos dizer que SaaS envolve uma infra-estrutura escalável, altamente configurável e multi-inquilino.

Conceitos e Princípios

Quando pensamos em SaaS, o conceito de multi-inquilino deve ser colocado. Ele é referente ao uso do mesmo software e instância por vários clientes e empresas de forma simultânea. Em apresentações sobre SaaS, o termo tenant é utilizado para designar o inquilino, ou cliente que acessa o software pela web. O objetivo dessa abordagem é disponibilizar os mesmos recursos de software para um número muito maior de clientes. E essa visão tem suas bases no conceito da "Cauda Longa" .

Se você ainda não leu um livro chamado "The Long Tail", é o primeiro passo que indico para um entendimento completo do tema SaaS.

The Long Tail: Why the Future of Business is Selling Less of More
por Chris Anderson
Ref.: https://www.amazon.com/LONG-TAIL-FUTURE-BUSINESS-SELLING/dp/1401302378

Veja o desenho abaixo sobre a visão da Cauda Longa:

image

O gráfico demonstra que, conforme baixamos o custo de adoção, um número maior de clientes pode adotar nossa solução. E esse número tende ao infinito, uma vez que a curva não toca o eixo "x". Assim, no modelo SaaS de fornecimento de software, precisamos pensar em soluções e infra-estruturas de baixo custo, com alto aproveitamento de recursos por um número muito grande de clientes, para atingirmos um público não suportado hoje em dia, devido os custos proibitivos de entrada.

Outro conceito importante do modelo é o "micro-pagamento". Na cauda longa, um número muito grande de usuários poderá adotar nossa solução pagando pelo uso, por demanda, o que deve gerar um valor muito baixo de ticket. Porém, estamos realmente buscando o chamado "milhões de mercados de poucos" ao invés dos atuais "poucos mercados de milhões".

Fica claro o impacto na construção de uma arquitetura SaaS. Existem diversas necessidades de tecnologia e infra-estrutura que precisam ser atendidas para que esse novo modelo seja suportado. Um modelo de maturidade SaaS é apresentado a seguir, conforme discussão que encontramos no artigo "Architecture Strategies for Catching the Long Tail" de Frederick Chong and Gianpaolo Carraro [1]:

image [1]

Note que no primeiro quadrante, a solução possui uma instância dedicada para cada inquilino (tenant). Isso garante um completo atendimento das demandas do cliente, mas com elevado custo devido ausência de compartilhamento de recursos e customização elevada. Também no quadante 1, cada cliente é atendido por uma instância dedicada da solução. No quadrante 2, a solução ainda apresenta uma instância dedicada para cada inquilino, porém, já é possível observar que a solução é a mesma, com nenhuma customização presente. Isso garante um custo menor de manutenção, já que a mesma solução atende a diversos clientes. No quadrante 3, a solução é multi-inquilino (multi-tenant) e apresenta total compatilhamento de recursos, havendo uma única instância para todos os clientes. Note que questões importantes para o tratamento de metadados, assim como manutenção e modelagem do banco de dados estão presentes aqui. Finalmente, o quadrante 4 permite um atendimento diferenciado para inquilinos que exigem elevada demanda de recursos, havendo uma carga balanceada na infra-estrutura do provedor da solução SaaS (o chamado tenant load balancer).

Falamos rapidamente de um modelo de maturidade SaaS, onde notamos alguns pontos importantes como um serviço de metadados, assim como questões para se garantir um base de dados com facilidades para o tratamento multi-inquilino.

A partir dos elementos descritos acima, uma arquitetura de alto nível para um modelo SaaS é proposta abaixo:

image [1]

Note que essa visão exige uma arquitetura diferenciada, assim como uma discussão seguinte sobre os modelos de multi-inquilino para o banco de dados. Algumas opções possíveis são:

  • bases de dados separadas por inquilino;
  • mesma base de dados, com inquilinos separados por schemas;
  • mesma base de dados, com inquilinos com schemas compartilhados, etc.;

Finalmente, vamos falar um pouco sobre os principais atores do mundo SaaS e seus interesses:

image

Veja que cada ator possui perspectivas diferentes sobre os benefícios da visão SaaS:

  • Para os consumidores de solução SaaS: maior controle, permitindo o teste da solução antes da compra, pagamento pelo uso, tarifação por demanda, menor risco de implantação;
  • Para agregadores de soluções e ISV's: possibilidade de criação de novos mercados, oferecendo aplicações compostas e plataformas de integração;
  • Para ISV's: possibilidade de novos modelos de negócio, fundamentados na Cauda Longa, o que deve exigir uma reengenhaira das soluções atuais;
  • Para Hosters e provedores SaaS: oferecer serviços compartilhados, como billing, SLA, monitoração, provisionamento, etc, para ISV's SaaS clientes;
  • Para Hosters clássicos: possibilidade de evolução para serviços com maior valor agregador, rumo ao modelo de hoster SaaS.

Nesse ponto, surge a necessidade de vermos algum código. Como exemplo de solução que implementa essa visão SaaS temos o LitwareHR, uma solução multi-inquilino que está disponível no Codeplex para o público:

Litware HR - A Multitenant sample application
Ref.: https://www.codeplex.com/LitwareHR

Finalmente, o arquiteto Otávio Coelho publicou recentemente um post sobre o tema, onde ele toca num dos pontos nevrálgicos da discussão aqui no Brasil, o dilema do ovo e da galinha, veja aqui :)

Hospedagem de aplicações SaaS
Ref.: https://blogs.msdn.com/otavio/archive/2008/03/04/hospedagem-de-aplica-es-saas.aspx

De fato, não temos mais hosters (ou Application Service Providers) capacitados a operar soluções SaaS porque não temos soluções implementadas nesse modelo pelos ISV's ou é o contrário - não temos implementações SaaS de fornecedores porque não temos hosters capacitados a suportar uma infra-estrutura diferenciada como o modelo exige em sua definição?

A discussão é boa...deixe também sua opinião aqui no blog...

Como leitura adicional indico:

[1] Architecture Strategies for Catching the Long Tail
por Frederick Chong and Gianpaolo Carraro
Ref.: https://msdn2.microsoft.com/en-us/library/aa479069.aspx

[2] Multi-Tenant Data Architecture
por Frederick Chong, Gianpaolo Carraro, and Roger Wolter
Ref.: https://msdn2.microsoft.com/en-us/library/aa479086.aspx

[3] O Barramento de Serviços para a Internet
por Donald F. Ferguson, Dennis Pilarinos, e John Shewchuk
Ref.: https://www.microsoft.com/brasil/msdn/arquitetura/journal/Bar_int_Services.mspx

[4] Software + Services (S+S)
Ref.:  https://msdn2.microsoft.com/en-us/architecture/aa699384.aspx 

[5] The Architects in Action Series presents...A SaaS Solution
Ref.: https://msdn2.microsoft.com/en-us/skyscrapr/aa699403.aspx

e ainda...

[6] Software as a service no Wikipedia
Ref.: https://en.wikipedia.org/wiki/Software_as_a_Service

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

Waldemir.