As redes internas costumam usar conexões de 1 Gbps ou mais rápidas. As conexões de fibra óptica ou ligação permitem larguras de banda muito maiores entre os servidores. Agora imagine o tamanho médio de uma resposta JSON de uma API. Quanto dessas respostas pode ser transmitida por uma conexão de 1 Gbps em um segundo?
Vamos realmente fazer as contas. 1 Gbps é 131 072 KB por segundo. Se uma resposta JSON média for de 5 KB (o que é bastante!), Você poderá enviar 26 214 respostas por segundo através do cabo com apenas um par de máquinas . Não é tão ruim, não é?
É por isso que a conexão de rede geralmente não é o gargalo.
Outro aspecto dos microsserviços é que você pode dimensionar facilmente. Imagine dois servidores, um hospedando a API e outro consumindo-a. Se alguma vez a conexão se tornar um gargalo, basta adicionar dois outros servidores e você poderá dobrar o desempenho.
É quando nossas 26 214 respostas anteriores por segundo se tornam muito pequenas para a escala do aplicativo. Você adiciona outros nove pares e agora pode servir 262 140 respostas.
Mas vamos voltar ao nosso par de servidores e fazer algumas comparações.
Se uma consulta média não armazenada em cache em um banco de dados demorar 10 ms., Você estará limitado a 100 consultas por segundo. 100 consultas. 26 214 respostas. Atingir a velocidade de 26 214 respostas por segundo requer uma grande quantidade de cache e otimização (se a resposta realmente precisar fazer algo útil, como consultar um banco de dados; as respostas no estilo "Hello World" não se qualificam).
No meu computador, no momento, o DOMContentLoaded para a página inicial do Google teve 394 ms. depois que a solicitação foi enviada. Isso é menos de 3 solicitações por segundo. Para a página inicial do Programmers.SE, ocorreram 603 ms. depois que a solicitação foi enviada. Isso não é nem 2 solicitações por segundo. A propósito, eu tenho uma conexão de internet de 100 Mbps e um computador rápido: muitos usuários esperam mais.
Se o gargalo for a velocidade da rede entre os servidores, esses dois sites poderão literalmente fazer milhares de chamadas para APIs diferentes enquanto veiculam a página.
Esses dois casos mostram que a rede provavelmente não será o seu gargalo na teoria (na prática, você deve fazer os benchmarks e os perfis reais para determinar a localização exata do gargalo do seu sistema específico hospedado em um hardware específico). O tempo gasto realizando o trabalho real (seria consultas SQL, compactação, qualquer que seja) e enviando o resultado ao usuário final é muito mais importante.
Pense em bancos de dados
Geralmente, os bancos de dados são hospedados separadamente do aplicativo Web que os utiliza. Isso pode suscitar uma preocupação: e a velocidade da conexão entre o servidor que hospeda o aplicativo e o servidor que hospeda o banco de dados?
Parece que há casos em que a velocidade da conexão se torna problemática, ou seja, quando você armazena grandes quantidades de dados que não precisam ser processados pelo próprio banco de dados e devem estar disponíveis agora (ou seja, arquivos binários grandes). Mas tais situações são raras: na maioria dos casos, a velocidade de transferência não é tão grande em comparação com a velocidade de processamento da própria consulta.
Quando a velocidade de transferência realmente importa é quando uma empresa está hospedando grandes conjuntos de dados em um NAS, e o NAS é acessado por vários clientes ao mesmo tempo. É aqui que uma SAN pode ser uma solução. Dito isto, esta não é a única solução. Os cabos Cat 6 podem suportar velocidades de até 10 Gbps; A ligação também pode ser usada para aumentar a velocidade sem alterar os cabos ou os adaptadores de rede. Existem outras soluções, envolvendo replicação de dados em vários NAS.
Esqueça a velocidade; pense em escalabilidade
Um ponto importante de um aplicativo Web é poder escalar. Embora os desempenhos reais sejam importantes (porque ninguém quer pagar por servidores mais poderosos), a escalabilidade é muito mais importante, porque permite que você jogue hardware adicional quando necessário.
Se você tiver um aplicativo não particularmente rápido, perderá dinheiro porque precisará de servidores mais poderosos.
Se você tiver um aplicativo rápido que não pode ser dimensionado, perderá clientes porque não poderá responder a uma demanda crescente.
Da mesma forma, as máquinas virtuais foram vistas há uma década como um enorme problema de desempenho. De fato, hospedar um aplicativo em um servidor versus hospedá-lo em uma máquina virtual teve um impacto importante no desempenho. Embora a diferença seja muito menor hoje, ela ainda existe.
Apesar dessa perda de desempenho, os ambientes virtuais se tornaram muito populares devido à flexibilidade que oferecem.
Assim como na velocidade da rede, você pode achar que a VM é o gargalo real e, dada a sua escala real, você economizará bilhões de dólares hospedando seu aplicativo diretamente, sem as VMs. Mas não é isso que acontece em 99,9% dos aplicativos: o gargalo deles está em outro lugar, e a desvantagem de uma perda de alguns microssegundos por causa da VM é facilmente compensada pelos benefícios da abstração e escalabilidade de hardware.