ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Habr, ΠΊΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ»Ρ, ΡΠ°Π±ΠΎΡΡ Π² Π΅ΠΊΠΈΠΏΠ° Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π² Exness. ΠΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΡΠΈΡΠ΅ Π΅ΠΊΠΈΠΏΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΎΠΏΠΈΡΠ° ΡΠΈ ΠΎΡ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π° SNI (ESNI) ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΡΠ΅Π±ΡΠ°ΠΉΡ ΠΈ ΡΠ΅ ΡΠΏΠ°Π·Π²Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΠΏΡΠΈΠ΅ΡΠΈ ΠΎΡ ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°.
ΠΡΡΠ²ΠΎ, Π±ΠΈΡ
ΠΈΡΠΊΠ°Π» Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π΅ Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½Π° ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π½ΠΎ CloudFlare ΠΈ Mozilla Π²Π΅ΡΠ΅ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ (Π²
ΠΠ°Π»ΠΊΠΎ ΡΠ΅ΠΎΡΠΈΡ
ΠΠ‘ΠΠ Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° TLS 1.3, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° SNI ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ Π² TLS ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΡΠΊΠΎΡΡΠΈΡΠΊΠ°Π½Π΅ βClient Helloβ. ΠΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Client Hello Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI (Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ SNI Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ESNI):
ΠΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ESNI, ΠΈΠΌΠ°ΡΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
- DNS;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ°.
DNS
Π’ΡΡΠ±Π²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π΄Π²Π° DNS Π·Π°ΠΏΠΈΡΠ° β AΠ TXT (TXT Π·Π°ΠΏΠΈΡΡΡ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ ΠΊΠ»ΡΡ, Ρ ΠΊΠΎΠΉΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΡΡΠΎΠ²Π° SNI) - Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° DoH (DNS ΠΏΡΠ΅Π· HTTPS), ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ) Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI Π±Π΅Π· DoH. Π’ΠΎΠ²Π° Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ESNI ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠ°, Π΄ΠΎ ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏ, ΡΠΎΠ΅ΡΡ Π½ΡΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ DNS ΠΏΡΠ΅Π· UDP. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ°
ΠΠΎΡΡΡΠΏΠ΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°
CloudFlare
Π Π·Π°ΠΏΠΈΡ:
curl 'https://dns.google.com/resolve?name=www.cloudflare.com&type=A'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "www.cloudflare.com.",
"type": 1
}
],
"Answer": [
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.210.9"
},
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.209.9"
}
]
}
TXT Π·Π°ΠΏΠΈΡ, Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΠΎ ΠΎΠ±ΡΠ°Π·Π΅Ρ _esni.FQDN:
curl 'https://dns.google.com/resolve?name=_esni.www.cloudflare.com&type=TXT'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16
}
],
"Answer": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16,
"TTL": 1799,
"data": ""/wEUgUKlACQAHQAg9SiAYQ9aUseUZr47HYHvF5jkt3aZ5802eAMJPhRz1QgAAhMBAQQAAAAAXtUmAAAAAABe3Q8AAAA=""
}
],
"Comment": "Response from 2400:cb00:2049:1::a29f:209."
}
Π’Π°ΠΊΠ° ΡΠ΅, ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° DNS, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ DoH (Π·Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½Π΅ Ρ DNSSEC) ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π° Π·Π°ΠΏΠΈΡΠ°.
ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ
ΠΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° Π±ΡΠ°ΡΠ·ΡΡΠΈ, ΡΠΎΠ³Π°Π²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, TLS 1.3 ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI, ΡΡΠΉ ΠΊΠ°ΡΠΎ ESNI Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° TLS 1.3.
ΠΠ° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄Π° Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI Π²Π½Π΅Π΄ΡΠΈΡ ΠΌΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° go, ΠΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ°
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ESNI Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡΠΈ ΠΊΠ°ΡΠΎ nginx/apache ΠΈ Π΄Ρ., ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Ρ TLS ΡΡΠ΅Π· OpenSSL/BoringSSL, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ESNI.
ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡ ΠΏΡΠ΅Π΄Π½ΠΈΡ ΠΊΡΠ°ΠΉ (ESNI ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ), ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° TLS 1.3 ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½Π΅ Ρ ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈ HTTP(S) ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ Π²ΡΠ·Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ESNI. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π²ΡΠ² Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ - ΡΠΎΠ΅ΡΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΡΡΠΎΡΡΠΈ ΡΠ΅Π± ΡΡΡΠ²ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ESNI.
ΠΠ° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΡΡΠ½ΠΎΡΠ° Π΅ΡΠΎ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°:
ΠΡΠ±Π΅Π»ΡΠ·Π²Π°ΠΌ, ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈΡΠΎ Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ΠΎ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° TLS Π²ΡΡΠ·ΠΊΠ° Π±Π΅Π· ESNI, Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π±Π΅Π· ESNI. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Ρ upstream ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ HTTP ΠΈΠ»ΠΈ HTTPS Ρ TLS Π²Π΅ΡΡΠΈΡ ΠΏΠΎ-Π½ΠΈΡΠΊΠ° ΠΎΡ 1.3 (Π°ΠΊΠΎ upstream Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° 1.3). Π’Π°Π·ΠΈ ΡΡ
Π΅ΠΌΠ° Π΄Π°Π²Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ.
ΠΠ½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI Π½Π° go Π²Π·Π΅Ρ
ΠΌΠ΅ Π½Π°Π·Π°Π΅ΠΌ ΠΎΡ
ΠΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ESNI ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅
Π’Π΅ΡΡΠ²Π°Ρ
ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Ρ go 1.13 Π½Π° Linux (Debian, Alpine) ΠΈ MacOS.
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ
ΠΠ±ΡΠ°ΡΠ½ΠΈΡΡ ΠΏΡΠΎΠΊΡΠΈ ESNI ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ Prometheus, ΠΊΠ°ΡΠΎ rps, Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π°Π³ΠΎΡΠ΅ ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ, Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ/ΡΡΠΏΠ΅ΡΠ½ΠΈ TLS ΡΡΠΊΠΎΡΡΠΈΡΠΊΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° TLS ΡΡΠΊΠΎΡΡΠΈΡΠΊΠ°Π½Π΅. ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΊΡΠΈΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΡΠ°ΡΠΈΠΊΠ°.
ΠΠ·Π²ΡΡΡΠΈΡ ΠΌΠ΅ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΏΡΠ΅Π΄ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π°. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
Running 6m test @ https://esni-rev-proxy.npw:443
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.77s 1.21s 7.20s 65.43%
Req/Sec 13.78 8.84 140.00 83.70%
206357 requests in 6.00m, 6.08GB read
Requests/sec: 573.07
Transfer/sec: 17.28MB
ΠΠ·Π²ΡΡΡΠΈΡ ΠΌΠ΅ ΡΠΈΡΡΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, Π·Π° Π΄Π° ΡΡΠ°Π²Π½ΠΈΠΌ ΡΡ Π΅ΠΌΠ°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° ESNI ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ ΠΈ Π±Π΅Π·. ΠΠΈΠ΅ "ΠΈΠ·Π»ΡΡ ΠΌΠ΅" ΡΡΠ°ΡΠΈΠΊΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ "Π½Π°ΠΌΠ΅ΡΠ°ΡΠ°" Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ.
Π ΡΠ°ΠΊΠ°, Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈ Π½Π°Π³ΠΎΡΠ΅ Ρ HTTP, ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ ~550 rps ΠΎΡ Π΅Π΄ΠΈΠ½ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, ΡΡΡ ΡΡΠ΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° CPU/RAM Π½Π° ESNI ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ:
- 80% ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° (4 vCPU, 4 GB RAM Ρ ΠΎΡΡΠΎΠ²Π΅, Linux)
- 130 MB Mem RSS
ΠΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, RPS Π·Π° ΡΡΡΠΈΡ nginx Π½Π°Π³ΠΎΡΠ΅ ΠΏΠΎ Π²Π΅ΡΠΈΠ³Π°ΡΠ° Π±Π΅Π· TLS (HTTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ») ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Π½Π΅ Π΅ ~ 1100:
wrk -t50 -c1000 -d360s 'http://lb.npw:80' β-timeout 15s
Running 6m test @ http://lb.npw:80
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.11s 2.30s 15.00s 90.94%
Req/Sec 23.25 13.55 282.00 79.25%
393093 requests in 6.00m, 11.35GB read
Socket errors: connect 0, read 0, write 0, timeout 9555
Non-2xx or 3xx responses: 8111
Requests/sec: 1091.62
Transfer/sec: 32.27MB
ΠΠ°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΈΠΌΠ° Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ 4 vCPU, 4 GB RAM Ρ ΠΎΡΡΠΎΠ²Π΅, Linux), Π° Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈΡΡ RPS Π΅ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ (ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΡΠΈΡΡΠΈ Π΄ΠΎ 2700 RPS Π½Π° ΠΏΠΎ-ΠΌΠΎΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ).
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°ΠΌ ΡΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° ESNI ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΄ΠΎΡΡΠ° ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠ°. ΠΡΠ΅ ΠΎΡΠ΅ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΡΡ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ESNI ΠΊΠ»ΡΡ Π² DNS ΠΈ ΡΠΎΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ESNI ΠΊΠ»ΡΡΠΎΠ²Π΅ - ΡΠ΅Π·ΠΈ Π²ΡΠΏΡΠΎΡΠΈ ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ESNI (ΠΊΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅) Π²Π΅ΡΠ΅ Π΅
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com