Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Démystifier le réactif et l'orchestration de se...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Julien Ponge
March 29, 2018
Programming
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Démystifier le réactif et l'orchestration de services avec Vert.x, Kubernetes et Kotlin
Julien Ponge
March 29, 2018
More Decks by Julien Ponge
See All by Julien Ponge
Quarkus Insights 2023-03-06
jponge
0
130
Reactive Streams. 4 Interfaces. Et après ?
jponge
0
64
Scalability and resilience in practice: current trends and opportunities
jponge
0
310
Eclipse Vert.x at BruJUG 2019
jponge
0
210
Du réactif au service du pneu connecté
jponge
0
400
Bringing Reactive to Enterprise Java Developers
jponge
0
350
Golo LyonJUG 2019
jponge
0
300
Vert.x Montreal JUG 2018
jponge
0
550
Bringing Reactive to Enterprise Application Developer // Reactive Summit 2018
jponge
0
300
Other Decks in Programming
See All in Programming
CSC307 Lecture 17
javiergs
PRO
0
320
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
180
net-httpのHTTP/2対応について
naruse
0
470
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
210
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
240
Contextとはなにか
chiroruxx
1
290
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
450
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
530
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
4
1.8k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
750
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
The SEO identity crisis: Don't let AI make you average
varn
0
490
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
Music & Morning Musume
bryan
47
7.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
30 Presentation Tips
portentint
PRO
1
320
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
230
A Modern Web Designer's Workflow
chriscoyier
698
190k
Transcript
Démystifier le réactif et l'orchestration de services avec Vert.x, Kubernetes
et Kotlin
Julien Ponge Maitre de Conférences “Delegated consultant to Red Hat”
on Vert.x Eclipse Golo + extensive F/OSS background ! https://julien.ponge.org/ " @jponge # @jponge https://www.mixcloud.com/hclcast/
“No to average expertise on any of these technologies” !
" (or async)
Kotlin? (1 slide to be an expert)
data class Person(val name: String, val age: Int) fun String.yo()
{ println("$this -> Yo!") } fun wrap(block: () -> Unit) { println("{{{") block() println("}}}") } fun main(args: Array<String>) { wrap { val phil = Person(name="Philippe", age=45) println(phil) phil.name.yo() } }
data class Person(val name: String, val age: Int) fun String.yo()
{ println("$this -> Yo!") } fun wrap(block: () -> Unit) { println("{{{") block() println("}}}") } fun main(args: Array<String>) { wrap { val phil = Person(name="Philippe", age=45) println(phil) phil.name.yo() } }
data class Person(val name: String, val age: Int) fun String.yo()
{ println("$this -> Yo!") } fun wrap(block: () -> Unit) { println("{{{") block() println("}}}") } fun main(args: Array<String>) { wrap { val phil = Person(name="Philippe", age=45) println(phil) phil.name.yo() } }
data class Person(val name: String, val age: Int) fun String.yo()
{ println("$this -> Yo!") } fun wrap(block: () -> Unit) { println("{{{") block() println("}}}") } fun main(args: Array<String>) { wrap { val phil = Person(name="Philippe", age=45) println(phil) phil.name.yo() } } {{{ Person(name=Philippe, age=45) Philippe -> Yo! }}}
Reactive? (because resources are scarce)
None
Application
Reactive systems Reactive streams Reactive programming Reactive “Responding to stimuli”
Manifesto, Actor, Messages Resilience, Elasticity, Scalability, Asynchronous, non-blocking Data flow Back-pressure Non-blocking Data flow Events, Observable Spreadsheets Akka, Vert.x Akka Streams, RxJava, Reactor, Vert.x Reactor, Reactive Spring, RxJava, Vert.x
while (isRunning) { String line = bufferedReader.readLine(); switch (line.substring(0, 4))
{ case "ECHO": bufferedWriter.write(line); break // ... // other cases ( ...) // ... default: bufferedWriter.write("UNKW Unknown command"); } }
x 1000 = %
Virtual machines, Containers, etc
None
Vert.x? (async all the things!)
Eclipse Vert.x Open source project started in 2012 Eclipse /
Apache licensing A toolkit for building reactive applications for the JVM 7K ⋆ on ' Built on top of ! https://vertx.io " @vertx_project
( ) ( Http server verticle Database client verticle
Event Bus + ) “Details for user 1234?” “{data}” 4 instances 1 instance
Events Thread Event Loop
Verticles ( ( ( public class SomeVerticle extends AbstractVerticle
{ @Override public void start() throws Exception { } @Override public void stop() throws Exception { } } class SomeVerticle : AbstractVerticle() { override fun start() { } override fun stop() { } } exports.vertxStart = function() { } exports.vertxStop = function() { }
(demo) Hello Kotlin + Vert.x
None
Async is hard (callback hell is just one facet)
Kotlin coroutines Looks “like” sequential operations async/await, Go-style channels
None
RxJava2 + Kotlin extensions Declarative data flows over event sources
Operators transforming data + event streams
fun main(args: Array<String>) { val rand = Random() val o1
= Observable .fromCallable(rand ::nextInt) .repeat() .take(500, TimeUnit.MILLISECONDS) .filter { it > 0 } .filter { it % 2 == 0 } .map { "[${it}]" } val o2 = Observable.fromIterable(1 ..Long.MAX_VALUE) Observables .zip(o1, o2) { n, id -> "${id} -> ${n}" } .subscribeBy( onNext = logger ::info, onError = { logger.error("Oh?") }, onComplete = { logger.info("Done!") } ) } “id -> [n]” zip()
Kubernetes? (orchestrating containers for you)
https://cloud.google.com/kubernetes-engine/kubernetes-comic
None
https://cloud.google.com/kubernetes-engine/kubernetes-comic
https://cloud.google.com/kubernetes-engine/kubernetes-comic
Pod Pod Pod Pod Pod Pod Pod Pod Node Node
Master(s)
Same host Same network Same namespace Same volumes Same secrets
Pod Container Container Container
Container Container Container Pod replicas & scaling Readiness probes Liveness
probes Restart policy Rolling upgrades (…)
Using Kubernetes (minikube is your friend)
⚙ Temperatures services Aggregate Alarm
Vert.x callbacks Coroutines, liveness RxKotlin Discovery RxKotlin, SockJS event bus
bridge, VueJS, MongoDB
(demo) Kubernetes (minikube) https://github.com/jponge/demo-vertx-kotlin-rxjava2-kubernetes
Outro (how was the nap?)
Unified end-to-end reactive model + ecosystem (not just APIs…) For
all kinds of distributed applications (even the small-scale ones) Flexible toolkit, not a framework (your needs, your call)
https: //youtu.be/ZkWsilpiSqw - Applications réactives avec Eclipse Vert.x . Building
Reactive Microservices in Java https: //goo.gl/ep6yB9 . Guide to async programming with Vert.x for Java developers https: //goo.gl/AcWW3A
Q&A ! https://julien.ponge.org/ " @jponge # @jponge https://www.mixcloud.com/hclcast/