Beitrag zum Berner Architekten Treffen 37.
Im Streben nach grösserer Agilität und zum Aufbrechen der häufig extrem langen Release-Zyklen bewegen viele Unternehmen ihre Softwarelandschaft in Richtung Microservices mit Continuous Delivery. Durch diese Entwicklung müssen nicht mehr zwingend alle Services uniform sein; es kann die jeweils am besten geeignete Technologie verwendet werden.
Im Rahmen meines Beitrages werde ich zeigen, für welche Einsatzgebiete Scala meiner Meinung nach besonders geeignet ist.
Dabei werde ich vertieft auf ereignisbasiertes Domain Driven Design mit Scala eingehen und Möglichkeiten aufzeigen, wie ein solcher Service mit bereits bestehenden Applikationen integriert werden kann.
Abschliessend gehe ich kurz auf den Betrieb ein; dadurch dass Scala auf der Java Virtual Machine (JVM) aufsetzt, ist eine sehr hohe Stabilität gewährleistet und es kann von bestehendem Betriebs-Know-how profitiert werden.
4. Was verstehe ich unter Microservices?
Domain (Firma, Tätigkeitsfeld)
Quelle: Implementing DDD, Vaughn
5. Was verstehe ich unter Microservices?
Domain (Firma, Tätigkeitsfeld)
Subdomain
Quelle: Implementing DDD, Vaughn
6. Was verstehe ich unter Microservices?
Domain (Firma, Tätigkeitsfeld)
Subdomain
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Quelle: Implementing DDD, Vaughn
7. Was verstehe ich unter Microservices?
Domain (Firma, Tätigkeitsfeld)
Subdomain
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Micro-
Service
Micro-
Service
Micro-
Service
Micro-
Service
Micro-
Service
Quelle: Implementing DDD, Vaughn
8. Was verstehe ich unter Microservices?
Domain (Firma, Tätigkeitsfeld)
Subdomain
Monolith
Nano
9. Was verstehe ich unter Microservices?
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Micro-
Service
Micro-
Service
Micro-
Service
Micro-
Service
Micro-
Service
!
"
#
10. Welche Technologie für welchen Microservice?
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
Bounded
Context
13. Die Vorteile von Scala
f(x)
funktional
Performance
stabiler Betrieb
lesbar
%
immutability
(
Tooling
)
stark typsicher
*
mächtig
∠
JVM JavaScript
14. Lesbarkeit durch kompakten Syntax
case class Name(firstName: String, lastName: String)
val mario = Name(“Mario“, “Siegenthaler“)
val mario2 = mario.copy(lastName = “Goechnaths“)
%
15. Die Vorteile von Scala
f(x)
funktional
Performance
stabiler Betrieb
lesbar
%
immutability
(
Tooling
)
stark typsicher
*
mächtig
∠
JVM JavaScript
16. keine Reflection & keine Codegenerierung
case class User(id: Long, name: String, roles: Set[String])
val json = “{id: 123, name: ‘Mario‘, roles: [‘admin‘, ‘user‘]}“
val user = decode[User](json)
// Either[Error, User] = Right(User(123, “Mario“, ...)
Bibliothek: https://circe.github.io/circe/
∠
17. Die Vorteile von Scala
f(x)
funktional
Performance
stabiler Betrieb
lesbar
%
immutability
(
Tooling
)
stark typsicher
*
mächtig
∠
JVM JavaScript
18. Die Vorteile von Scala
f(x)
funktional
Performance
stabiler Betrieb
lesbar
%
immutability
(
Tooling
)
stark typsicher
*
mächtig
∠
JVM JavaScript
20. Klassische Architektur mit Skalierungsproblemen
Quelle: https://www.slideshare.net/jboner/from-microliths-to-microsystems
Microlith
Single Instance
SQL
REST
Service
JPA
29. Fazit
Scala für Kernkomponenten oder hoher Last
Scala für Data Science und Machine Learning
Idiomatisch nutzen: Funktional, Immutable, Typsystem
Prüfen: Events statt RPC/REST für Integration