Beim Surfen im Internet wissen wir alle, dass die Verschlüsselung über SSL sehr wichtig ist. Bei PayPal hat Sicherheit unsere oberste Priorität. Wir verwenden End-to-End-Verschlüsselung, nicht nur unsere öffentlichen Websites, sondern auch für unsere internen Serviceanrufe. Die SSL -Verschlüsselungstechnologie wird die Leistung von Node.js. Wir haben uns die Zeit genommen, unsere externen Dienste anzupassen und das Beste aus ihnen zu machen. Hier finden Sie eine Liste einiger SSL -Konfigurationsstimmungen, die die externe Leistung von SSL erheblich verbessern.
SSL -Passwort
In der Box verwendet Node.js 'SSL einen sehr leistungsstarken Satz von Kennwortalgorithmen. Insbesondere der DIFEE Hermann Key Exchange und die elliptischen Kurvenalgorithmen sind äußerst teuer. Und wenn Sie in der Standardkonfiguration zu viele externe SSL -Aufrufe verwenden, wird die Leistung von Node.js grundlegend geschwächt. Um die Schlussfolgerung zu ziehen, wie langsam es ist, finden Sie hier eine CPU -Stichprobe des Serviceanrufs:
918834.0ms 100.0% 0.0 node (91770)911376.0ms 99.1% 0.0 start911376.0ms 99.1% 0.0 node::Start911363.0ms 99.1% 48.0 uv_run909839.0ms 99.0% 438.0 uv__io_poll876570.0ms 95.4% 849.0 uv__stream_io873590.0ms 95,0% 32.0 Knoten :: StreamWrap :: OnreadCommon87373.0ms 95,0% 7.0 Node :: makeCallback873265.0ms 95.0% 15.0 Node :: MakedAincallback873125.0ms 95.0% 61.0 V8 ::: 95,0% 13364.0 _ZN2V88Internall6invokeebns0832660.0ms 90,6% 431.0 _zn2v88internall21BuiltIn821687.0 ms 89,4% 39.0 Node :: Crypto :: Connection :: Connection :: Connection :: Connection: ssl23_connect813562.0ms 88.5% 54.0 ssl3_connect802651.0ms 87.3% 35.0 ssl3_send_client_key_exchange417323.0ms 45.4% 7.0 EC_KEY_generate_key383185.0ms 41.7% 12.0 ECDH_COMPUTE_KEY1545.0MS 0,1% 4.0 TLS1_GENATTE_MASTER_SECRET123.0MS 0,0% 4.0 SSL3_DO_Write ...
Konzentrieren wir uns auf die Generation von Schlüssel:
802651.0ms 87.3% 35.0 SSL3_Send_Client_Key_Exchange417323.0ms 45.4% 7.0 EC_Key_Generate_Key383185.0ms 41.7% 12.0 ECDH_COMPUTE_Key
87% dieses Anrufs werden für die Generierung des Schlüssels aufgewendet!
Diese Passwörter können geändert werden, um intensives Computing zu reduzieren. Diese Idee wurde in HTTPS (oder Proxy) implementiert. Zum Beispiel:
var agent = new https.Agent ({"key": key, "cert": cert, "ciphers": "aes256-gcm-sha384"});Die obigen Schlüssel werden nicht mehr mit den teuren Diffie Herman -Schlüssel ausgetauscht. Nachdem wir etwas Ähnliches ersetzt haben, können wir im folgenden Beispiel signifikante Änderungen sehen:
... 57945.0ms 32,5% 16.0 SSL3_Send_Client_Key_Exchange28958.0ms 16.2% 9.0 generate_key26827.0ms 15.0% 2.0 compute_key ...
Mit der OpenSSL -Dokumentation erfahren Sie mehr über Passwortzeichenfolgen.
SSL Session Recovery
Wenn Ihr Server die SSL -Sitzungswiederherstellung unterstützt, können Sie die Sitzung über HTTPS (oder Proxy) übergeben. Sie können auch die CreateConnection -Funktion des Proxy einwickeln:
var CreateConnection = Agent.CreateConnection; Agent.CreateConnection = Funktion (Optionen) {options.Session = session; return createConnection.call (Agent, Optionen);};Durch Hinzufügen eines kurzen Telefonhaltersystems zur Verbindung kann die Sitzung der Sitzung die Verwendung von Verbindungen verringern.
Bleib aktiv
Wenn der Proxy aktiv bleibt, wird der SSL -Handshake erleichtert. Ein Keep-Alive-Agent wie Agentkeepalive kann das Problem des aktiven Haltens des Knotens beheben, aber in Node0.12 ist dies nicht erforderlich.
Eine andere Sache, an die man sich erinnern sollte, sind die Proxy Maxsockets. Wenn dieser Wert hoch ist, kann er sich negativ auf die Leistung auswirken. Steuern Sie Ihren MaxSockets -Wert basierend auf der Anzahl der von Ihnen erstellten externen Verbindungen.
Plattengröße
tls.lab_buffer_size bestimmt die Zuordnungsgröße des vom TLS -Client (Server) verwendeten Plattenpuffer. Seine Größe stand auf 10 MB.
Diese zugewiesenen Intervalle erweitern Ihre RSS und erhöhen die Zeit für die Müllsammlung. Dies bedeutet, dass eine hohe Kapazität die Leistung beeinflusst. Das Anpassen dieser Kapazität auf einen relativ niedrigen Wert kann die Leistung der Speicher und der Müllsammlung verbessern. In Version 0.12 wurde die Plattenzuweisung verbessert und es ist keine weitere Anpassung erforderlich.
Jüngste Änderungen in SSL in 0,12
Testen Sie die SSL Enhanced Version von Fedor.
Testanweisungen
Führen Sie einen HTTP -Dienst als SSL -Service -Proxy aus, der alle auf dem Computer ausgeführt werden.
v0.10.22
Ausführen 10S-Test @ http://127.0.0.1:3000/20 Threads und 20 Connections Thread Statistiken AVG STDEV MAX +/- STDEVLATECY 69.38MS 30.43MS 268.56MS 95,24%REQ/SEC 14.95 4.16 20.00 58.65%3055555555 Requests In 10.01s, 337.00 58.655%3055 Requests in 10.01s, 337.12KB 58.65%3055 Requests in 10.01s, 337.12KB, 337.12Kb. ReadRequests/Sek.: 305.28TRANSFER/SEC: 33,69 KB
v0.11.10-Pre (erstellt aus der Hauptversion)
Ausführen von 10S-Test @ http://127.0.0.1:3000/20 Threads und 20 Connections Thread Statistiken AVG STDEV MAX +/- STDEVLATECY 261.86TRANSFER/SEC: 27.62KB
Es gibt keinen großen Unterschied, aber dies sollte dem Standardkennwort zugeordnet werden. Passen wir also die Proxyoptionen für das Kennwort an. Zum Beispiel:
var agent = new https.Agent ({"key": key, "cert": cert, "ciphers": "aes256-gcm-sha384"});v0.10.22
Ausführen von 10S-Test @ http: // localhost: 3000/20 Threads und 20 Connections Thread Statistiken AVG STDEV MAX +/- STDEVLATENZ 59.85MS 6.77MS 95.71MS 77.29%Req/Sek. 16.39 2.36 22.00 61.97%33339 Anfragen in 10.00S, 368.46KB Reads/Sec. 333.79Transfer/Sek.: 36,83KB
v0.11.10-Pre (erstellt aus der Hauptversion)
Ausführen von 10S-Test @ http: // localhost: 3000/20 Threads und 20 Connections Thread Statistiken AVG Stdev max +/- stdevlatenz 38.99ms 5.96ms 71,87ms 86.22%Req/Sek. 25,43 5.70 35.00 63.36%5160 Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00S, 569.41KBS, Anfragen in 10.00s, 569.41KBS. 515.80TRANSFER/SEC: 56,92 KB
Wie wir sehen können, ist dies nach der Änderung der Fedor ein großer Unterschied: Die Leistung von 0,10 auf 0,12 ist fast zweimal schlechter!
Zusammenfassen
Einige Leute fragen vielleicht "Warum nicht einfach SSL ausschalten, es wird schneller, nachdem es ausgeschaltet ist", und für manche Leute ist es auch eine Option. Tatsächlich ist dies eine repräsentativere Antwort, wenn ich andere frage, wie sie SSL -Leistungsprobleme lösen. Wenn jedoch etwas, das SSL, nur zunimmt, aber nicht abnimmt; Und trotz viel zur Verbesserung der SSL in Node.js ist eine Leistungsstimmung noch erforderlich. Ich hoffe, einige der oben genannten Techniken helfen Ihnen dabei, die Leistung des SSL -Anwendungsfalls anzupassen.