O blog da AWS

Otimizando a visibilidade de custos por tenant em soluções SaaS

Por Ujwal Bukka, arquiteto sênior de soluções de parceiros — AWS

Um dos principais desafios na operação de uma solução de software como serviço (SaaS) é medir o consumo de recursos por tenant para entender seus padrões de uso, atribuir custos e muito mais. A natureza dinâmica do ambiente SaaS e as mudanças nas necessidades o tornam ainda mais desafiador.

Neste blog, discutiremos estratégias para medir o consumo de recursos dos tenants e daremos exemplos de como essas estratégias poderão ser aplicadas ao seu ambiente SaaS para obter uma melhor alocação de custos. Falaremos brevemente sobre como os dados de consumo de recursos do tenant poderão ser usados para otimizar sua arquitetura SaaS, melhorar a operação do ambiente SaaS e orientar as decisões de negócios.

Medir o consumo de recursos do tenant é crucial para determinar o custo de operação do seu ambiente SaaS, calcular o custo por tenant, traçar o perfil de atividade e dos padrões de consumo dos tenants e coletar mais insights relacionados.

Esses insights são valiosos para equipes de negócios que tomam decisões estratégicas sobre como criar, vender e comercializar sua aplicação SaaS, e para equipes técnicas, esses dados poderão ser utilizados para tomar decisões estratégicas sobre como projetar, escalar e operar vários tipos de componentes em suas aplicações SaaS.

Medindo os desafios do consumo de recursos

Com base na indústria em que você está criando sua solução SaaS, você pode ter tenants que compartilham recursos (modelo de pool) e pode haver tenants que necessitem de um conjunto separado de recursos apenas para eles (modelo de silo). Embora isso afete a forma de medir o consumo de recursos do tenant, não será a única dimensão de medição.

Em alguns casos, medir o consumo de recursos envolve aferir métricas em nível de aplicação, como solicitações de APIs e contagem de transações, todas obrigatórias para calcular o custo por tenant. Consulte este blog para entender os desafios da medição do consumo de recursos e da atribuição de custos com mais detalhes.

Estratégias para medir o consumo de recursos

Medir o consumo de recursos exige que os provedores de SaaS criem um modelo de mapeamento de consumo que represente uma visão clara de como os tenants estão consumindo os recursos do seu sistema, conforme mostrado na Figura 1.

Mapeamento do consumo de recursos do tenant

Figura 1 — Mapeamento do consumo de recursos do tenant

O objetivo é chegar a um conjunto de dados que permita alocar uma porcentagem do consumo para cada tenant do seu sistema. Montar essa visão do consumo pode ser um desafio em um ambiente multitenant em que os tenants podem compartilhar alguns ou todos os recursos do sistema. Consulte este workshop para entender como você pode coletar o consumo do tenant, obter a porcentagem do consumo do tenant e calcular o custo por tenant.

Não há um modelo único para medir o consumo de recursos do tenant que se adapte a todas as arquiteturas, mas sim algumas estratégias comuns que você deve considerar ao selecionar uma estratégia para sua aplicação. Primeiro, analise o perfil geral de custo do seu ambiente SaaS e determine como sua aplicação está influenciando os custos em sua fatura. Você pode observar que algumas partes da sua arquitetura estão contribuindo mais para seus custos (como armazenamento de dados ou uso de recursos computacionais, por exemplo). Para obter os insights mais significativos em termos de custo, comece com a coleta de dados sobre essas partes. Não vale muito a pena gastar tempo em áreas que contribuem menos para sua fatura.

Para obter visibilidade dos componentes de alto custo, você pode escolher entre duas abordagens ou combiná-las.

  1. Abordagem superficial: que é menos invasiva e é usada para ter um consumo aproximado dos tenants;
  2. Abordagem detalhada: na qual você adicionará instrumentação de medição, publicará eventos relacionados a custos e agregará e resumirá métricas de consumo.

Ambas as abordagens podem ser usadas tanto na infraestrutura quanto no nível da aplicação. A escolha da abordagem se resume a equilibrar o nível de detalhes de consumo que você procura e a complexidade de instrumentar e capturar os dados necessários para atribuir o consumo. Recomendamos considerar qual abordagem é mais adequada no nível do componente (ou seja, microsserviço ou funcionalidade), em vez de usar uma abordagem para todo o ambiente SaaS. Agora que explicamos sobre as abordagens, vamos analisá-las com mais detalhes.

Abordagem superficial

Essa abordagem trata de aproximar o consumo do tenant com base na atividade geral do tenant. Você pode aplicar o consumo aproximado de recursos do tenant aos dados de faturamento para calcular o custo por tenant. Por exemplo, digamos que sua aplicação SaaS inclua um elemento de armazenamento de dados.

Idealmente, você deve descobrir a quantidade de dados armazenados pelo tenant e depois calcular o custo por tenant. Mas, como uma aproximação, você pode capturar o número de usuários ativos de cada tenant interagindo com o armazenamento de dados e considerá-lo como atividade do tenant, inferir o consumo aproximado do tenant e aplicá-lo aos seus dados de faturamento para calcular o custo por tenant.

Digamos que se um tenant tenha 10% de usuários ativos em relação ao total de usuários ativos da sua aplicação SaaS, você poderá distribuir aproximadamente 10% das cobranças da sua aplicação SaaS a este tenant.

A abordagem aqui tenta mapear o número de usuários/frequência de chamadas para a atividade do tenant, depois infere o consumo do tenant a partir dela e usa esses dados para calcular o custo por tenant. Às vezes, em uma determinada aplicação SaaS, o número de usuários/chamadas pode não se correlacionar com precisão ao consumo, mas pode ser um compromisso razoável.

Você também pode usar os serviços da AWS, como os relatórios de custos e uso da AWS, que contêm um conjunto abrangente de dados de custo e uso para aproximar o consumo de recursos do tenant. Se você marcar seus recursos e ativar essas tags definidas pelo usuário por meio de tags de alocação de custos no AWS Billing Console, os relatórios de custo e uso da AWS incluirão suas tags nos relatórios de custo e uso. Em seguida, você poderá agrupar esses dados por tags e chegar a valores aproximados de custo e uso.

Abordagem detalhada

Essa abordagem trata da captura de dados detalhados do tenant usando sua aplicação e/ou serviços da AWS. Ele começa introduzindo a instrumentação de métricas em toda a stack de sua solução e coletando métricas de consumo de vários recursos em sua arquitetura. Por exemplo, a Figura 2 mostra como você pode usar a infraestrutura de instrumentação de métricas para coletar métricas de consumo de microsserviços de aplicativos e, em seguida, medir o consumo de tenants.

Capturando o consumo detalhado dos tenants com a infraestrutura de instrumentação de métricas

Figura 2 — Capturando o consumo detalhado dos tenants com a infraestrutura de instrumentação de métricas

Aqui, o código da aplicação capturará dados de métricas detalhados sobre como os tenants estão consumindo o serviço e seus recursos relacionados. O código da aplicação publicará os dados métricos como um evento e você capturará esses eventos usando a infraestrutura de instrumentação de métricas composta pelos seguintes serviços da AWS:

Em seguida, você poderá agregar esses dados de eventos publicados e analisá-los com base em sua própria estratégia de modelagem para chegar a uma distribuição do consumo entre os tenants e, em seguida, derivar o custo por tenant.

Com base no que melhor atende às suas necessidades, você pode usar qualquer outra ferramenta ou tecnologia para criar a infraestrutura de instrumentação de métricas. Consulte este blog para entender como criar uma infraestrutura de instrumentação de métricas e capturar métricas detalhadas.

Em alguns casos, você pode coletar dados refinados usando apenas dados coletados por serviços da AWS, como Amazon CloudWatch e AWS X-Ray (em vez de usar código da aplicação). Por exemplo, se sua aplicação usa o Amazon DynamoDB, você pode consultar seus logs do Amazon CloudWatch para obter a lista de chamadas que foram feitas para o banco de dados ou usar a API do Amazon DynamoDB para obter a quantidade de unidades de capacidade consumidas por cada chamada para uma tabela do Amazon DynamoDB.

Por fim, use os dados para agrupar as métricas por tenant e armazenar essas informações no armazenamento de dados de sua escolha. Consulte este blog (em inglês) para entender melhor como implementar essa abordagem.

Recursos em silo

Em alguns casos, devido a requisitos de conformidade, regulamentação ou isolamento, talvez seja necessário provisionar um conjunto separado de recursos apenas para um tenant. Dependendo dos requisitos do cliente, você pode provisionar esses recursos em silo em contas separadas da AWS ou em uma única conta da AWS e usar construções da AWS, como as políticas e funções da Amazon Virtual Private Cloud (Amazon VPC) e do Amazon Identity and Access Management (AWS IAM) para impor o isolamento dos tenants.

Em um cenário de uma conta por tenant, medir o consumo de recursos é simples. Todos os recursos consumidos nessa conta da AWS podem ser atribuídos a esse tenant. Dito isso, lembre-se de que esse formato não oferece visibilidade refinada.

Ao provisionar recursos em silo em uma única conta, você pode usar tags da AWS para marcar os recursos. Marcar os recursos com um ID de tenant exclusivo ajudará a diferenciar os dados do tenant. Uma possível próxima etapa pode ser usar os relatórios de custos e uso da AWS nessa conta da AWS, que apresentarão um detalhamento de seus custos e uso de recursos por tags.

Recursos em pool

Em um componente agrupado, vários tenants compartilharão recursos. Aqui, medir o consumo de recursos por tenant será um desafio, mas as estratégias que discutimos acima são úteis aqui. Sempre escolha as áreas que mais contribuem para sua fatura da AWS para medir o consumo de recursos. Em seguida, com base em seus requisitos, use uma abordagem granulada ou refinada para calcular o consumo de recursos.

Com base na arquitetura da sua solução SaaS, fará sentido escolher a dimensão da atividade do tenant que melhor modele o consumo de recursos do tenant. Por exemplo, para capturar a quantidade de dados armazenados por cada tenant em um banco de dados. Aqui, você pode aplicar a abordagem geral descrita acima e consultar o banco de dados para saber a quantidade de dados que pertence a um determinado tenant ou capturar o número de vezes que um tenant interagiu com o banco de dados para entender o consumo aproximado do tenant.

Com mais frequência, talvez seja necessário capturar informações mais detalhadas sobre o consumo dos tenants. Por exemplo, se seu ambiente SaaS tem cargas de trabalho com uso intenso de CPU e você pode usar o tempo de execução computacional para modelar o consumo do tenant.

Aqui você pode fazer com que seus microsserviços chamem alguma biblioteca abstrata que publicará métricas de tempo de execução computacional junto com o contexto do tenant. Conforme mencionado na abordagem refinada na Figura 2, você pode então criar um processo de instrumentação de métricas que capturará essas informações de métricas e as armazenará. Então, dependendo da sua estratégia, você pode usar esses dados métricos para calcular o consumo de recursos do tenant e o custo por tenant.

Coleta de dados de uso da AWS

Uma solução SaaS pode usar vários serviços da AWS. A forma como os recursos são provisionados e consumidos pelos tenants varia de acordo com o serviço. Portanto, a abordagem para medir o consumo de recursos do tenant também variará.

Talvez seja necessário criar um processo específico para agregar ou coletar dados gerados por um serviço da AWS que, em seguida, seriam usados para medir o consumo de recursos do tenant. Por exemplo, para serviços de armazenamento, talvez seja necessário criar um processo que colete dados de operações de entrada/saída por segundo (IOPS) e de espaço de armazenamento para medir o consumo de recursos do tenant. A abordagem será diferente para outros serviços, como serviços de computação.

Coleta de dados de uso da aplicação

Conforme descrito anteriormente, você pode medir o consumo de recursos com base nos tipos de recursos e pelos serviços da AWS. Mas, em alguns casos, é importante entender os padrões de consumo de recursos do ponto de vista da aplicação. O consumo de recursos no nível da aplicação fornece mais informações sobre como vários tenants estão consumindo seus recursos gerais de arquitetura e esclarece os padrões de uso da aplicação.

Como exemplo, a coleta de dados de consumo de recursos no nível da aplicação envolve a captura de métricas detalhadas no nível da aplicação, como contagem de chamadas de API por tenant, número de itens recuperados do banco de dados por tenant, tempo gasto por uma solicitação para ser concluída na camada de computação por tenant. Ter um mecanismo de coleta e ingestão de métricas é útil aqui, conforme mostrado neste blog, onde essas várias métricas podem ser capturadas de diferentes áreas de sua arquitetura por essa infraestrutura de instrumentação de métricas e podem ser armazenadas em um repositório comum.

Em seguida, com base em sua estratégia de negócios, você criará um modelo em que calculará os dados de consumo total do tenant usando algumas ou todas essas métricas individuais capturadas. Use dados de consumo de tenants na aplicação para calcular o custo por tenant usando ferramentas de análise de custos da AWS (como relatórios de custos e uso da AWS, AWS Cost Explorer) ou outras ferramentas de parceiros, como CloudZero ou Stripe.

Maneiras de usar dados de consumo de recursos do tenant

Os dados de consumo do tenant são informações valiosas. Como mencionamos, esses dados ajudam não apenas a entender como cobrar seus clientes, mas também são úteis para orientar decisões de negócios, como definir tiers de cobrança nos produtos, entender a popularidade de recursos de produtos existentes ou recém-lançados e definir seu roadmap de produtos.

No lado técnico, esses dados também podem ser usados para melhorar a operação do seu ambiente SaaS. A ingestão desses dados em painéis ou visualizações operacionais pode fornecer informações diferentes, como a capacidade do sistema de responder às cargas em constante mudança de seu ambiente multitenant. Ele pode ajudá-lo a identificar os tenants que estão consumindo mais ativamente os recursos do sistema e a entender como os tenants estão sobrecarregando os principais elementos de sua arquitetura.

Você pode usar esses dados para otimizar sua arquitetura e gerenciar proativamente a integridade dos tenants, identificar tenants que possam se aproximar dos limites do SLA, identificar tenants que estão tendo sua experiência limitada e também identificar outros problemas arquiteturais iminentes. Consulte a seção “Visualizações métricas de SaaS” deste blog para entender mais detalhadamente como você pode criar visualizações diferentes usando dados de consumo de recursos do tenant. Por fim, você também pode usar dados de consumo de tenants para otimizar sua arquitetura SaaS atual de várias maneiras, como refinar estratégias de escalabilidade, hierarquização e limitação, para criar uma arquitetura multilocatária mais eficiente.

Conclusão

Embora não haja uma maneira única de medir o consumo de recursos do tenant, você pode usar as estratégias que discutimos neste blog para criar uma solução adequada à sua arquitetura, que possa fornecer informações sobre o consumo de recursos do tenant. O pilar de otimização de custos do AWS Well-Architected SaaS Lens (que estende o pilar de otimização de custos do AWS Well-Architected Framework) fornece orientações adicionais sobre esse tópico.

Nas próximas etapas, você pode usar o SaaS Lens para avaliar sua arquitetura atual a partir de uma perspectiva de custo e, em seguida, obter recomendações sobre como otimizar a otimização de custos de sua solução SaaS. Com base no feedback dos usuários do SaaS Lens, esse é um desafio comum que os provedores de SaaS enfrentam atualmente.

Sobre o AWS SaaS Factory

O AWS SaaS Factory ajuda organizações em qualquer estágio da jornada de SaaS. Seja para criar novos produtos, migrar aplicações existentes ou otimizar soluções de SaaS na AWS, podemos ajudar. Visite o AWS SaaS Factory Insights Hub para descobrir mais conteúdo técnico e comercial e melhores práticas.

Os criadores de SaaS são incentivados a entrar em contato com seu representante de conta para obter informações sobre modelos de engajamento e trabalhar com a equipe do AWS SaaS Factory.

Inscreva-se para se manter informado sobre as últimas notícias, recursos e eventos de SaaS na AWS.

Este conteúdo foi traduzido para Português do blog original em inglês (link aqui).

Tradutor: Cesar Augusto Kuehl, arquiteto de soluções – AWS Brasil

Revisores: José Augusto Ferronato e Norberto Enomoto, arquitetos de soluções – AWS Brasil