Melhores práticas para multitenacidade da computação na nuvem – IBM Developer

Melhores práticas para multitenacidade da computação na nuvem

A multitenacidade de computação na nuvem é usada na maioria, se não em todos, dos aplicativos Software as a Service (SaaS), pois os recursos de computação são escaláveis e a alocação desses recursos e definida pelo uso real. Dito isso, há vários tipos de aplicativos SaaS que os usuários podem acessar por meio da Internet, desde pequenos widgets com base na Internet até aplicativos de software corporativo de grande porte, que aumentaram os requisitos de segurança com base no tipo de dados que está sendo armazenado na infraestrutura do fornecedor de software, fora da rede corporativa. Essas solicitações de aplicativo exigem multitenacidade por muitos motivos, o mais óbvio deles é o custo: a adição de uma única pilha de servidores de aplicativo e um banco de dados para cada cliente não seria suficiente na maioria dos casos, embora faça sentido quando há requisitos de segurança mais rígidos

Esta visão geral investiga e descreve os tipos de multitenacidade disponíveis e fornece casos de uso de implementação.

Conceitos de multitenacidade

Os conceitos de multitenacidade incluem três níveis de integração com o cliente:

  • Camada de datacenter
  • Camada de infraestrutura
  • Camada de aplicativo

A adição mais recente ao design da topologia de computação na nuvem é a integração do cliente por meio de camadas de infraestrutura e de aplicativo para obtenção da multitenacidade. Essa integração é projetada especificamente para economizar custos e desenvolver aplicativos SaaS altamente escaláveis, o que é realizado por meio do comprometimento com os requisitos de segurança e de segregação do cliente. Esses designs são úteis em muitas situações, embora eles não sejam adequados para aplicativos financeiros.

A locação de espaço em um datacenter e o fornecimento de servidores, roteadores e cabos que suportam múltiplas solicitações de software do cliente já existem desde que o Vale do Silício ainda estava no começo, portanto a multitenacidade de camada de datacenter é bem conhecida. Essa configuração fornece o nível mais alto de requisitos de segurança, se for implementada corretamente, com firewalls e controles de acesso, de modo a atender aos requisitos de negócios e de acesso de segurança definido ao local físico da infraestrutura que fornece o SaaS. Na maioria dos casos, a multitenacidade da camada de datacenter pode ser um provedor de serviços que aluga espaços a empresas que hospedam seus hardwares, redes e softwares no mesmo edifício.

A multitenacidade na camada de infraestrutura é compreendida com mais facilidade como pilhas de software, em que uma pilha é dedicada a um cliente específico. Essa configuração economiza custos quando comparada à multitenacidade da camada de datacenter, pois as pilhas são implementadas com base nas contas reais do cliente. Nesse caso, é possível aumentar os requisitos de hardware com base no uso real do serviço. Além disso, a alta disponibilidade pode ser uma opção para cada cliente na camada de infraestrutura. Como a pilha é conhecida para cada cliente, as melhores práticas de software e hardware fornecem opções para implementação.

A multitenacidade da camada de aplicativo exige implementações de arquitetura na camada de software e na camada de infraestrutura. É necessário realizar modificações na arquitetura de software existente, incluindo padrões de multitenacidade na camada de aplicativo. Por exemplo, aplicativos de multitenacidade exigem métodos de aplicativo e tabelas de banco de dados para acessar e armazenar dados de diferentes contas de usuário, que se comprometem com a segurança. No entanto, se for realizado com precisão, o benefício será a economia de custos. Para widgets e aplicativos da Web simples, a multitenacidade da camada de aplicativo pode ser uma solução, pois um único desenvolvedor pode criar softwares com mais rapidez e escalá-lo por um custo mais acessível. As desvantagens incluem arquitetura e implementação de aplicativo mais complexas. Em vez de a infraestrutura lidar com a multitenacidade, as equipes e arquitetos de aplicativos precisam manter esses padrões de programação escaláveis, confiáveis e flexíveis, caso a arquitetura da infraestrutura mude.

Services

Os serviços de multitenacidade especificam o acesso por meio de interfaces HTTP RESTful ou de pontos de extremidade do serviço da Web WSDL construídos em aplicativos de software e acessados diretamente. Esses serviços são fundamentais para a construção de aplicativos orientados ao serviço para padrões de multitenacidade, pois podem ser reutilizados para muitos tipos de transação. Por exemplo, o cliente de um serviço da camada de aplicativo de multitenacidade pode chamar os servidores invocando um URL que, em retorno, produz um XML como o código de resposta:

https://visa.com/services/paymentOverview?account=OnlineShoesInc&pass=1234⦥=1_month

<Response >
      < Report >
       <Title >Online Shoes Inc Report</Title>
      <Data><x>01/01/2011</x><y>20.11</y></Data>
  <Data><x>02/01/2011</x><y>22.24</y></Data>
  <Data><x>03/01/2011</x><y>20.21</y></Data>
  </Report>
</Response>

A parte mais crítica da multitenacidade é especificar a conta no URL como um parâmetro, de modo que a infraestrutura saiba qual cliente está solicitando acesso aos dados. Esse é o mecanismo de roteamento para multitenacidade no nível do serviço.

Servidores de aplicativo

O servidor de aplicativos é um componente fundamental na multitenacidade nas camadas de aplicativo e de infraestrutura, pois a multitenacidade afeta a instalação, a configuração e o código do aplicativo. Para a camada da infraestrutura, a multitenacidade para servidores de aplicativo significa escalar com mais rapidez e alcance, com servidores adicionais fornecidos com uma instalação e configuração do servidor de aplicativos, além do código do aplicativo. Essa camada de multitenacidade não exige mudanças no código, a menos que existam requisitos específicos estabelecidos para o aplicativo; portanto, escalar é simples e realizado em grande parte pelas organizações de operações de TI, em vez de desenvolvedores que recriam a engenharia do código fonte do aplicativo. Normalmente, se novos clientes são adicionados, é possível adicionar uma pilha com a mesma configuração, atendendo aos requisitos de segurança com mais facilidade.

Um exemplo é uma pilha com a camada Web (servidor HTTP), a camada de aplicativo (servidor de aplicativo) e a camada de banco de dados (servidor de banco de dados) pré-configuradas para implementação em um hardware físico ou em instâncias virtuais dos sistemas operacionais. Essa é uma maneira comum de planejar o crescimento de aplicativos com base na Web, pois a demanda pode ser alta em um dia e baixa no outro. Essas instâncias podem ser reduzidas durante períodos de baixo volume e ampliadas conforme o necessário. O tempo transcorrido para a execução dessas infraestruturas, desde a coleta de requisitos para o crescimento até a execução de transações reais do cliente, é na maioria dos casos imediato, pois as pilhas são pré-configuradas e automatizadas para implementação.

Na camada de aplicativo, a multitenacidade para servidores de aplicativo exige mudanças no código do aplicativo, pois vários clientes compartilham o mesmo servidor de aplicativos. Os tempos de resposta podem ser afetados independentemente se o cliente estiver executando uma transação ou mil transações ao mesmo tempo, pois outros clientes estão executando não apenas no mesmo hardware de servidor, mas também dentro da mesma memória lógica do sistema. Dependendo do aplicativo, podem existir requisitos de segurança adicionais.

Transações

Infraestruturas e aplicativos de multitenacidade exigem que as transações autentiquem cada cliente durante o envio de uma solicitação. Esse processo ajuda a autenticar e autorizar os tipos de recursos de transação que um usuário pode acessar.

A extração de serviços de autenticação e de autorização da camada de aplicativo pode ajudar com a escalabilidade, manutenção e reutilização de transações de multitenacidade. Como a maioria dos serviços de aplicativo adicionados às infraestruturas exige autorização, uma sub-rede segregada, nuvem ou cluster de servidores de aplicativo específico para autenticação atende aos requisitos de escalabilidade, manutenção e reutilização. O mesmo vale para serviços de autorização, pois essa arquitetura pode ser reutilizada e escalada dentro de uma nuvem ou sub-rede, com base no crescimento da transação.

O banco de dados

O banco de dados, componente base da maioria dos aplicativos, é fundamental para a multitenacidade devido à escalabilidade. Como os bancos de dados de escalabilidade exigem um planejamento maior para as camadas de infraestrutura e de aplicativo, é necessário entender os requisitos do aplicativo e as melhores práticas para infraestruturas de banco de dados escaláveis. Se a pilha da infraestrutura exigir um único banco de dados para cada conta de cliente, a escalabilidade será simples e direta, pois essas melhores práticas foram estabelecidas para bancos de dados individuais com failover. Considere também o custo, pois a maioria dos bancos de dados comerciais pode ter um custo de licença exponencial associado à adição a um modelo por conta.

Se a arquitetura de multitenacidade for uma implementação da camada de aplicativo, será necessário entender suficientemente bem o aplicativo a fim de realizar o planejamento de banco de dados. Padrões específicos de esquema de banco de dados são aplicados às arquiteturas e devem ser planejados adequadamente. Uma abordagem comum de design de aplicativo para economia de custos e escalamento em licenças individuais é ter o nome da conta do cliente no nome da tabela — por exemplo, customer123_payment, em que customer123 é um identificador exclusivo da conta do usuário. Esse design aumenta consideravelmente o número de tabelas em comparação à adição de uma instância de banco de dados por cliente ou à criação de uma coluna em cada tabela a fim de validar se o cliente está acessando os dados apropriados.

Construindo serviços de multitenacidade

Os requisitos para construção de serviços de multitenacidade são:

  • Definir serviços RESTful ou com base no WSDL.
  • Definir os tempos de resposta e as metas de desempenho.
  • Determinar os requisitos de escalabilidade e de alta disponibilidade.
  • Definir os serviços exigidos para cada transação.
  • Determinar os volumes de carregamento para serviços com base em clientes de transações.
  • Criar uma topologia de implementação e de rede para os serviços.
  • Criar scripts para automação da implementação para configuração e instalação.
  • Criar um diagrama de sequência Unified Modeling Language (UML) para implementação de desenvolvimento.

Planejando a topologia de rede

A topologia de rede exibida na Figura 1. Design de topologia de rede para serviços com multitenacidade descreve como os serviços são implementados e acessados por meio da rede usando recursos escaláveis da rede. Outros serviços podem ser adicionados à camada do aplicativo onde os servidores ficam em execução conforme o necessário. Na Figura 1, Cluster A e Cluster B são exatamente os mesmos e são distribuídos em dois datacenters ou provedores de nuvem. Cada cluster tem os mesmos serviços implementados em todos os nós para proporcionar uma alta disponibilidade e escalabilidade.

Figura 1. Design de topologia de rede para serviços com multitenacidade

Design de topologia de rede para serviços com multitenacidade

Planejando a topologia de implementação

A topologia de implementação é necessária para identificar os serviços de recursos exigidos para o hardware e os sistemas operacionais. Como cada serviço provavelmente exigirá JDBC, bibliotecas de referência, usuários de sistemas e funcionalidade de mensagens, adicione esses requisitos à topologia de implementação. A infraestrutura de nuvem pode ficar grande, por isso é melhor se preparar com antecedência. Por exemplo, se um serviço chamar uma fonte de dados ou banco de dados específico, adicione essa fonte à topologia de implementação, como mostra a Figura 2. Design de topologia de implementação para serviços de multitenacidade. Nessa figura, cloud_server1 é a fonte de dados definida no exemplo de topologia de implementação.

Figura 2. Design de topologia de implementação para serviços de multitenacidade

Design de topologia de implementação para serviços de multitenacidade

Desafios

Vários clientes acessando o mesmo hardware, servidores de aplicativo e bancos de dados podem afetar os tempos de resposta e o desempenho de outros clientes. Para multitenacidade da camada de aplicativo especificamente, os recursos são compartilhados em cada camada de infraestrutura e têm questões válidas de segurança e desempenho que precisam ser planejadas. Por exemplo, várias solicitações de serviço acessando ao mesmo tempo os recursos causam um aumento nos tempos de espera, mas não necessariamente no tempo da CPU, ou esgotou-se o número de conexões com um servidor HTTP e o serviço precisa aguardar até que possa usar uma conexão disponível ou — no pior dos casos — cancela a solicitação de serviço.

Construindo servidores de aplicativo com multitenacidade

Os requisitos para a construção de servidores de aplicativo com multitenacidade são:

  • Determinar o servidor de aplicativo para implementação.
  • Definir os tempos de resposta e metas de desempenho.
  • Determinar os requisitos de escalabilidade e alta disponibilidade
  • Definir as topologias de implementação do serviço e do aplicativo.
  • Determinar os volumes de carregamento para serviços com base em clientes de transação.
  • Criar topologias de implementação e de rede para os serviços.
  • Criar scripts para automação de implementação para configuração e instalação.
  • Criar um diagrama de sequência UML para implementação de desenvolvimento.

Planejando a topologia de rede

A topologia de rede para servidores de aplicativo com multitenacidade, parecida com a topologia de rede para serviços, descreve como os servidores de aplicativo são compartilhados entre os clientes de transação. Neste exemplo, você escala adicionando um caminho e cluster de transação. Todas as transações, independentemente do cliente, são distribuídas entre os clusters A, B e C.

Desafios

Como a maioria das implementações de servidor de aplicativo para infraestruturas corporativas exige instalações e configurações complexas, a automação desse processo é fundamental. A escalabilidade e o ingresso de novos clientes dependem do fornecimento de recursos do servidor de aplicativos, além da replicação garantida de pilhas de infraestrutura e da infraestrutura da camada de aplicativo. Por exemplo, é necessário ter scripts do sistema operacional para a instalação automatizada de servidores de aplicativo, a fim de reduzir o tempo de implementação para novas contas e serviços que são adicionados à infraestrutura.

Essas configurações do servidor de aplicativo podem ser extremamente complexas, pois na maioria dos casos elas se alinham aos recursos criados pelo desenvolvimento (por exemplo, nomes de fonte de conexão de banco de dados e outros nomes de recursos Java™ Naming and Directory Interface [JNDI]). Se os recursos nos quais os desenvolvedores precisam se inscrever forem definidos com antecedência, a automação será simplificada em prol da escalabilidade.

Construindo transações com multitenacidade

Os requisitos para construção de transações com multitenacidade são

  • Determinar o protocolo de transação para implementação.
  • Definir os tempos de resposta e as metas de desempenho.
  • Determinar os requisitos de escalabilidade e alta disponibilidade.
  • Definir as topologias de implementação de serviço e de aplicativos.
  • Determinar os volumes de carregamento para serviços com base em clientes de transação.
  • Criar topologias de implementação e de rede para os serviços.
  • Criar scripts para automação da implementação para configuração e instalação.
  • Criar um diagrama de sequência UML para implementação de desenvolvimento.

Planejando a topologia de rede

A multitenacidade de transação, parecida com a multitenacidade de servidor de aplicativo, pode ser configurada e programada para aproveitar as vantagens de uma abordagem não segregada ou segregada. Como mostra a Figura 3. Topologia de rede para transações de multitenacidade, os clusters A, B e C podem ser configurados para processar transações por cliente e também para todos os clientes, se a infraestrutura correta de balanceamento de carga estiver definida. Além disso, há um requisito para escrever o código do aplicativo a fim de processar todas as transações, se for necessário, para multitenacidade. Por exemplo, o cluster A pode ser configurado para processar um cliente, e os clusters B e C podem ser configurados de uma maneira parecida ou programados para processar múltiplos clientes, com base nas configurações de planejamento. As configurações também podem depender de níveis de serviço definidos nos acordos do serviço.

Figura 3. Topologia de rede para transações de multitenacidade

Topologia de rede para transações de multitenacidade

Desafios

Como o cliente está enviando transações compostas por múltiplos serviços para criar a transação completa, há alguns desafios. Se essas transações e serviços individuais não forem dimensionados adequadamente, poderão afetar o desempenho e os tempos de resposta de todas as transações. Por exemplo, considere as transações que usam serviços de fraude junto com transações que não usam: sem o dimensionamento correto, é difícil determinar com antecedência se os requisitos de carga foram atendidos. A utilização exponencial do serviço de autenticação será um problema, especialmente se for usada várias vezes por transação. Um limite na utilização do serviço por transação garante a capacidade de dimensionar apropriadamente, além de fornecer uma medida de reutilização para o planejamento de capacidade.

Construindo um banco de dados com multitenacidade

Os requisitos para construção de banco de dados com multitenacidade são:

  • Determinar o modelo de banco de dados para implementação.
  • Definir os tempos de resposta e as metas de desempenho.
  • Determinar os requisitos de escalabilidade e alta disponibilidade.
  • Determinar os volumes de carga para clientes de transação.
  • Criar topologias de implementação e de rede para os serviços.
  • Criar scripts para automação da implementação para configuração e instalação.
  • Criar um diagrama de sequência UML para implementação de desenvolvimento.

Desafios

O banco de dados de multitenacidade proporciona novos tipos de desafio na camada de aplicativo adicionando muitas tabelas por cliente para escala, com base em licenças de banco de dados individuais. O número de tabelas aumenta, afetando a utilização do espaço em disco atribuída a uma tabela específica, também conhecida como espaço em tabela. Como os clientes usam quantidades de dados diferentes, e também inesperadas, os tamanhos do espaço em tabela podem variar consideravelmente, afetando as considerações de dimensionamento e planejamento de banco de dados.

Lembre-se de que as opções de dimensionamento automático estão disponíveis para espaços em tabela de banco de dados e também para configurações de monitoramento detalhadas que o notificam se os espaços em tabela específicos estiverem cheios e precisarem de redimensionamento. A melhor prática para impedir esses problemas é dimensionar com base na quantidade média de dados que você espera que um usuário armazene, e adicionar um buffer para garantir que em casos excepcionais as transações e os serviços ainda possam ser processados até que os espaços em tabela sejam modificados para suportar o crescimento especifico do cliente.

Conclusão

Para a pequena empresa iniciante ou o desenvolvedor individual produzir aplicativos rapidamente por um preço acessível e para criar provas de conceito, além de widgets para aplicativos da Web, a multitenacidade de computação na nuvem é apropriada e não é possível impedir seu desenvolvimento. A escalabilidade e o tempo de chegada ao mercado normalmente são as principais prioridades para clientes de widget e de aplicativos da Web. Por exemplo, aplicativos para uso móvel ou pessoal e até mesmo aplicativos para pequenas empresas com menos requisitos de segurança, são usados com base na inovação, tempo de resposta e facilidade de uso, em vez de segurança e alta disponibilidade.

No caso de aplicativos corporativos, é necessário tomar medidas adicionais para garantir que a segurança e a alta disponibilidade sejam abordadas e implementadas, pois isso tudo afeta o tempo de chegada ao mercado e a inovação. No final, se os aplicativos de multitenacidade de computação na nuvem forem mais seguros e aprimorarem os tempos de resposta, essas organizações serão capazes de entregar soluções corporativas que atendem aos requisitos de organizações maiores. Por exemplo, se as etapas descritas neste artigo forem implementadas para criar multitenacidade, e forem integradas em uma organização corporativa, a segregação precisará resolver as questões de segurança para a disponibilidade de cada tipo de serviço a fim de impedir problemas de recusa de serviço e requisitos específicos do serviço. A multitenacidade impede que os serviços caiam nas falhas para transações completas que podem ser exigidas no futuro, mas que não foram planejadas.

Aviso

O conteúdo aqui presente foi traduzido da página IBM Developer US. Caso haja qualquer divergência de texto e/ou versões, consulte o conteúdo original.