System Design · caderno de estudo

Rabiscos de System Design

Diagramas animados pra fixar o que acontece por baixo do código. Um tema por prancha, uma ideia por cena.

Série Java Networking · 01

O que tem por baixo de uma chamada REST

restTemplate.getForObject("http://10.0.0.7:80/pedidos", Pedido[].class);
redecliente192.168.0.12app · RestTemplateservidor10.0.0.7:5432Postgres:80Tomcat · HTTP:9092Kafkao que acontece aqui?
01 / 07

No código, só uma URL

Você escreve uma linha com RestTemplate e pronto. Mas essa URL carrega tudo o que a rede precisa saber: em qual máquina chegar e qual programa vai atender.

Use ← e → pra trocar de cena, espaço pra pausar.

Pra fixar

  • IP: em qual máquina chegar.
  • Porta: qual programa, dentro da máquina, atende.
  • Socket: a ponta da conexão, um IP + uma porta de cada lado.
  • connectTimeout: quanto esperar pelo handshake. readTimeout: quanto esperar pela resposta, com a conexão já aberta.
  • Timeout no cliente não cancela nada no servidor: o trabalho continua lá do outro lado.
  • Pool e keep-alive economizam o handshake reaproveitando sockets abertos.

Os mesmos dois tempos, sem o framework

try (var socket = new Socket()) {
  socket.connect(new InetSocketAddress("10.0.0.7", 80), 2_000); // connectTimeout
  socket.setSoTimeout(5_000);                                  // readTimeout
  // ... write(request), read(response)
}

// RestTemplate: same two timeouts
var factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(Duration.ofSeconds(2));
factory.setReadTimeout(Duration.ofSeconds(5));