Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750...

10
1500+ Kunden 70 mio. Zugriffe p.M. 10 Server MongoDB Ceph / S3 Elasticsearch 5.x Redis Clickhouse Verteilt Marketing- und Produktinformationen Web-Shop optimiert für den technischen Großhandel B2B Messaging-Platform 2009: 1 Server: Tomcat7 + MySQL + Lucene 2009: 2 Installationen: Tomcat7 + MySQL + Lucene 2009: - Cloud-Instanz mit 60+ Kunden 10x on-premise Installation 100+ mio. Außenumsatz MySQL Elasticsearch 6.y Redis Clickhouse 1600 User 1750 Nachrichten pro Tag 4 Server MongoDB Ceph / S3 Elasticsearch 5.z Redis Clickhouse Andreas Haufler Geschäftsführer / Chief Nerd Erfahrungsbericht: Docker in der Java-Welt

Transcript of Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750...

Page 1: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

• 1500+ Kunden

• 70 mio. Zugriffe p.M.

• 10 Server

• MongoDB

• Ceph / S3

• Elasticsearch 5.x

• Redis

• Clickhouse

Verteilt Marketing- und

Produktinformationen

Web-Shop optimiert für den

technischen Großhandel

B2B Messaging-Platform

2009: 1 Server: Tomcat7 +

MySQL + Lucene

2009: 2 Installationen: Tomcat7 +

MySQL + Lucene

2009: -

• Cloud-Instanz mit 60+

Kunden

• 10x on-premise Installation

• 100+ mio. Außenumsatz

• MySQL

• Elasticsearch 6.y

• Redis

• Clickhouse

• 1600 User

• 1750 Nachrichten pro Tag

• 4 Server

• MongoDB

• Ceph / S3

• Elasticsearch 5.z

• Redis

• Clickhouse

Andreas Haufler

Geschäftsführer / Chief Nerd

Erfahrungsbericht: Docker in der Java-Welt

Page 2: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Probleme / Herausforderungen

• MySQL 5.x – wir haben sie alle...

• Ungeplante Java-Updates durch Kunden

• 14+ Test-VMs (ES 5 Cluster, ES 6 Cluster, Mongo Cluster, Redis Cluster...)

• „Wackelige“ Integrationstests

• Kompliziertes Setup der Dev-Umgebung

• Keine Staging-Systeme

• Java 8 -> Java 11

• LDAP / SAML2 Login überall

Page 3: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Roadmap

Dev-Systeme Unit / Integration-Tests

CI-Server / Prozesse

Test- / Staging-Systeme

Prod-Systeme

drone.io

palantir/docker-compose-rule

Page 4: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Dev-Systeme / Unit-Tests

• palantir/docker-compose-rule – bringt JUNIT Integration „out of the box“• Kann manuell gestartet werden für Dev-

Systeme• Wartet bis alle angegebenen Ports offen sind

• Wartet nicht bis die App hinter dem Port sinnvoll antwortet :-/• docker-compose weisst zufällig Ports zu –

PortMapping muss „von Hand“ erfolgen

Page 5: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Beispiel

https://github.com/palantir/docker-compose-rule

Page 6: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

• Microkernel basierte DI• Discovery Based Programming• Fokus auf Produktentwicklung• OpenSource (MIT License)• Module

• Kernel: DI / Config / Utilities• Web: HTTP-WebServer / Mail-API /

Template-Engine• DB: “ORM“ und direct access: JDBC /

MongoDB / Elasticsearch• Biz: User-Manager / Cluster-Sync-API /

Health + Monitoring UI

• Automatisches Starten- und Stoppen von docker-compose über das Framework (via docker-compose-rule)

• Settings werden aus System-Configgezogen

• Testet und wartet z.B. auf MySQL und ES• Initialisiert Datenbanken• Automatisches Port-Mapping• Führt Tests in mehreren Szenarien aus

Page 7: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Demo

• https://github.com/scireum/sirius-kernel/blob/master/src/main/java/sirius/kernel/DockerHelper.java#L137

• https://github.com/scireum/sirius-kernel/blob/master/src/main/java/sirius/kernel/settings/PortMapper.java

• https://github.com/scireum/sirius-db/blob/master/src/main/java/sirius/db/es/Elastic.java#L133

• https://github.com/scireum/sirius-db/blob/master/src/test/resources/test.conf

• https://github.com/scireum/sirius-db/blob/master/src/test/resources/docker-db.yml

• https://github.com/scireum/sirius-db/blob/master/src/test/java/TestSuite.java

• https://github.com/scireum/sirius-db/blob/master/src/test/resources/docker-mariadb-latest.yml

• > mvn test

Page 8: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

• 100% Docker basiert• Config als yaml• Native Integration in GitHub (Auth + WebHooks)• Problem: „docker in docker“ bei Unit-Tests• Standardmäßig keine Persistenz• Keine Globalen „secrets“

drone.io

DEMO

Page 9: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

Beispiel

• https://github.com/scireum/s3ninja/blob/master/.drone.yml• http://drone.scireum.net/scireum/s3ninja

Page 10: Erfahrungsbericht: Docker in der Java-Welt · •Redis •Clickhouse •1600 User •1750 Nachrichten pro Tag •4 Server •MongoDB •Ceph/ S3 •Elasticsearch5.z •Redis •Clickhouse

• https://github.com/palantir/docker-compose-rule

• https://sirius-lib.net

• https://drone.io

• … yes we‘re hiring: https://www.scireum.de/jobs

Andreas HauflerGeschäftsführer / Chief Nerd

Erfahrungsbericht: Docker in der Java-Welt

Andreas HauflerTel.: +49 (0) 7151 90316 21@[email protected] via MEMOIO starten