31
Speaker: Scala – wo macht der Einsatz Sinn? am Berner Architekten Treffen Mario Siegenthaler 23.06.2017

Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Speaker:

Scala – wo macht der Einsatz Sinn?am Berner Architekten Treffen

Mario Siegenthaler

23.06.2017

Page 2: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

linkyard

Continuous Delivery Testing Identity und Access

Page 3: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Soll ich

Microservices

in

Scala

implementieren?

(und wenn ja: welche?)

Page 4: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

Domain (Firma, Tätigkeitsfeld)Quelle: Implementing DDD, Vaughn

Page 5: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

Domain (Firma, Tätigkeitsfeld)

Subdomain

Quelle: Implementing DDD, Vaughn

Page 6: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

Domain (Firma, Tätigkeitsfeld)

Subdomain

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Quelle: Implementing DDD, Vaughn

Page 7: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

Domain (Firma, Tätigkeitsfeld)

Subdomain

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Micro-Service

Micro-Service

Micro-Service

Micro-Service

Micro-Service

Quelle: Implementing DDD, Vaughn

Page 8: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

Domain (Firma, Tätigkeitsfeld)

Subdomain

Monolith

Nano

Page 9: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Was verstehe ich unter Microservices?

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Micro-Service

Micro-Service

Micro-Service

Micro-Service

Micro-Service

!

"

#

Page 10: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Welche Technologie für welchen Microservice?

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Page 11: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Scala für Microservices

BoundedContext

Scala

Page 12: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Scala ist eine sichere Wahl

$

% &

'

scalacenter

#11

Page 13: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Die Vorteile von Scala

f(x)funktional

Performance stabiler Betrieb

lesbar%

immutability(

Tooling)

stark typsicher*

mächtig∠

JVM JavaScript

Page 14: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Lesbarkeit durch kompakten Syntax

case class Name(firstName: String, lastName: String)

val mario = Name(“Mario“, “Siegenthaler“)val mario2 = mario.copy(lastName = “Goechnaths“)

%

Page 15: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Die Vorteile von Scala

f(x)funktional

Performance stabiler Betrieb

lesbar%

immutability(

Tooling)

stark typsicher*

mächtig∠

JVM JavaScript

Page 16: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

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/

Page 17: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Die Vorteile von Scala

f(x)funktional

Performance stabiler Betrieb

lesbar%

immutability(

Tooling)

stark typsicher*

mächtig∠

JVM JavaScript

Page 18: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Die Vorteile von Scala

f(x)funktional

Performance stabiler Betrieb

lesbar%

immutability(

Tooling)

stark typsicher*

mächtig∠

JVM JavaScript

Page 19: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Vorschlag für Einsatz

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Scala

Scala

Page 20: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Klassische Architektur mit Skalierungsproblemen

Quelle: https://www.slideshare.net/jboner/from-microliths-to-microsystems

Microlith

Single Instance

SQL

REST

Service

JPA

Page 21: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Lösung: ereignisbasiertes Domain Driven Design(Event-Sourcing)

Command

Aggregate

Event

Page 22: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Alles basiert auf Ereignissen

Process Manager(Saga)

Read Model

Page 23: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Integration über Ereignisse

Page 24: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Immutable

Funktional

Bessere Isolation Domain

Mächtige Process Models

Actors mit Akka

Gute Gelegenheit(Paradigmenwechsel)

Scala passt optimal dazu

Page 25: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Wann Event-first-DDD anwenden?

Komplexe Business

LogikAbläufe

über Zeit oder

zwischen Systemen

Hohe Last (lesend &

mutierend)

Integration mit Machine

Learning

Page 26: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Für welche Microservices ist Scala gut?

BoundedContext

BoundedContext

BoundedContext

BoundedContext

BoundedContext

Scala

Scala

Page 27: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Einsatzgebiet: Analytics

, , , ,

Page 28: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

Einsatzgebiet: Analytics

, , , ,

- Performant

- Deklarativ

- Mathematische Notationen abbildbar

- Typsicher

Page 29: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

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

Page 30: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn
Page 31: Scala –wo machtder EinsatzSinn?€¦ · Was verstehe ich unter Microservices? Domain (Firma, Tätigkeitsfeld) Subdomain Quelle: ImplementingDDD, Vaughn

linkyard agMilkenstrasse 19

3150 Schwarzenburg

Mario SiegenthalerManaging Partner

[email protected]