Monolithische Mehrschichtarchitekturen scheinen ihre besten Tage hinter sich zu haben. Heute muss alles “micro”, „loosely coupled“ und „highly flexible“ sein. Ach ja, “resilient” nicht zu vergessen! Hört sich spannend an, aber was genau bedeutet das eigentlich für uns Entwickler/Architekten? Brauchen wir wirklich neue Architekturen? Und wenn ja, welche Herausforderungen ergeben sich dadurch? Mit welchen Patterns und Best Practices kann man diese Herausforderungen bewältigen? Und wie sieht überhaupt ein möglicher Migrationspfad aus, wenn man nicht das Glück hat, auf der grünen Wiese starten zu dürfen? Fragen über Fragen. Die zugehörigen Antworten auf dem Weg in eine leichtgewichtige(re) Zukunft gibt es in der Session.
3. ÜBER MICH
Wer bin ich - und wen ja, wie viele?
• CIO New Technologies
• Enterprise & Mobile
• Autor, Speaker, Coach & Mentor
• Snowboard & MTB Enthusiast
• mehrfacher Vater, einfacher Ehemann
Lars Röwekamp (a.k.a. @mobileLarson)
#WISSENTEILEN
LR
26. Monolith
• Umsetzung von Features dauert zu lange
• Architektur-Qualität nimmt ab (an Bedeutung)
• Qualität verwässert
• Technologische „Schulden“ sind bekannt
• „-ility“ Probleme wohin man schaut
• Deplyoment ist kompliziert und dauert lang
• Skalierung hat Limit erreicht
• Replacement/Refactoring ist zu teuer
Omni-Channel Architecture
#WISSENTEILEN
51. Versionierung
Best Practices technisch
• gar nicht
• gar nicht (via neue Ressourcen)
• gar nicht (via erweiterbarer Datenformate)
• Versionsnummer in der URL
• Version Request Header
• Content Negotiation
Lightweight Architecture
#WISSENTEILEN
55. Versionierung
Lightweight Architecture
#WISSENTEILEN
// Versioning via adaptable data format
{ ”items" : [ {
"name" : "coffee",
"quantity" : 1,
"milk" : "semi",
"size" : "large",
"price" : "4.00 USD"
} ],
“price" : "4.00 USD"
"location" : "take-away"
}
„Are you a
tolerant reader?“
56. Versionierung
Lightweight Architecture
#WISSENTEILEN
// Versioning via URL (default version)
GET /orders/1234 HTTP/1.1
[various other headers]
// Versioning via URL (version part of path)
GET /v2/orders/1234 HTTP/1.1
[various other headers]
// Versioning via URL (as request parameter)
GET /orders/1234?ver=v2 HTTP/1.1
[various other headers]
57. Versionierung
Lightweight Architecture
#WISSENTEILEN
// Versioning via Header(default version)
GET /orders/1234 HTTP/1.1
// Versioning via Version Header
GET /orders/1234 HTTP/1.1
Api-version: 2.1
// Versioning via Accept Header
GET /orders/1234 HTTP/1.1
Accept: application/vnd.abc.xyz.v2.1+json
61. Error Handling
„Is it a bug or a feature?“
• Error Handling
• Compensation Algorithmn
Lightweight Architecture
#WISSENTEILEN
62. Error Handling
Status Codes - Pro Tipp: Use them!
• 1xx: Hold on ...
• 2xx: Here you go!
• 3xx: Go away!
• 4xx: You f#!?ed up!
• 5xx: I f#!?ed up!
Lightweight Architecture
#WISSENTEILEN
63. Error Handling
Status Codes - Pro Tipp: Use them!
• 1xx: Hold on ...
• 2xx: Here you go!
• 3xx: Go away!
• 4xx: You f#!?ed up!
• 5xx: I f#!?ed up!
Omni-Channel Architecture
#WISSENTEILEN
64. Lightweight Architecture
#WISSENTEILEN
// GET order with id 1234
GET /orders/1234 HTTP/1.1
[various other headers]
// Order with id 1234 is not available
HTTP/1.1. 404 Not found
Error Handling
Status
Codes
65. Lightweight Architecture
#WISSENTEILEN
// GET order with id 1234
GET /orders/1234 HTTP/1.1
[various other headers]
// Order with id 1234 is no more available
HTTP/1.1. 410 Gone
Error Handling
Status
Codes
66. Lightweight Architecture
#WISSENTEILEN
// GET order with more than 5 items
GET /orders?itemcount>=5 HTTP/1.1
[various other headers]
// No order found for this query.
// Response has no content (by purpose)
HTTP/1.1. 204 No content
Error Handling
Status
Codes
67. Error Handling
Manchmal kommt es anders als man denkt!
• „Code for Code“: Status Code & Appliction Level Code
• „Message for People“: Für Logs, Ausgaben, ...
• „Payload and Format“: genormte Error-Payload Format
• Kein Stacktrace
• Exception Mapper als Provider auf äußerster Ebene
Lightweight Architecture
#WISSENTEILEN
69. Error Handling
Compensation Algorithm
• Transactions
• Eventual Consistency
• Service not available
Multi-Channel Architecture
#WISSENTEILEN
„Starbucks does not use
Two-Phase Commit“
http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
71. Chaching & Sync
Always remember: „The Web is your Friend“
• das Web bietet tolle Möglichkeiten
• RESTful Service nutzen das Web bzw. HTTP
Lightweight Architecture
#WISSENTEILEN
72. Chaching & Sync
Aber wer cached eigentlich was?
• Client (Web Browser, REST Client, ...)
• Proxy Caches („man in the middle cache“)
• Content Delivery Networks (CDNs)
Lightweight Architecture
#WISSENTEILEN
77. Analytics
Wider dem Kontrollverlust: Analytics als Grundlage für
strategische Entscheidungen
• Was macht der User eigentlich?
• Und in welchem Kontext?
• Werden meine Konzepte und Daten genutzt?
• Wenn ja, wie? Wenn nein, warum nicht?
Lightweight Architecture
#WISSENTEILEN
78. Analytics
Monitore
• deine Ratings
• deinen Traffic
• deine UX
BTW: App ist nicht Web! Einmal deinstalliert ist immer deinstalliert.
Lightweight Architecture
#WISSENTEILEN