Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

HTTP/2 – Ist das auch gut für java-basierte Webservices?

56 views

Published on

Die neue Version 2 des HTTP-Protokolls macht das Netz schneller. Dazu nutzt es viele ausgefeilte technische Raffinessen: Request-Multiplexing, komprimierte Protokoll-Metadaten und Server-Push. All dies macht das Surfen sehr viel angenehmer und sorgt für eine bessere User-Experience.
HTTP/2 zielt darauf ab, die Netzbandbreite besser auszunutzen. Profitieren auch SOAP- und RESTful-Webservices vom neuen HTTP? HTTP/2 bringt Mehraufwand für die Entwickler. Lohnt sich das am Ende? Meist schon, es gibt aber auch Aspekte, die einen echt Nerven kosten.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

HTTP/2 – Ist das auch gut für java-basierte Webservices?

  1. 1. HTTP/2 – Ist das auch gut für java-basierte Webservices? JAN WEINSCHENKER 20. Februar 2018 @JANWEINSCHENKER 1
  2. 2. Agenda 20. Februar 2018 @JANWEINSCHENKER 2 1. HTTP von damals bis heute 2. Die Technik in HTTP 3. Java und Servlet4 4. Fragen
  3. 3. 20. Februar 2018 @JANWEINSCHENKER 3 PROFESSIONALS INDIVIDUALS N3RDS Die Holisticon AG ist eine Management- und IT- Beratung aus Hamburg. Wir entwickeln beste Individualsoftware, Webplattformen und Apps. Geschäftsprozesse durchdringen wir und automatisieren sie. Große Datenmengen machen wir mit Smart-Data- Ansätzen beherrschbar.
  4. 4. HTTP von damals bis heute DIE VORGESCHICHTE VON HTTP/2 (H2) 20. Februar 2018 @JANWEINSCHENKER 4
  5. 5. HTTP/1.0 - 1990 Line Mode Browser (LMB) von Nicola Pellow (CERN) 20. Februar 2018 @JANWEINSCHENKER 5
  6. 6. HTTP/1.0 – 1991: Nexus Browser Entwickelt von Tim Berners-Lee 20. Februar 2018 @JANWEINSCHENKER 6
  7. 7. 20. Februar 2018 @JANWEINSCHENKER 7 www.muenchen.de - April 1999 Quelle: archive.org www.yahoo.com - April 1999 Quelle: archive.org HTTP/1.1 – 1999
  8. 8. Das Web heute 20. Februar 2018 @JANWEINSCHENKER 8 315 Requests 5,79 MB 2,36s
  9. 9. Das Web hat sich verändert • Mehr und komplexere Inhalte • JavaScript, CSS, AJAX, Audio/Video, ... • Mobile Endgeräte, also ggf. unzuverlässige Leitungen • „Dickere“ Leitungen • Leistungsfähigere Browser • Das Web bzw. HTTP ist zur Grundlage von SOAP- und RESTful-Webservices geworden. 20. Februar 2018 @JANWEINSCHENKER 9 Aber HTTP/1.* stammt immer noch aus den 90ern!
  10. 10. HTTP/2 – Seit 2015 • Connection-Multiplexing • Reduziert Protokoll-Overhead und TCP-Sockets • Server-Push • Reduziert Anzahl der HTTP-Anfragen • Komprimierung der Protokoll-Header (HPACK) • Reduziert Anzahl der TCP-Roundtrips 20. Februar 2018 @JANWEINSCHENKER 10
  11. 11. Die Technik in HTTP 20. Februar 2018 @JANWEINSCHENKER 11
  12. 12. HTTP Request Roundtrip 20. Februar 2018 @JANWEINSCHENKER 12 Client ServerDNS DNS TCP HTTP GET SSL www.google.de 172.217.20.195 SYN SYN/ACK ACK GET 1x pro Host
  13. 13. HTTP/1.1 Request-Pipelining 20. Februar 2018 @JANWEINSCHENKER 13 Client Server GET index.html Abwicklung mehrerer GET-Requests innerhalb einer TCP- Verbindung
  14. 14. HTTP/1.1 – Head-Of-Line-Blocking Bei HTTP/1.1 verarbeitet der Client die Antworten des Servers nur in der Reihenfolge, in der er die zugehörigen Anfragen versendet hat. 20. Februar 2018 @JANWEINSCHENKER 14
  15. 15. HTTP/1.1 Workarounds • Mehrere TCP-Connections parallel öffnen • Domain Sharding • TCP-Verbindungen sind relativ “teuer“ • Anzahl an Verbindungen wird durch Clients begrenzt. 20. Februar 2018 @JANWEINSCHENKER 15
  16. 16. HTTP/1.1 Workarounds - Sharding 20. Februar 2018 @JANWEINSCHENKER 16 www.site.com static1.site.com static2.site.com style.css button.css logo.png product.png
  17. 17. HTTP/1.1 Workarounds • Verbindungen reduzieren • Spriting • Zusammenfassen von Ressourcen • CSS und JavaScript • Inlining mittels Base 64 • Probleme beim Caching 20. Februar 2018 @JANWEINSCHENKER 17
  18. 18. HTTP/2 - Keine Workarounds mehr nötig • HTTP/2 bietet Multiplexing • Alle Request-Response-Konversationen laufen simultan über ein und dieselbe TCP-Verbindung. 20. Februar 2018 @JANWEINSCHENKER 18
  19. 19. HTTP/2 Push und Multiplexing 20. Februar 2018 @JANWEINSCHENKER 19 Client Server HTTP GET GET index.html index.html favicon.ico script.js Style.css via Server-PUSH
  20. 20. HTTP/2 - Begrifflichkeiten HTTP/2 HTTP/1.1 Connection Ein TCP Socket Stream Ein Austausch von Request- und Response-Messages zwischen Client und Server Message Ein Request bzw. eine Response Frame Kleinste Einheit zur Kommunikation über die Connection. Eine Message besteht aus einem oder mehreren Frames. 20. Februar 2018 @JANWEINSCHENKER 20
  21. 21. 20. Februar 2018 @JANWEINSCHENKER 21 HTTP/2 - Die Bausteine Connection Stream Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Stream Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Stream ...
  22. 22. 20. Februar 2018 @JANWEINSCHENKER 22 HTTP/2 – Ein Beispiel-Stream Client Server Message 1 Message 2 STREAM-ID 41 HEADERS-Frame GET /index.html +END_HEADER +END_STREAM STREAM-ID 41 HEADERS-Frame STATUS 200 +END_HEADER STREAM-ID 41 DATA-Frame {binary data} STREAM-ID 41 DATA-Frame {binary data} STREAM-ID 41 DATA-Frame {binary data} +END_STREAM
  23. 23. 20. Februar 2018 @JANWEINSCHENKER 23 HTTP/2 – Ein Beispiel für Server-PUSH Client Server STREAM-ID 41 HEADERS-Frame GET /index.html +END_HEADER +END_STREAM STREAM-ID 41 HEADERS-Frame STATUS 200 +END_HEADER STREAM-ID 41 PUSH_PROMISE-Frame /style.css via STREAM 42 STREAM-ID 41 DATA-Frame {binary data} +END_STREAM STREAM-ID 42 DATA-Frame {binary data} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200 +END_HEADER
  24. 24. 20. Februar 2018 @JANWEINSCHENKER 24 HTTP/2 – Noch ein Beispiel für Server-PUSH Client Server STREAM-ID 41 HEADERS-Frame GET /index.html +END_HEADERS +END_STREAM STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 PUSH_PROMISE-Frame /style.css via STREAM 42 +END_HEADERS STREAM-ID 41 DATA-Frame {binary data} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200 +END_HEADERS STREAM-ID 42 RST_STREAM-Frame <Error Code>
  25. 25. Compression in HTTP/1.1 • Keine Header Compression • Komprimierung von Nutzdaten mittels GZIP und DEFLATE 20. Februar 2018 @JANWEINSCHENKER 25
  26. 26. Header-Daten im Browser LIVE-DEMO • www.spiegel.de • www.hsv.de • www.netzpolitik.org 20. Februar 2018 @JANWEINSCHENKER 26
  27. 27. Header-Daten im Browser 1 Kilobyte an Cookie-Daten pro HTTP-Request • Problem beim initialen Verbindungsaufbau: • TCP definiert eine Maximalgröße für die ersten TCP Pakete: 532 bytes. • MSS (Maximum Segment Size) 20. Februar 2018 @JANWEINSCHENKER 27
  28. 28. ACK TCP Slow Start 20. Februar 2018 @JANWEINSCHENKER 28 Browser Server GET GET GET ACK ACK Beispiel: 1 GET-Request mit 1500 Byte an Header-Daten und MSS 500 Byte.
  29. 29. Header Compression – HTTP/2 • Komprimierung der HTTP-Header mittels HPACK • Payload-Kompression weiterhin mit GZIP 20. Februar 2018 @JANWEINSCHENKER 29
  30. 30. Header Compression mit HPACK Dreistufige Komprimierung von HTTP Headern. 1. Vordefiniertes Kompressionswörterbuch für 61 sehr gebräuchliche Header. Z.B.: ◦ 2 = :method GET ◦ 3 = :method POST ◦ 8 = :status 200 ◦ 16 = accept-encoding gzip, deflate 2. Dynamisches Kompressionswörterbuch ◦ Wird zum Zeitpunkt der Verbindungsaufnahme ausgehandelt 3. Statische Huffman-Kodierung 20. Februar 2018 @JANWEINSCHENKER 30
  31. 31. HTTP/2 zum Angucken https://http2.golang.org/gophertiles?latency=200 20. Februar 2018 @JANWEINSCHENKER 31
  32. 32. Java und Servlet4 20. Februar 2018 @JANWEINSCHENKER 32
  33. 33. Die Servlet API 20. Februar 2018 @JANWEINSCHENKER 33 • Die meisten Änderungen sind für Entwickler transparent. • Multiplexing und HPACK erfolgen automatisch. • Lediglich Server Push ist mit eigenem Implementierungsaufwand verbunden.
  34. 34. Java: HTTP/2 Verfügbarkeit Name HTTP/2 Servlet 4 JBOSS EAP 7.1 ja nein Wildfly 9+ ja nein Glassfish 5 ja ja Spring Boot 2 (RC1) ja ja (mit Embedded Tomcat 9) Tomcat 9 ja ja OkHttp 3 Client ja nein Jetty Serve und Client v9.3+ ja nein Undertow Server 1.4 ja nein Apache Commons HTTP Client ja nein 20. Februar 2018 @JANWEINSCHENKER 34
  35. 35. Codebeispiele bei Github https://github.com/janweinschenker/servlet4-demo 20. Februar 2018 @JANWEINSCHENKER 35
  36. 36. Fazit • Mittlerweile gibt es Java- Implementierungen • HTTP/2 setzt sich zu langsam durch. 20. Februar 2018 @JANWEINSCHENKER 36
  37. 37. Fragen? ??? 20. Februar 2018 @JANWEINSCHENKER 37
  38. 38. Ende Vielen Dank! 20. Februar 2018 @JANWEINSCHENKER 38
  39. 39. Icons Icons von http://hawcons.com 20. Februar 2018 @JANWEINSCHENKER 39

×