Pergunta

Eu postei um pergunta semelhante sobre como escalável linq é. Havia tantos pontos de vista diferentes sobre o que realmente significou escalabilidade em algumas conversas recentes, por isso tem me despertou para fazer esta pergunta também. O que faz escalabilidade significa para você?

Foi útil?

Solução

Eu olho para escalabilidade de duas perspectivas:

Scaling Up

Se eu adicionar mais memória RAM para a caixa que algo está sendo executado em, quanto o desempenho e capacidade adicional que eu ganho? Se um aplicativo eu tenho pode lidar com mais de 300 ligações e corre 15% mais rápido quando eu adicionar 2 GB de RAM para o meu servidor e outro aplicativo só pode lidar com mais de 100 ligações e corre 5% mais rápido, aplicação Um é claramente mais escalável.

Scaling Out

Agora, se eu adicionar mais caixas para o meu set up, quanto o desempenho e capacidade adicional que eu ganho? Posso configurar o front-ends web para lidar com mais tráfego do cliente? Se assim for, há um aumento linear? Se eu adicionar 3 caixas, posso obter 3x mais usuários acessando meu site? Posso adicionar mais bancos de dados para distribuir a carga de dados? Posso escalar multithreading? Se eu pode facilmente adicionar uma máquina à minha rede adicionar capacidade ao meu pedido, então é escalável.

Esta, aliás, é uma das unidades primárias de n-tier.

Outras dicas

escalabilidade significa a capacidade de crescimento pega em qualquer uma destas áreas 2:

1) Facilidade de adicionar novas funcionalidades, corrigir bugs. Para tornar o código fazer essas coisas novas quão difícil é fazer? Embora isso possa ser de manutenção em alguns aspectos, é também a questão de saber se você pode construir o código para lidar com uma escala maior com facilidade.

2) Capacidade de maior alça e maior carga que pode ser várias solicitações simultaneamente em Desenvolvimento Web ou conjuntos de dados maiores para um simples website por base de dados, por exemplo, você poderia fazer um aplicativo que controla tabelas com centenas de milhares de linhas que ainda é visto como "rápido"?

Geralmente para mim escalabilidade significa a capacidade de crescer.

Eu não acho escalabilidade faz um pingo de sentido sem contexto.

Quando me perguntam sobre a escalabilidade de um sistema, a primeira coisa que eu preciso saber é as formas em que se espera a sua utilização para crescer. Será que vai estar recebendo mais usuários? Será que os usuários existentes se tornando mais pesado uso dele? Será que seu conjunto de recursos estar crescendo? Será que o mix de transações que está presentemente a apoiar a mudança? Será que a experiência do usuário necessidade de mudança?

(OK, então a resposta para todas essas perguntas é geralmente "Sim."; Em seguida, preceder a palavra "como" a essas perguntas)

Para escolher um exemplo não inteiramente fictício: um sistema actualmente a apoiar muito poucos usuários, e cuja base de usuários é esperada a crescer rapidamente, tem um problema de escala grave se o DBA tem que passar duas horas manualmente executando consultas a partir de informações colhidas fora do mensagens de email cada vez que tem de criar uma nova conta. Isso não é um problema que pode ser corrigido pela adição de mais recursos, a menos que você está incluindo DBAs na lista de recursos que você está indo para adicionar (e há uma série de razões que não vai ser bem dimensionada).

Ou imagine um site de rede social que rola para fora do novo recurso interessante que você pode ver se seus amigos estão online e conversar com eles através de uma nice Ajax-y UI. De repente, sem aumento na base de usuários, o número de solicitações HTTP seus servidores estão lidando por dia saltos vinte vezes, e suas preocupações sobre a escalabilidade do seu recede banco de dados em segundo plano. (A menos, claro, que você tenha envolvido o banco de dados em seu aplicativo de bate-papo. Bem pensado!)

Claro, fazer seus aplicativos web apátridas para que você possa adicionar servidores web, tornando páginas web idempotentes de modo que você pode adicionar proxies, projetando seu aplicativo para que você pode particionar seu banco de dados entre servidores, aqueles estão todos indo para tornar a sua aplicação escaláveis ??em várias dimensões. É muito a pena pensar sobre essas coisas. Mas é muito mais importante para descobrir o que seu verdadeiro inimigo é antes de você começar a lutar.

Eu respondi a essa pergunta como se você quis dizer rápido, mas isso é porque eu não quero ser um idiota :) - ou seja, eu não queria começar uma discussão sobre o que significa escaláveis. Penso escalável como: a adição de recursos para o sistema aumenta o seu desempenho

.

Nesse sentido, PLINQ é escalável, porque adicionar mais núcleos irá torná-lo correr mais rápido.

Só para acrescentar ao post de @Lou Franco.

PLINQ tem até bizarro Performance "Super Linear" em alguns cenários com sobrecarga limitada (de acordo com algumas de suas demos). Experimentá-lo.

Se você é um C ++ cara, a Microsoft está também à procura de liberar recursos de simultaneidade que, aparentemente, não têm custos de execução associados com eles e ferramentas adicionais de concorrência baseadas em tarefas para ajudá-lo chamar melhor.

Eu penso em escalabilidade como uma medida da suavidade da curva de custo-desempenho.

Isto é, se você pode gastar um pouco sobre os recursos de computação e obter um sistema de baixa performance, e adicionando gradualmente os recursos que você pode obter um sistema proporcionalmente melhor, é escalável. Se você tem que adicionar recursos em pedaços caros, para obter menos do que melhorias lineares, não é escalável.

Escalabilidade - A capacidade de um sistema para usar recursos adicionais para alcançar maior capacidade ou rendimento. Recursos adicionais, como discos, memória, placas de rede, processadores ou máquinas.

Eu não diretamente associado escalabilidade com o crescimento recurso, embora a adição de recursos a um sistema no seu limite escala pode não ser possível.

Estes dias e especialmente para webapps, mas em alguns casos também para aplicativos corporativos, a escalabilidade horizontal é o que você quer ter,

Posso lidar com mais (tráfego, dados, processamento), adicionando mais hardware commodity? mesmo usando "servidores em nuvem" Amazon EC2, o Google App Engine e similares?

meios escaláveis ??posso empinar n recursos em um sistema e ele vai crescer no espaço e no tempo entre O (log (n)) e O (n log n). Isso é um pouco irrealista, mas é assim que eu penso de "escalável".

Woh !, palavra grande ....

Eu defini-lo um novo cada projeto, porque isso depende do que o cliente quer.

A escalabilidade não é sempre sobre a adição de capacidade de processamento / armazenamento, mas pode incluir o apoio de muitas entradas e saídas muitos também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top