Recomendações para otimizar o dimensionamento e a criação de partições
Aplica-se a esta recomendação de lista de verificação de Eficiência de Desempenho do Azure Well-Architected Framework:
PE:05 | Otimizar o dimensionamento e a criação de partições. Incorporar dimensionamento e criação de partições fiáveis e controlados. A estrutura da unidade de dimensionamento da carga de trabalho é a base da estratégia de dimensionamento e criação de partições. |
---|
Este guia descreve as recomendações de dimensionamento e criação de partições de uma carga de trabalho. O dimensionamento é a capacidade de aumentar ou diminuir os recursos alocados a uma carga de trabalho com base na procura. A criação de partições envolve dividir a carga de trabalho em unidades mais pequenas e geríveis para distribuir dados e processar vários recursos. Uma carga de trabalho que não dimensione ou particione pode ter um fraco desempenho em períodos de procura elevada e capacidade subutilizada em períodos de baixa procura.
Definições
Termo | Definição |
---|---|
Dimensionamento Automático | Uma funcionalidade que ajusta automaticamente os limites de capacidade de um serviço com base em configurações predefinidas, permitindo-lhe aumentar ou reduzir verticalmente conforme necessário. |
Capacidade | O limite superior ou a capacidade máxima de um determinado serviço ou funcionalidade. |
Afinidade de cliente (afinidade de sessão) | O encaminhamento intencional de pedidos de um único cliente para uma única instância de servidor para ajudar a garantir uma gestão de sessões consistente. |
Consistência (base de dados distribuída) | A uniformidade dos dados em vários nós numa base de dados distribuída, garantindo que todas as réplicas têm os mesmos dados num determinado momento. |
Consistência (base de dados relacional) | A propriedade de uma transação que traz uma base de dados de um estado válido para outro, mantendo a integridade dos dados. |
Nível de consistência | Uma configuração que define como e quando os dados são replicados num sistema de bases de dados distribuídos, determinando a desvantagem entre consistência e desempenho. |
Bloqueio de dados | Um mecanismo utilizado para impedir atualizações simultâneas para os mesmos dados. |
Dimensionamento horizontal | Uma abordagem de dimensionamento que adiciona instâncias de um determinado tipo de recurso. |
Simultaneidade otimista | Uma abordagem para atualizar bases de dados que utilizam instantâneos para efetuar atualizações em vez de mecanismos de bloqueio tradicionais. |
Criação de partições | O processo de divisão física de dados em arquivos de dados separados. |
Escalabilidade | A capacidade de uma carga de trabalho alterar dinamicamente os seus limites de capacidade para acomodar diferentes níveis de procura. |
Unidade de dimensionamento | Um grupo de recursos que se dimensionam proporcionalmente em conjunto. |
Afinidade de estado | O armazenamento de dados de sessão de cliente num único servidor para que o mesmo servidor processe os pedidos subsequentes do mesmo cliente. |
Dimensionamento vertical | Uma abordagem de dimensionamento que adiciona capacidade de computação aos recursos existentes. |
Principais estratégias de design
Tanto o dimensionamento como a criação de partições contribuem para a eficiência de desempenho, garantindo que os recursos são utilizados de forma eficaz e que a carga de trabalho consegue lidar com cargas variadas. Estas práticas são especialmente importantes em ambientes de cloud onde as aplicações têm de ser flexíveis e adaptáveis às exigências em mudança. O dimensionamento garante que pode expandir a capacidade da carga de trabalho para satisfazer as exigências crescentes. A criação de partições permite-lhe dividir tarefas ou dados de forma eficiente para lidar com estas necessidades crescentes. A base de ambos os processos é a estrutura da unidade de dimensionamento da carga de trabalho. Dita como a carga de trabalho deve aumentar e distribuir tarefas. Ao incorporar uma abordagem fiável e controlada ao dimensionamento e criação de partições, pode evitar potenciais ineficiências de cargas de trabalho.
Otimizar o dimensionamento
Otimizar o dimensionamento é o processo de ajustar o número de servidores, instâncias ou recursos para satisfazer as exigências flutuantes de uma carga de trabalho. Garante que a carga de trabalho consegue lidar com o aumento do tráfego ou das exigências sem sofrer degradação do desempenho ou período de indisponibilidade.
Escolher uma estratégia de dimensionamento
Escolher uma estratégia de dimensionamento envolve decidir entre métodos verticais ou horizontais para melhorar a capacidade de uma carga de trabalho com base nos requisitos específicos. Selecionar a estratégia certa garante que os recursos são ajustados de forma eficiente para satisfazer as exigências da carga de trabalho sem utilização excessiva ou desperdício. Para escolher a estratégia de dimensionamento correta, tem de compreender os casos de utilização do dimensionamento vertical e horizontal e como satisfazem as necessidades da sua carga de trabalho.
Compreender o dimensionamento vertical. Com o dimensionamento vertical, pode aumentar a capacidade de um único recurso, como atualizar para um servidor ou tamanho de instância maior. O dimensionamento vertical é útil quando a carga de trabalho pode beneficiar do aumento da potência de processamento, memória ou outros recursos numa única instância. O dimensionamento vertical é adequado para cargas de trabalho que não são facilmente divididas em partes mais pequenas ou quando a arquitetura da aplicação não suporta o dimensionamento horizontal.
Compreender o dimensionamento horizontal. Com o dimensionamento horizontal, pode adicionar mais instâncias ou recursos para distribuir a carga de trabalho por vários servidores. O dimensionamento horizontal oferece benefícios como a resiliência melhorada, o aumento da capacidade e a capacidade de lidar com o aumento do tráfego ou das exigências da carga de trabalho. É eficaz para aplicações nativas da cloud concebidas para serem executadas em vários nós. O dimensionamento horizontal é adequado para cargas de trabalho que podem ser divididas em partes mais pequenas que são executadas de forma independente.
Compreenda a carga de trabalho. A adequação do dimensionamento vertical ou horizontal depende das características e requisitos específicos da carga de trabalho. A monitorização e os testes de desempenho regulares nas seguintes áreas podem ajudar a otimizar a estratégia de dimensionamento ao longo do tempo:
Requisitos: compreenda os requisitos específicos da carga de trabalho ao considerar fatores como as exigências de recursos, as necessidades de escalabilidade e as limitações da carga de trabalho.
Unidades de dimensionamento: crie uma estrutura de unidade de dimensionamento para componentes que se espera que sejam dimensionados em conjunto. Por exemplo, 100 máquinas virtuais podem necessitar de duas filas e três contas de armazenamento para processar a carga de trabalho extra. A unidade de dimensionamento seria 100 máquinas virtuais, duas filas e três contas de armazenamento. Deve dimensionar de forma independente todos os componentes que experimentam a flutuação da utilização da capacidade.
Arquitetura: avalie a conceção da arquitetura da aplicação. Algumas aplicações podem ser concebidas de forma inerente para dimensionar horizontalmente, com componentes sem estado que podem ser facilmente distribuídos por várias instâncias. Outras aplicações podem ter componentes ou dependências com estado que tornam o dimensionamento vertical mais adequado. Avalie os requisitos de escalabilidade e elasticidade da carga de trabalho.
Estruturar infraestrutura a dimensionar
Estruturar a infraestrutura a dimensionar é o processo de criação de uma arquitetura que consiga lidar com o aumento das exigências e da carga de trabalho ao adicionar ou ajustar recursos conforme necessário. Envolve planear e implementar soluções que podem ser dimensionadas horizontal ou verticalmente para acomodar o crescimento. As estratégias incluem evitar singletons que podem tornar-se estrangulamentos e desassociar os componentes da aplicação para garantir escalabilidade independente. Quando cria uma carga de trabalho para ser dimensionável, esta pode distribuir eficazmente a carga de trabalho por vários recursos, o que impede estrangulamentos e maximiza a utilização de recursos.
Evite singletons. Deve evitar a utilização de um único recurso centralizado para toda a carga de trabalho. Em vez disso, distribua a carga de trabalho por vários recursos para uma melhor escalabilidade, tolerância a falhas e desempenho. Explore alguns exemplos específicos e considerações de design para evitar singletons em recursos de carga de trabalho:
Nivelamento de carga baseado em filas: em vez de depender de uma única fila para processar mensagens, considere a criação de partições da carga de trabalho em várias filas para distribuir a carga de processamento. Proporciona uma melhor escalabilidade e processamento paralelo.
Processamento de dados: os padrões singleton aparecem frequentemente em cenários de processamento de dados em que o processamento não se destaca. Divida tarefas de execução prolongada em tarefas mais pequenas que podem dimensionar melhor para distribuir a carga de trabalho por vários recursos e tirar partido do paralelismo.
Padrões de estrutura: padrões de estrutura como Fan-out/Fan-in ou Pipes e Filters podem ajudar a evitar singletons em fluxos de trabalho. Estes padrões permitem a distribuição de tarefas de processamento em vários recursos e promovem a escalabilidade e a flexibilidade.
Desassociar componentes. A desacoplamento dos componentes da aplicação é um aspeto importante da conceção da escalabilidade. Envolve dividir a aplicação em componentes mais pequenos e independentes que podem operar e dimensionar de forma independente com base em requisitos de carga de trabalho específicos. Por exemplo, se um componente necessitar de mais recursos devido ao aumento da procura, pode dimensionar esse componente sem afetar os outros. Esta flexibilidade garante uma alocação de recursos eficiente e impede estrangulamentos. Ao desassociar os componentes, pode isolar falhas e minimizar o efeito na aplicação geral. Se um componente falhar, os outros componentes podem continuar a funcionar de forma independente.
Os componentes desassociados são mais fáceis de manter e atualizar. As alterações ou atualizações a um componente podem ser efetuadas sem afetar as outras porque são independentes. Siga estas diretrizes para desassociar os componentes da aplicação para escalabilidade:
Separação de preocupações: identifique as responsabilidades e funcionalidades da sua aplicação. Divida as responsabilidades em componentes separados com base nas tarefas específicas. Por exemplo, pode ter componentes separados para autenticação de utilizador, processamento de dados e IU.
Acoplamento solto: crie os componentes para comunicar entre si através de interfaces e protocolos bem definidos. Esta estrutura reduz as dependências entre componentes e permite uma substituição ou dimensionamento mais fácil de componentes individuais.
Comunicação assíncrona: utilize padrões de comunicação assíncronos, como filas de mensagens ou arquiteturas condicionadas por eventos para desassociar ainda mais os componentes. Estes padrões permitem que os componentes processem tarefas de forma independente ao seu próprio ritmo, melhorando a escalabilidade geral.
Microsserviços: considere implementar microsserviços, que são serviços pequenos e independentes que se focam em funcionalidades empresariais específicas. Cada microsserviço pode ser desenvolvido, implementado e dimensionado de forma independente, proporcionando maior flexibilidade e escalabilidade.
Estruturar a aplicação a dimensionar
À medida que dimensiona uma carga de trabalho, deve estruturar a aplicação para distribuir a carga. Só porque pode adicionar mais réplicas ao nível da infraestrutura não significa que a aplicação possa utilizar as réplicas. Conceber uma aplicação a dimensionar tem a ver com a estruturação de uma aplicação para que possa lidar com exigências acrescidas ao distribuir a carga de trabalho entre recursos. Evite soluções que exijam afinidade de cliente, bloqueio de dados ou afinidade de estado para uma única instância, se possível. Quer encaminhar um cliente ou processo para um recurso com capacidade disponível. Para conceber a escalabilidade da aplicação, considere as seguintes estratégias:
Elimine o estado da sessão do lado do servidor. Deve conceber aplicações sem estado sempre que possível. Para aplicações com estado, deve utilizar um arquivo de estado externo ao servidor. A externalização do estado da sessão é a prática de armazenar dados de sessão fora do servidor ou contentor da aplicação. Pode externalizar o estado da sessão para distribuir dados de sessão por vários servidores ou serviços, permitindo a gestão de sessões totalmente integrada num ambiente distribuído. Considere o seguinte ao externalizar o estado da sessão:
Avalie os seus requisitos de sessão. Compreenda os dados de sessão que têm de ser armazenados e geridos. Considere atributos de sessão, tempos limite de sessão e quaisquer requisitos específicos para a replicação ou persistência da sessão. Determine o tamanho do estado da sessão e a frequência das operações de leitura e escrita.
Escolha uma solução. Selecione uma solução de armazenamento alinhada com as suas necessidades de desempenho e escalabilidade. As opções incluem utilizar uma cache distribuída, uma base de dados ou um serviço de estado de sessão. Considere fatores como consistência de dados, latência e escalabilidade ao fazer a sua escolha.
Configure a sua aplicação. Atualize a aplicação para utilizar a solução de armazenamento de estado de sessão escolhida. Poderá ter de alterar os ficheiros de configuração ou código da sua aplicação para se ligar ao serviço de armazenamento externo.
Atualize a sua lógica. Altere a lógica de gestão de sessões da sua aplicação para armazenar e obter dados de sessão da solução de armazenamento externo. Poderá ter de utilizar APIs ou bibliotecas fornecidas pela solução de armazenamento para gerir o estado da sessão.
Eliminar a afinidade de cliente. A afinidade de cliente também é conhecida como afinidade de sessão ou sessões autocolantes. Quando elimina a afinidade de cliente, distribui os pedidos de cliente uniformemente por várias réplicas ou servidores, sem encaminhar todos os pedidos de um cliente para a mesma réplica. Esta configuração pode melhorar a escalabilidade e o desempenho das aplicações ao permitir que qualquer réplica disponível processe os pedidos.
Reveja o algoritmo de balanceamento de carga. Um algoritmo de balanceamento de carga pode causar afixação não intencional e artificial do cliente, onde são enviados demasiados pedidos para uma instância de back-end. A afixação pode ocorrer se o algoritmo estiver configurado para enviar sempre pedidos do mesmo utilizador para a mesma instância. Também pode acontecer se os pedidos forem demasiado semelhantes uns aos outros.
Elimine o bloqueio de dados. O bloqueio de dados garante consistência, mas tem desvantagens de desempenho. Pode causar escalamentos de bloqueio e afetar negativamente a simultaneidade, a latência e a disponibilidade. Para eliminar o bloqueio de dados, deve implementar a simultaneidade otimista. As bases de dados não relacionais devem utilizar o controlo de simultaneidade otimista e ter o nível de consistência correto. A sua estratégia de criação de partições de dados também deve suportar as suas necessidades de simultaneidade.
Utilize a deteção dinâmica do serviço. A deteção dinâmica do serviço é o processo de deteção e registo automático de serviços num sistema distribuído. Permite que os clientes descubram os serviços disponíveis sem estarem fortemente associados a instâncias específicas. Os clientes não devem ser capazes de assumir uma dependência direta numa instância específica na carga de trabalho. Para evitar estas dependências, deve utilizar um proxy para distribuir e redistribuir ligações de cliente. O proxy atua como um intermediário entre clientes e serviços, fornecendo uma camada de abstração que permite que os serviços sejam adicionados ou removidos sem afetar os clientes.
Utilize tarefas em segundo plano. Quando uma aplicação é dimensionada, pode processar uma carga de trabalho crescente ou um número mais elevado de pedidos simultâneos. Descarregar tarefas intensivas como tarefas em segundo plano permite que a aplicação principal processe pedidos de utilizador sem operações intensivas de recursos. Siga estes passos para descarregar tarefas como tarefas em segundo plano:
Localize as tarefas intensivas de CPU e de E/S na sua aplicação que pode descarregar. Normalmente, estas tarefas envolvem cálculos pesados ou interações com recursos externos, como bases de dados ou operações de rede.
Crie a sua aplicação para suportar tarefas em segundo plano. Desacoplar as tarefas intensivas da lógica de aplicação principal e fornecer um mecanismo para iniciar e gerir tarefas em segundo plano.
Implemente o processamento de tarefas em segundo plano com as tecnologias ou arquiteturas adequadas. Inclua funcionalidades fornecidas pela sua linguagem ou plataforma de programação, tais como programação assíncrona, threading ou filas de tarefas. Contenham operações intensivas em tarefas ou threads separados, estas tarefas podem ser executadas simultaneamente ou agendadas para serem executadas em intervalos específicos.
Distribua tarefas em segundo plano se existirem muitas delas ou se as tarefas precisarem de tempo ou recursos substanciais. Para obter uma solução possível, veja o padrão Consumidores Concorrentes.
Configurar o dimensionamento
Configurar o dimensionamento é o processo de configuração e ajuste de parâmetros para alocar dinamicamente recursos com base nas exigências da carga de trabalho. Abrange estratégias como a utilização de funcionalidades de dimensionamento automático, a compreensão dos limites de dimensionamento de serviços e a implementação de métricas de carga significativas. A configuração adequada garante que uma aplicação pode responder a diferentes exigências ao mesmo tempo que maximiza a eficiência. Quando configurar o dimensionamento, considere as seguintes estratégias:
Utilize serviços com dimensionamento automático. A funcionalidade de dimensionamento automático dimensiona automaticamente a infraestrutura para satisfazer a procura. Utilize ofertas de plataforma como serviço (PaaS) com funcionalidades de dimensionamento automático incorporadas. A facilidade de dimensionamento no PaaS é uma grande vantagem. Por exemplo, aumentar horizontalmente as máquinas virtuais requer um balanceador de carga separado, processamento de pedidos de cliente e estado armazenado externamente. As ofertas paaS lidam com a maioria destas tarefas.
Restringir o dimensionamento automático. Defina limites automáticos de dimensionamento para minimizar o excesso de dimensionamento, o que pode resultar em custos desnecessários. Por vezes, não pode definir limites de dimensionamento. Nestes casos, deve definir alertas para notificá-lo quando o componente atingir o limite máximo de dimensionamento e sobredimensionado.
Compreender os limites de dimensionamento do serviço. Quando compreender os limites, incrementos e restrições de dimensionamento de serviços, pode tomar decisões informadas ao selecionar um serviço. Os limites de dimensionamento determinam se o serviço escolhido consegue ou não processar a carga de trabalho esperada, dimensionar de forma eficiente e cumprir os requisitos de desempenho da sua aplicação. Os limites de dimensionamento a considerar incluem:
Limites de dimensionamento: os limites de dimensionamento são a capacidade máxima que uma localização ou serviço pode processar. É importante conhecer estes limites para ajudar a garantir que o serviço pode acomodar a carga de trabalho esperada e lidar com a utilização máxima sem degradação do desempenho. Cada recurso tem um limite de dimensionamento superior. Se precisar de ultrapassar os limites de dimensionamento, deve particionar a carga de trabalho.
Incrementos de dimensionamento: os serviços dimensionam em incrementos definidos. Por exemplo, os serviços de computação podem ser dimensionados por instâncias e pods, enquanto as bases de dados podem ser dimensionadas por instâncias, unidades de transação e núcleos virtuais. É importante compreender estes incrementos para otimizar a alocação de recursos e evitar a oscilação de recursos.
Restrições de dimensionamento: alguns serviços permitem aumentar ou reduzir verticalmente, mas limitam a sua capacidade de inverter automaticamente o dimensionamento. É obrigado a dimensionar manualmente ou poderá ter de reimplementar um novo recurso. Estas limitações são muitas vezes para proteger a carga de trabalho. Reduzir verticalmente ou aumentar verticalmente pode ter implicações na disponibilidade e no desempenho da carga de trabalho. Um serviço pode impor determinadas limitações ou restrições para ajudar a garantir que a carga de trabalho tem recursos suficientes para funcionar eficazmente. Estas limitações podem afetar a consistência e a sincronização de dados, especialmente em sistemas distribuídos. O serviço pode ter mecanismos implementados para processar a replicação e consistência de dados durante o aumento ou aumento horizontal, mas pode não fornecer o mesmo nível de suporte para reduzir ou reduzir verticalmente.
Utilize métricas de carga significativas. O dimensionamento deve utilizar métricas de carga significativas como acionadores de dimensionamento. As métricas de carga significativas incluem métricas simples, como CPU ou memória. Também incluem métricas mais avançadas, como profundidade da fila, consultas SQL, consultas de métricas personalizadas e comprimento da fila HTTP. Considere utilizar uma combinação de métricas de carga simples e avançadas como acionador de dimensionamento.
Utilize uma memória intermédia. Uma memória intermédia é uma capacidade não utilizada que pode ser utilizada para lidar com picos de procura. Um plano de carga de trabalho bem concebido para picos inesperados na carga de trabalho. Deve adicionar uma memória intermédia para processar picos para dimensionamento horizontal e vertical.
Evite bater as linhas. O flapping é uma condição de ciclo que ocorre quando um evento de dimensionamento aciona um evento de escala oposta, criando uma ação de dimensionamento contínua. Por exemplo, se o dimensionamento no reduzir o número de instâncias, poderá fazer com que a utilização da CPU aumente nas restantes instâncias, o que aciona um evento de escalamento horizontal. O evento de escalamento horizontal, por sua vez, faz com que a utilização da CPU seja reduzida, repetindo o processo.
É importante escolher uma margem adequada entre os limiares de escalamento horizontal e de aumento horizontal para evitar oscilações. Pode evitar ações frequentes e desnecessárias de escalamento horizontal e escalamento horizontal ao definir limiares que proporcionam uma diferença significativa na utilização da CPU.
Utilize Os Selos de Implementação. Existem técnicas que facilitam a dimensionamento de uma carga de trabalho. Pode utilizar o padrão Selos de Implementação para dimensionar facilmente uma carga de trabalho ao adicionar uma ou mais unidades de escala.
Risco: embora o dimensionamento ajude a otimizar os custos ao ajustar a capacidade para satisfazer a procura, pode resultar num aumento global do custo durante longos períodos de elevada procura.
Testar o dimensionamento
Testar o dimensionamento envolve simular vários cenários de carga de trabalho num ambiente controlado para avaliar como uma carga de trabalho responde a diferentes níveis de procura. Ajuda a garantir que a carga de trabalho dimensiona de forma eficiente, maximizando a eficiência de desempenho durante cargas variadas.
Tem de garantir que a carga de trabalho é dimensionada de forma eficiente em condições reais. É essencial realizar testes de carga e stress num ambiente que espelha a configuração de produção. Estes testes, realizados em ambientes de não produção, permitem-lhe avaliar estratégias de dimensionamento vertical e horizontal e determinar qual otimiza o desempenho de forma mais eficaz. Eis uma abordagem recomendada para testar o dimensionamento:
Definir cenários de carga de trabalho. Identifique os principais cenários de carga de trabalho que precisa de testar, como o aumento do tráfego de utilizador, pedidos simultâneos, volume de dados ou utilização de recursos.
Utilize o ambiente de teste semelhante à produção. Crie um ambiente de teste separado que se assemelhe ao ambiente de produção em termos de infraestrutura, configuração e dados.
Definir métricas de desempenho. Defina as métricas de desempenho a medir, tais como o tempo de resposta, o débito, a utilização da CPU e da memória e as taxas de erro.
Desenvolver casos de teste. Desenvolva casos de teste que simulam diferentes cenários de carga de trabalho, aumentando gradualmente a carga para avaliar o desempenho em vários níveis.
Execute e monitorize os testes. Execute os testes com os casos de teste definidos e recolha dados de desempenho em cada nível de carga. Monitorizar o comportamento da carga de trabalho, o consumo de recursos e a degradação do desempenho.
Analisar e otimizar o dimensionamento. Analise os resultados do teste para identificar estrangulamentos de desempenho, limitações de escalabilidade ou áreas para melhorar. Otimize a configuração, a infraestrutura ou o código para melhorar a escalabilidade e o desempenho. A conclusão do dimensionamento demora algum tempo, pelo que testa os efeitos dos atrasos no dimensionamento.
Endereçar dependências. Encontre potenciais problemas de dependência. O dimensionamento ou a criação de partições numa área de uma carga de trabalho pode causar problemas de desempenho numa dependência. As partes com estado de uma carga de trabalho, como bases de dados, são a causa mais comum de problemas de desempenho de dependências. As bases de dados necessitam de uma estrutura cuidadosa para dimensionar horizontalmente. Deve considerar medidas, como simultaneidade otimista ou criação de partições de dados, para permitir mais débito para a base de dados.
Teste novamente após os ajustes. Repita os testes de escalabilidade após implementar otimizações para validar as melhorias e ajudar a garantir que a carga de trabalho consegue lidar com as cargas de trabalho esperadas de forma eficiente.
Contrapartida: considere as restrições orçamentais e os objetivos de eficiência de custos da carga de trabalho. O dimensionamento vertical pode envolver custos mais elevados devido à necessidade de recursos maiores e mais poderosos. O dimensionamento horizontal oferece poupanças de custos ao utilizar instâncias mais pequenas que podem ser adicionadas ou removidas com base na procura.
Carga de trabalho de partição
A criação de partições é o processo de dividir um grande conjunto de dados ou carga de trabalho em partes mais pequenas e geríveis denominadas partições. Cada partição contém um subconjunto dos dados ou da carga de trabalho e é normalmente armazenada ou processada separadamente. A criação de partições permite o processamento paralelo e reduz a contenção. Dividir a carga de trabalho em unidades mais pequenas permite que a aplicação processe cada unidade de forma independente. O resultado é uma melhor utilização dos recursos e tempos de processamento mais rápidos. A criação de partições também ajuda a distribuir os dados por vários dispositivos de armazenamento, reduzindo a carga em dispositivos individuais e melhorando o desempenho geral.
Compreender a criação de partições
A abordagem de criação de partições específica que utiliza depende do tipo de dados ou carga de trabalho que tem e da tecnologia que está a utilizar. Algumas estratégias comuns para a criação de partições incluem:
Criação de partições horizontais: nesta abordagem, o conjunto de dados ou a carga de trabalho é dividido com base em critérios específicos, como intervalos de valores ou atributos específicos. Cada partição contém um subconjunto dos dados que cumpre os critérios definidos.
Criação de partições verticais: nesta abordagem, o conjunto de dados ou a carga de trabalho é dividido com base em atributos ou colunas específicos. Cada partição contém um subconjunto das colunas ou atributos, o que permite um acesso mais eficiente aos dados necessários.
Criação de partições funcionais: nesta abordagem, os dados ou a carga de trabalho são divididos com base nas funções ou operações específicas que têm de ser executadas. Cada partição contém os dados ou componentes necessários para uma função específica, permitindo o processamento otimizado e o desempenho.
Planear a criação de partições
É importante considerar fatores como a distribuição de dados, padrões de consulta, crescimento de dados e requisitos de carga de trabalho durante a criação de partições. O planeamento e a conceção adequados são essenciais para ajudar a garantir a eficácia da criação de partições e maximizar a eficiência de desempenho. Se abordar a criação de partições como uma reflexão posterior, é mais desafiante porque já tem uma carga de trabalho em direto para manter. Poderá ter de alterar a lógica de acesso a dados, distribuir grandes quantidades de dados entre partições e suportar a utilização contínua durante a distribuição de dados.
Implementar criação de partições
É importante analisar as características dos seus dados, padrões de acesso, requisitos de simultaneidade e objetivos de escalabilidade ao decidir que tipo de criação de partições deve utilizar. Cada tipo de criação de partições tem as suas próprias vantagens e considerações. Seguem-se alguns fatores a considerar para cada tipo de criação de partições:
A criação de partições horizontais é adequada quando pretende distribuir os dados por vários recursos ou servidores para uma melhor escalabilidade e desempenho. É eficaz quando a carga de trabalho pode ser paralelizada e processada de forma independente em cada partição. Considere a criação de partições horizontais quando vários utilizadores ou processos precisarem de poder aceder ou atualizar o conjunto de dados em simultâneo.
A criação de partições verticais é adequada quando determinados atributos ou colunas são acedidos frequentemente, enquanto outros são acedidos com menos frequência. A criação de partições verticais permite um acesso eficiente aos dados necessários ao minimizar a obtenção de dados desnecessária.
A criação de partições funcionais é adequada quando diferentes funções necessitam de subconjunto diferentes dos dados e podem ser processadas de forma independente. A criação de partições funcionais pode otimizar o desempenho ao permitir que cada partição concentre operações específicas.
Testar e otimizar a criação de partições
Teste o esquema de criação de partições para verificar a eficácia e eficiência da estratégia para que possa fazer ajustes para melhorar o desempenho. Medir fatores como o tempo de resposta, o débito e a escalabilidade. Compare os resultados com os objetivos de desempenho e identifique quaisquer estrangulamentos ou problemas. Com base na análise, identifique potenciais oportunidades de otimização. Poderá ter de redistribuir dados entre partições, ajustar os tamanhos das partições ou alterar os critérios de criação de partições.
Desvantagem: a criação de partições adiciona complexidade à conceção e desenvolvimento de uma carga de trabalho. A criação de partições requer conversações e planeamento entre programadores e administradores de bases de dados.
Risco: a criação de partições introduz alguns potenciais problemas que têm de ser considerados e resolvidos, incluindo:
Distorção de dados: a criação de partições pode levar a distorções de dados, em que determinadas partições recebem uma quantidade desproporcional de dados ou cargas de trabalho em comparação com outras. A distorção de dados pode resultar em desequilíbrios de desempenho e maior contenção em partições específicas.
Desempenho das consultas: os esquemas de criação de partições mal concebidos podem afetar negativamente o desempenho das consultas. Se as consultas precisarem de aceder a dados em várias partições, poderá necessitar de coordenação e comunicação extra entre partições, o que leva a uma maior latência.
Facilitação do Azure
Otimizar o dimensionamento. O Azure tem a capacidade de infraestrutura para suportar o dimensionamento vertical e horizontal. Os serviços do Azure têm diferentes escalões de desempenho conhecidos como SKUs. Os SKUs permitem-lhe dimensionar verticalmente. Muitos dos recursos do Azure suportam o dimensionamento automático ou outras opções de dimensionamento no local. Alguns recursos suportam métricas avançadas ou entradas personalizadas para suportar o comportamento de dimensionamento de otimização. A maioria das implementações de dimensionamento no Azure pode definir limites e suportar a observabilidade necessária para ser alertado para alteração.
O Azure Monitor permite-lhe monitorizar várias métricas e condições nas aplicações e na infraestrutura. Pode utilizar o Monitor para acionar ações de dimensionamento automatizado com base em regras predefinidas. Por exemplo, no Azure Kubernetes Service (AKS), pode utilizar o Monitor para ativar o dimensionamento automático de pods horizontal (HPA) e o dimensionamento automático de clusters. Com as capacidades de monitorização e alertas do Monitor, pode facilitar eficazmente o dimensionamento no Azure e ajudar a garantir que as aplicações e a infraestrutura se podem ajustar dinamicamente para satisfazer a procura.
Também pode criar dimensionamento automático personalizado no Azure. Pode utilizar alertas no Monitor para recursos que não têm uma funcionalidade de dimensionamento automático. Estes alertas podem ser configurados para serem baseados em consultas ou baseados em métricas e podem executar ações com Automatização do Azure. A automatização fornece uma plataforma para alojar e executar o PowerShell e o código Python em ambientes do Azure, da cloud e no local. Oferece funcionalidades como implementar runbooks a pedido ou com base numa agenda, histórico e registo de execuções, arquivo de segredos integrado e integração do controlo de código fonte.
Conceber a aplicação para dimensionar: eis algumas formas de o Azure facilitar o design do dimensionamento de aplicações;
Eliminar o bloqueio de dados: na Base de Dados do SQL do Azure, pode ativar o bloqueio otimizado para melhorar o desempenho em bases de dados que requerem consistência rigorosa.
Utilizar tarefas em segundo plano: o Azure oferece serviços e orientações para implementar tarefas em segundo plano. Para obter mais informações, veja Tarefas em segundo plano.
Implementar o balanceamento de carga: o Azure fornece balanceadores de carga que não necessitam de afinidade de cliente. Estes balanceadores de carga incluem o Azure Front Door, Gateway de Aplicação do Azure e Balanceador de Carga do Azure.
Criação de partições de uma carga de trabalho: o Azure oferece várias estratégias de criação de partições para diferentes arquivos de dados. Estas estratégias ajudam a melhorar o desempenho e a escalabilidade ao distribuir os dados por várias partições. Para obter mais informações, veja Estratégias de partição de dados.
Ligações relacionadas
- Porquê criar partições de dados?
- Melhores práticas para o dimensionamento automático
- Descrição geral da funcionalidade de dimensionamento automático no Azure
- Criação de partições de dados horizontais, verticais e funcionais
- Considerações de design de aplicações
Lista de verificação de Eficiência de Desempenho
Veja o conjunto completo de recomendações.