Essa pode ser uma pergunta boba, mas eu e poucos amigos discutimos as possíveis limitações do TCP. Temos um aplicativo que escuta clientes (pense em um gateway) e roteia todos os dados de clientes conectados por meio de um único editor kafka conectado a um tópico.
Um dos meus amigos está dizendo que o TCP será um problema para esse gateway, pois estabelecerá uma nova conexão para cada mensagem que enviar (não o kafka, mas o próprio protocolo de transporte subjacente), exigindo uma nova porta a cada vez. Na velocidade em que estaremos enviando mensagens para esses clientes (gigabytes), o kafka ficará sem portas para ler?
Eu desenvolvi o desenvolvimento por vários anos e nunca ouvi falar disso antes e gostaria de obter um entendimento de nível mais baixo (que eu pensava ter) de como o TCP funciona. Meu entendimento é que, quando você estabelece uma conexão TCP, essa conexão permanece aberta até que o tempo limite seja atingido pelo aplicativo ou forçado a fechar pelo servidor ou pelo cliente. Os dados enviados por essa conexão são um fluxo e não abrem / fecham novas conexões, independentemente dos 3 Vs (volume, velocidade, variedade).
No que diz respeito às portas, uma porta é usada para transmissão e a porta interna do descritor de arquivo é algo que o aplicativo gerencia para leitura / gravação de clientes individuais. Eu nunca entendi o TCP para estabelecer novas conexões para cada pacote que ele escreve.
Peço desculpas antecipadamente se esta pergunta não for direta e / ou vaga. Estou realmente confuso e espero que alguém possa fornecer um pouco mais de contexto ao que meus colegas estão dizendo?
SO_REUSEADDR
para fechar soquetes mais rapidamente, aumentar o intervalo de portas efêmeras etc. Além disso, TCP_FASTOPEN
várias alternâncias no nível do sistema operacional podem ser usadas para solucionar outras limitações conhecidas do TCP. De qualquer maneira, não há sentido em discutir as limitações do TCP quando você nem sequer tem uma carga de trabalho para testar.