Que tipos de sistemas precisam "aumentar a escala" em vez de "expandir"?

12

Há muito tempo que me pergunto se existem sistemas que precisam ser "escalonados" (para um servidor mais poderoso e mais caro), em vez de "escalonados", divididos em muitos servidores menores.

Esses sistemas existem e, em caso afirmativo, existe algo em particular que tende a fazer com que os sistemas precisem ser ampliados, em vez de ampliados? (Por exemplo, talvez transações de banco de dados de reclamação contra ACID ou outros requisitos fortes de integridade de dados criem essa necessidade.)

Como o aumento parece trazer custos de hardware muito mais altos do que o dimensionamento, parece que você gostaria de evitar, se possível, mas não tenho certeza se é sempre evitável ou não.

Então, existem sistemas que não podem ser escalonados e precisam ser escalados? O que pode causar isso e como você identificaria esse sistema? (Eles geralmente compartilham algumas características em comum que podem torná-los mais facilmente identificáveis?)

Demi
fonte
7
A expansão é geralmente muito mais fácil se o seu software não foi projetado para expandir. Redesenhar software é caro ou impossível se você não possui a fonte ou tem influência sobre os desenvolvedores.
precisa
Escrever esses sistemas é um problema muito difícil. Especialmente projetos mestre / mestre que podem ir e vir onde vários mestres gravam nos mesmos registros ao mesmo tempo. Quem escreve ganha?
Matt
3
Você pode estar interessado CAP Teorema . Basicamente, um serviço que requer consistência e disponibilidade, conforme definido no teorema, não deve tolerar o particionamento. A maioria dos requisitos do mundo real pode sacrificar alguma consistência por uma eventual consistência (lidar manual ou automaticamente com a inconsistência após o fato) ou sacrificar a disponibilidade recusando-se a processar uma solicitação quando alguns dos participantes não estiverem disponíveis. Portanto, sistemas que requerem consistência absoluta e disponibilidade absoluta são essencialmente forçados a aumentar.
Lie Ryan
1
Se por "LAN confiável" você quer dizer "nunca falha", não está projetando para o mundo real.
Mllni

Respostas:

18

Eu trabalho principalmente com um aplicativo que tem zero potencial de escala horizontal . Embora seja executado no Linux, o aplicativo, as estruturas de dados e os requisitos de E / S me forçam a "escalar" em sistemas progressivamente maiores, a fim de acomodar cargas de trabalho crescentes do usuário.

Muitos aplicativos transacionais e de linha de negócios herdados têm esses tipos de restrições. É uma das razões pelas quais enfatizo que o foco do setor em soluções em nuvem e arquiteturas em escala da Web orientadas por DevOps ignora uma boa porcentagem do mundo da computação.

Infelizmente, os sistemas de expansão que eu descrevo são realmente não-sexuais , então a indústria tende a ignorar seu valor ou a enfatizar as habilidades necessárias para lidar com sistemas grandes e críticos (por exemplo, gado versus animais de estimação ).

ewwhite
fonte
1
"a coisa mais fácil a se fazer é jogar o hardware no problema". Por favor, Lei de Moore, não pare de trabalhar!
CJC
2
@ Demetri - O Microsoft SQL Server é o produto mais "de alto perfil" que consigo pensar que é um "aumento de escala" típico, em vez de um aumento de escala. Escalá-lo é quase impossível, a menos que você atenda a um conjunto muito específico de critérios para replicação de mesclagem.
Mark Henderson
3
Ou se você pode decompor a solução em vários problemas. Por exemplo, não execute relatórios no banco de dados de transações; bateu uma réplica que roda em outro hardware. \
mfinni
1
-1. Acho que você perdeu o coração da questão. Seu problema não é forçado a ser ampliado se você puder reescrever o sistema para um sistema de expansão. Esta pergunta sobre sistemas cujo domínio do problema é tal que uma expansão não é possível, mesmo quando projetada desde o início.
Lie Ryan
1
@LieRyan Comprehension. Estou afirmando que o aplicativo que eu apoio não pode ser expandido (é um sistema parecido com um banco de dados) ... mesmo se redesenhado, devido a restrições de arquitetura.
ewwhite
8

Do ponto de vista do desenvolvedor, posso dizer que quase todos os mecanismos tradicionais de banco de dados existentes no mercado só podem ser ampliados e ampliados.

Nos últimos anos, com a necessidade de maior escalabilidade e sistemas altamente disponíveis, houve esforços para aumentar a escala dos bancos de dados existentes. Mas, como os designs são prejudicados pelo código legado, é muito mais importante do que fundamental para o design. Você encontrará isso se tentar dimensionar a maioria dos mecanismos de banco de dados conhecidos. A adição de servidores escravos pode ser bastante difícil de configurar e você notará que ele possui limitações significativas, algumas das quais podem exigir uma nova alteração nas tabelas do banco de dados.

Por exemplo, a maioria deles é mestre / (multi) escrava, em vez de projetos com vários mestres. Em outras palavras, você pode ter apenas um servidor inteiro sentado lá e não conseguir processar consultas. Alguns o fazem, mas com limitações ... por exemplo, leia apenas o projeto multi-escravo. Portanto, você pode ter um servidor que recebe gravações e todos os outros fornecem dados somente leitura. Você notará que, ao configurar esses sistemas, nem sempre é um processo direto e difícil de funcionar bem. Em muitos casos, parece muito mais um acréscimo.

Por outro lado, existem alguns mecanismos de banco de dados mais recentes sendo desenvolvidos com simultaneidade e design multimestre desde o início. NOSQL e NewSQL são a nova classe de design.

Portanto, parece que a melhor maneira de obter melhor desempenho de um servidor SQL tradicional é aumentar a escala! Enquanto no NOSQL e NewSQL, ambos aumentam e aumentam.

A razão pela qual os sistemas RDBMS tradicionais são fortemente acoplados é porque todos eles precisam de uma visualização consistente dos mesmos dados. Quando você tem vários servidores aceitando atualizações para os mesmos dados de clientes diferentes, em qual deles você confia? Qualquer método que tente garantir que os dados sejam consistentes através de algum tipo de mecanismo de bloqueio exige cooperação de outros servidores que prejudicam o desempenho ou afetam a qualidade dos dados, pois quaisquer dados lidos de um cliente podem estar desatualizados. E os servidores precisam decidir entre si quais dados são mais recentes ao gravar no mesmo registro. Como você pode ver, é um problema complexo que se torna mais complexo pelo fato de a carga de trabalho estar espalhada pelos servidores e não apenas entre processos ou threads em que o acesso aos dados ainda é bastante rápido.

Matt
fonte
O Oracle RAC não fornece escalabilidade desde 10g?
21714 Dani_l
Tem. Mas, em seguida, ter um RAC e ter um RAC que funcione perfeitamente são duas coisas diferentes - isso realmente requer cuidados especiais para continuar funcionando. É um bom design embora. Se você precisar, provavelmente está disposto a pagar o preço.
TomTom
E observe o sistema de armazenamento compartilhado necessário para o Oracle RAC. Isso pode apresentar um problema de dimensionamento, dependendo de como é implementado.
Matt
7

Na minha opinião, a demarcação de escala para cima / para fora é determinada de quão paralelo um fluxo de trabalho pode ser e com que firmeza os segmentos paralelos precisam se coordenar.

Encadeamento único
Por qualquer motivo, esse fluxo de trabalho pode funcionar apenas em um único encadeamento.

Um meio de rosca um meio de sistema dimensionar -se para torná-lo ir mais rápido.

Paralelismo firmemente acoplado
Este é um sistema multiencadeado em que os encadeamentos precisam ser acoplados firmemente entre si. Talvez a comunicação entre processos precise ser muito rápida ou tudo precise ser gerenciado através de um único gerenciador de memória. A maioria dos sistemas RDBMS é esse tipo de computação paralela.

Para a maior parte, estes sistemas são aqueles que escala até melhor do que fora embora haja exceções. Por exemplo, fluxos de trabalho que funcionariam em um cluster no estilo Imagem de sistema único, espaço de memória único, mas alta latência entre threads, podem facilitar o dimensionamento. Mas esses sistemas SSI são muito difíceis de trabalhar, para que a maioria dos engenheiros apenas faça uma caixa maior.

Paralelismo fracamente acoplado
Este é um sistema multiencadeado / de processo em que os encadeamentos são aceitáveis ​​com altas latências entre si. Ou não precisam conversar um com o outro. Servidores da Web e farms de renderização ampliados são exemplos clássicos desse tipo de sistema. Sistemas como esses são muito mais fáceis de criar do que um paralelismo maior que o de acoplamentos estreitos, e é por isso que há muita empolgação nesse estilo de sistema.

Este é o estilo onde a escala para fora é muito mais fácil.

sysadmin1138
fonte
O motivo pelo qual o RDBMS está fortemente acoplado é porque está acoplado aos dados. ou seja, vários servidores acessando o mesmo recurso.
28414 Matt