domingo, 28 de setembro de 2008

Espaço de Tuplas

Um espaço de tuplas tem como função criar uma abstração de memória compartilhada sobre um sistema distribuído. Por propiciar modelos de programação muito simples e com baixo acoplamento entre os elementos do sistema, espaços de tuplas têm sido empregados na construção de sistemas distribuídos complexos. O espaço de tuplas JavaSpaces é um dos mais populares espaços de tuplas para a linguagem Java. Ele tem como características relevantes a conformidade a objetos, a persistência e o emprego de transações. As atuais implementações de JavaSpaces apresentam restrições como: complexidade de configuração, limitação de alcance e não serem abertas. Por “complexidade de configuração” entende-se ter que usar boa parte da infra-estrutura Jini (feita para facilitar o desenvolvimento e administração de sistemas distribuídos) e o Remote Method Invocation (mecanismo de chamadas remotas padrão no ambiente Java), mesmo quando eles seriam dispensáveis. Por "limitação de alcance", entende-se não poder usar as implementações sobre redes amplas, como a Internet. Por “não ser aberto” entende-se que: ou o código fonte não está disponível ou o código fonte e o aplicativo são distribuídos por licenças de software proprietárias ou o uso do software requer algum componente proprietário. Um projeto de espaço de tuplas em conformidade com a especificação JavaSpaces.

Técnicas de Escabilidade

Escalabilidade pode ser definida como a habilidade de garantir a qualidade de serviço desejada à medida que a demanda de uso aumenta. Uma solução pode ser considerada escalável se continuar respondendo dentro de limites estabelecidos apesar de um aumento na sua carga.Para compreender o que e escalabilidade, primeiro e preciso entender a capacidade de um sistema, que pode ser definido como a quantidade de processos, ou usuários, que o sistema consegue suportar e ainda assim manter a qualidade do serviço. Se um sistema esta no máximo de sua capacidade e não consegue responder dentro de um limite estabelecido, podemos afirmar que esse sistema ultrapassou o seu limite de escalabilidade. Para escalar um sistema que atingiu a sua capacidade máxima, será preciso adicionar mais hardware. Esse hardware adicional pode ser adicionado verticalmente ou horizontalmente.E importante lembrar que, ao definir a arquitetura de uma solução, será preciso considerar como o sistema ira se comportar no caso do ambiente precisar ser escalado.
Escalabilidade VerticalE alcançada ao aumentar a capacidade em um hardware, entende-se por capacidade a adição de mais processadores, memória ou discos a maquina atual.Escalar de forma vertical dificilmente ira ter algum impacto na sua arquitetura.Apesar disso, não e possível garantir a disponibilidade da aplicação, uma vez que um único hardware representa um ponto único de falha, conhecido como SPOF (Single Point of Failure).Geralmente a escalabilidade vertical é mais barata e demanda um menor esforço de manutenção que a escalabilidade horizontal.
Escalabilidade HorizontalE possível alcançar a escalabilidade horizontal ao adicionar mais maquinas ao ambiente atual, aumentando assim a capacidade do sistema como um todo.Para distribuir a carga de maneira otimizada para cada servidor , você devera usar as técnicas de balanceamento de carga (Load Balancing) e de montagem de clusters.A arquitetura definida para a aplicação deve ser projetada tendo em mente que ela devera funcionar sem problemas em um ambiente que pode escalar horizontalmente.Ao escalar de forma horizontal você consegue garantir a flexibilidade, disponibilidade e confiabilidade para o ambiente e para a aplicação.Em contra partida você aumenta a complexidade e o gerenciamento da estrutura física da aplicação, alem de ser uma solução mais cara que a escalabilidade vertical.
Escalabilidade DiagonalPara implementar uma solução que seja confiável, resiliente, performática, escalável e de alta disponibilidade, que usa de forma inteligente todo o poder disponibilizado pelo hardware, se faz necessário aplicar em conjunto as técnicas de escalabilidade horizontal e vertical, conhecida como escalabilidade diagonal.
ConclusãoEscalabilidade significa adicionar hardware para manter e melhorar a performance de uma solução.Entretanto, apenas adicionar mais hardware pode não representar ganho de performance por parte da aplicação.Antes de escalar o ambiente, e importante validar se todos os gargalos da aplicação foram devidamente eliminados, se o código esta otimizado e o ambiente devidamente configurado e otimizado.Caso estas boas práticas não sejam executadas, escalar o ambiente apenas vai empurrar o problema mais pra frente. Por outro lado, quando a solução está devidamente otimizada, então escalar o ambiente se torna o próximo passo lógico para uma maior capacidade e performance para a solução.