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.

Webservices auf Basis von HTTP/2 und Servlet4

31 views

Published on

Java EE 8 und Servlet 4.0 bringen der Java-Welt das, was das JDK9 nicht geschafft hat: die Unterstützung der Version 2 des HTTP-Protokolls. HTTP/2 bringt HTTP-Push, Request-Multiplexing und Header-Komprimierung ins Web. Die Netzbrandbreite soll besser ausgenutzt werden. Latenzen sollen verringert werden. Bisher profitieren davon in erster Linie Webseiten und Browser. Mit dem Standard Servlet 4.0 kommen diese Neuerungen erstmals standardisiert in die Enterprise-Java-Welt.

Der Vortrag zeigt die Neuerung und deren Implementierung im JDK9 und mit einigen Servlet4-Implementierungen

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Webservices auf Basis von HTTP/2 und Servlet4

  1. 1. Webservices auf Basis von HTTP/2 und Servlet 4.0 JAN WEINSCHENKER 16. März 2018 @JANWEINSCHENKER 1
  2. 2. Agenda 16. März 2018 @JANWEINSCHENKER 2 1. HTTP von damals bis heute 2. Die Technik in HTTP 3. Java und Servlet4 4. Fragen
  3. 3. 16. März 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) 16. März 2018 @JANWEINSCHENKER 4
  5. 5. HTTP/1.0 - 1990 Line Mode Browser (LMB) von Nicola Pellow (CERN) 16. März 2018 @JANWEINSCHENKER 5
  6. 6. HTTP/1.0 – 1991: Nexus Browser Entwickelt von Tim Berners-Lee 16. März 2018 @JANWEINSCHENKER 6
  7. 7. 16. März 2018 @JANWEINSCHENKER 7 java.sun.com - Februar 1998 Quelle: archive.org www.yahoo.com - April 1999 Quelle: archive.org HTTP/1.1 – 1999
  8. 8. Das Web heute 16. März 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 • EDGE, 3G, LTE, WLAN, LAN • Leistungsfähigere Browser • Das Web bzw. HTTP ist zur Grundlage von SOAP- und RESTful-Webservices geworden. 16. März 2018 @JANWEINSCHENKER 9 Aber HTTP/1.* stammt immer noch aus den 90ern!
  10. 10. HTTP/2 – Seit 2015 • Reduziert Protokoll-Overhead und TCP-Sockets • Connection-Multiplexing • Reduziert Anzahl der HTTP-Anfragen • Server-Push • Reduziert Anzahl der TCP-Roundtrips • Komprimierung der Protokoll-Header (HPACK) 16. März 2018 @JANWEINSCHENKER 10
  11. 11. Die Technik in HTTP 16. März 2018 @JANWEINSCHENKER 11
  12. 12. HTTP Request Roundtrip 16. März 2018 @JANWEINSCHENKER 12 Client ServerDNS DNS TCP HTTP GET SSL www.google.d e 172.217.20.19 5 SYN SYN/AC K ACK GET 1x pro Host
  13. 13. HTTP/1.1 Request-Pipelining 16. März 2018 @JANWEINSCHENKER 13 Client Server GET index.html Abwicklung mehrerer GET-Requests innerhalb einer TCP- Verbindung
  14. 14. HTTP/1.1 Workarounds • Mehrere TCP-Connections parallel öffnen • Domain Sharding • TCP-Verbindungen sind relativ “teuer“ • Anzahl an Verbindungen wird durch Clients begrenzt. 16. März 2018 @JANWEINSCHENKER 14
  15. 15. HTTP/1.1 Workarounds - Sharding 16. März 2018 @JANWEINSCHENKER 15 www.site.com https://static1.site.com https://static2.site.com style.css button.css logo.png product.png
  16. 16. HTTP/1.1 Workarounds • Verbindungen reduzieren • Spriting • Zusammenfassen von Ressourcen • CSS und JavaScript • Inlining mittels Base 64 • Probleme beim Caching 16. März 2018 @JANWEINSCHENKER 16 Sprite mit 9 Bildern
  17. 17. HTTP/2 - Keine Workarounds mehr nötig • HTTP/2 bietet Multiplexing • Alle Request-Response-Konversationen laufen simultan über ein und dieselbe TCP-Verbindung. 16. März 2018 @JANWEINSCHENKER 17
  18. 18. 16. März 2018 @JANWEINSCHENKER 18 HTTP/2 - Die Bausteine TCP-Connection Message 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 Message 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 Message Stream ...
  19. 19. 16. März 2018 @JANWEINSCHENKER 19 HTTP/1.1 – Eine Beispiel-Konversation Client Server GET /index.html STATUS 200 index.html GET /style.css STATUS 200 style.css GET /script.js STATUS 200 script.js
  20. 20. 16. März 2018 @JANWEINSCHENKER 20 HTTP/2 – Ein Beispiel-Stream Client Server Message 1 Message 2 STREAM-ID 41 HEADERS-Frame GET /index.html STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM
  21. 21. 16. März 2018 @JANWEINSCHENKER 21 HTTP/2 – Ein Beispiel für Server-PUSH Client Server STREAM-ID 41 HEADERS-Frame GET /index.html STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 PUSH_PROMISE-Frame /style.css via STREAM 42 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM STREAM-ID 42 DATA-Frame {binary style.css} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200
  22. 22. 16. März 2018 @JANWEINSCHENKER 22 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 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200 +END_HEADERS STREAM-ID 42 RST_STREAM-Frame <Error Code>
  23. 23. Compression in HTTP/1.1 • Keine Header Compression • Komprimierung von Nutzdaten mittels GZIP und DEFLATE 16. März 2018 @JANWEINSCHENKER 23
  24. 24. 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 (IPv4). • MSS (Maximum Segment Size) 16. März 2018 @JANWEINSCHENKER 24
  25. 25. ACK TCP Slow Start 16. März 2018 @JANWEINSCHENKER 25 Browser Server GET GET GET ACK ACK Beispiel: 1 GET-Request mit 1500 Byte an Header-Daten und MSS 500 Byte.
  26. 26. Header Compression – HTTP/2 • Komprimierung der HTTP-Header mittels HPACK • Payload-Kompression weiterhin mit GZIP 16. März 2018 @JANWEINSCHENKER 26
  27. 27. 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 16. März 2018 @JANWEINSCHENKER 27
  28. 28. HTTP/2 zum Angucken https://http2.golang.org/gophertiles?latency=200 16. März 2018 @JANWEINSCHENKER 28
  29. 29. Java und Servlet4 16. März 2018 @JANWEINSCHENKER 29
  30. 30. Die Servlet API 16. März 2018 @JANWEINSCHENKER 30 • Die meisten Änderungen sind für Entwickler transparent. • Multiplexing und HPACK erfolgen automatisch. • Lediglich Server Push ist mit eigenem Implementierungsaufwand verbunden.
  31. 31. 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 ja ja (mit Embedded Tomcat 9) Tomcat 9 ja ja OkHttp 3 Client ja nein Jetty Server und Client v9.3+ ja nein Undertow Server 1.4 ja nein Apache Commons HTTP Client 5 ja nein 16. März 2018 @JANWEINSCHENKER 31
  32. 32. Codebeispiele bei Github https://github.com/janweinschenker/servlet4-demo 16. März 2018 @JANWEINSCHENKER 32
  33. 33. Fazit • HTTP/2 setzt sich im Java-Umfeld zu langsam durch. • Mittlerweile gibt es Implementierungen in verbreiteten Frameworks 16. März 2018 @JANWEINSCHENKER 33
  34. 34. Fragen? ??? 16. März 2018 @JANWEINSCHENKER 34
  35. 35. Ende Vielen Dank! 16. März 2018 @JANWEINSCHENKER 35
  36. 36. Icons Icons von http://hawcons.com 16. März 2018 @JANWEINSCHENKER 36

×