Ciao,

2018-02-28 13:03 GMT+01:00 Alessio Santacroce
[email protected] [it-torino-java-jug]
<[email protected]>:
>
>
>
> Ciao a tutti,
>
> Questa non e' proprio una domanda su Java, ma so che ci sono qui molti 
> esperti di servizi REST e problemi di rete che magari mi possono dare una 
> buona idea :-)
>
> Sviluppo un servizio REST su protocollo HTTPS.
> Ho come vincolo che le api devono rispondere entro 300 ms.

Molto aggressivo.
Ti basta una GC un po' più lunga del solito e sei già fuori.
Aggiungi un network roundtrip e sei fuori di parecchio.
Posso chiedere il perché di questo limite così severo ?
Puoi anche rispondere che arriva da uno che si è svegliato il mattino
dopo aver visto il film "300" e gli sembrava un numero giusto.

> La maggior parte delle risposte finiscono in tempo.
> Una percentuale, in genere intorno all' 1 per mille, no :(
>
> Ho misurato che spesso gran parte del temp e' perso per la connessione ed in 
> particolare per handshake SSL/SSH.
>
> Per esempio:
>
> curl https://xxx/mio-servizio -w "@curl-format.txt"
>
>     time_namelookup:  0.060681
>        time_connect:  0.061517
>     time_appconnect:  0.168877
>    time_pretransfer:  0.168905
>       time_redirect:  0.000000
>  time_starttransfer:  0.171531
>                     ----------
>          time_total:  0.171547
>
>
> Cosa fareste per ridurre il time_appconnect [The time, in seconds, it took 
> from the start until the SSL/SSH/etc connect/handshake to the remote host was 
> completed]?

Devi assicurarti di avere abilitato (client e server) TLS session resumption.
Questo riduce i roundtrips per il TLS handshake da 2 a 1.
Se puoi usare TLS 1.3, supporta alcune feature sperimentali come zero-RTT.

L'altra cosa da non sottovalutare è quella di fare il caching delle
connessioni TCP che a loro volta richiedono 2 roundtrips.
Conviene aprire le connessioni all'inizio e cercare di tenerle aperte
il più a lungo possibile per evitare il costo di aprirne di nuove.
Un'altra feature sperimentale è quella di usare TCP Fast Open.

Un buon sommario:
https://blogs.windows.com/msedgedev/2016/06/15/building-a-faster-and-more-secure-web-with-tcp-fast-open-tls-false-start-and-tls-1-3/

Le features le devi poi abilitare in base alla piattaforma che usi.

-- 
Simone Bordet
---
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless.   Victoria Livschitz

Reply via email to