erfahrungsbericht: docker in der java-welt · •redis •clickhouse •1600 user •1750...
TRANSCRIPT
• 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
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
Roadmap
Dev-Systeme Unit / Integration-Tests
CI-Server / Prozesse
Test- / Staging-Systeme
Prod-Systeme
drone.io
palantir/docker-compose-rule
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
Beispiel
https://github.com/palantir/docker-compose-rule
• 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
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
• 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
Beispiel
• https://github.com/scireum/s3ninja/blob/master/.drone.yml• http://drone.scireum.net/scireum/s3ninja
• 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