comportamento
no tempo ou
desempenho ,
ou a capacidade do sistemade alcançar a resposta dentro
do período de tempo especificado.Aqui, referimo-nos a tempos
de resposta, latência, tempode processamento, vazão (
throughput ),
etc. Vale observar que, aomedir essa característica,
devemos também entender ascondições em que o sistema
está operando. Afinal, no
[link] ,
mesmo que o HSearch tenha umtempo de resposta menor que
o Google Web Search, o primeiroé capaz de servir a apenas
um milésimo da quantidade deusuários servida pelo segundo.
uso
de recursos ,
que é a capacidade de o softwareexigir mais ou menos recursos
de acordo com suas condiçõesde uso. Normalmente, essa característica
também é chamada de
escalabilidade e pode também ser vista de
outra maneira: como a adiçãoou remoção de recursos no sistema
vai melhorar ou piorar as condiçõesde uso. Existem dois tipos
mais comuns de escalabilidade,que também servem para facilitar
o entendimento dessa característica:
escalabilidade
vertical e
escalabilidade
horizontal .
Eles podem ser melhor explicadospor meio de um exemplo:
Vamos considerar um sistema
servidor de arquivos. Esseservidor de arquivos usa
apenas um disco rígidoe é capaz de servir a cinco
usuários simultâneos, cadaum usando 10 MB/seg de
banda passante (fazendo
upload ou
download ).
Vamos desconsiderar osefeitos da rede que liga
os clientes ao servidorou qualquer outro gargalo.
Podemos dizer que as condiçõesde uso do software são:
5 usuários simultâneosa 10 MB/seg cada.
No
[link] ,
uma forma de melhorar as condiçõesde uso, ou mais especificamente,
aumentar a quantidade de usuáriossimultâneos, seria
seria
substituir um dos recursosdo sistema por outro com
maior capacidade .
Ou seja, escalar verticalmente.
(continuação do
exemplo anterior)
Vamos
substituir o disco rígidodo servidor por um que
seja capaz de transferirarquivos no dobro da velocidade
do anterior. Desta maneira,se o disco rígido fosse
o único fator limitante,conseguiríamos não mais
servir 5 usuários a 10MB/seg, mas sim 10 usuários
simultâneos a 10 MB/seg,como ilustrado na
[link] .
Além disso, poderíamosseguir melhorando verticalmente
o sistema até encontrarmosum limite, que pode ser
tanto o limite na velocidadepossível para um disco
rígido quanto o limitefinanceiro de comprarmos
um disco mais rápido.
Outra forma de escalar
o sistema seria horizontalmente.Desta maneira, não substituímos
um recurso por um melhor, mas
adicionamosum novo recurso ao sistema
de modo que ele faça usotanto do recurso velho
quanto do novo .
(continuação do
exemplo anterior)
Ao invés de necessariamente
comprar um disco rígidomais rápido, compramos
um novo disco (que podeaté ser igual ao anterior)
e fazemos com que o softwaredivida a carga de escrita
e leitura entre os doisdiscos rígidos. Esta abordagem
está ilustrada na
[link] .
Note que a solução
do
[link] não vem de graça: além da camada
de software ficar mais complicada,há o impacto na eficiência
– possivelmente, o tempo deresposta será afetado, uma
vez que uma operação do usuárioterá que agora decidir qual
disco rígido usar. No entanto,a vantagem desta solução reside
no fato de que o teto de desempenhocom a adição de novos discos
será mais alto que o teto alcançávelcom discos mais rápidos. Além
disso, há um limite de discosrígidos que podem ser utilizados
por um mesmo sistema operacional.Para expandir ainda mais o
limite de discos rigídos sendousados simultaneamente, o próximo
passo seria adicionar maisuma máquina servidora, o que
deixaria o software ainda maiscomplexo, pois este agora teria
que decidir entre discos presentesem máquinas diferentes e assim
por diante. Esse é apenas umexemplo de técnica de se alcançar
escalabilidade horizontal.No próximo capítulo, quando
falarmos de técnicas de design,apresentaremos outras abordagens
e padrões de design para aescalabilidade.