Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Holly Cummins Senior Principal Software Engineer, Quarkus GOTO Amsterdam June 27, 2023 @[email protected] faster greener happier why quarkus should be your next tech stack

Slide 4

Slide 4 text

@holly_cummins #RedHat let’s remember how computers used to be

Slide 5

Slide 5 text

@holly_cummins #RedHat let’s remember how computers used to be 1832

Slide 6

Slide 6 text

@holly_cummins #RedHat on-prem dedicated hardware long-lived processes 2005

Slide 7

Slide 7 text

@holly_cummins #RedHat 2015 “please do not make unfavourable tea analogies in your writing.”

Slide 8

Slide 8 text

@holly_cummins #RedHat 2022

Slide 9

Slide 9 text

@holly_cummins #RedHat #GOTOams 2011 microservices

Slide 10

Slide 10 text

@holly_cummins #RedHat #GOTOams 2013 containers (almost) change everything

Slide 11

Slide 11 text

@holly_cummins #RedHat #GOTOams 2013 containers (almost) change everything

Slide 12

Slide 12 text

@holly_cummins #RedHat #GOTOams java apps run on the cloud, but have they really adapted to cloud?

Slide 13

Slide 13 text

@holly_cummins #RedHat Container platform um … no machine Go Go Go Go Go Go Go Go Go Go Go Go Go Go

Slide 14

Slide 14 text

@holly_cummins #RedHat Container platform um … no machine NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS machine Go Go Go Go Go Go Go Go Go Go Go Go Go Go

Slide 15

Slide 15 text

@holly_cummins #RedHat Container platform um … no machine HotSpot Heap HotSpot Heap HotSpot Heap HotSpot Heap machine NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS machine Go Go Go Go Go Go Go Go Go Go Go Go Go Go

Slide 16

Slide 16 text

@holly_cummins #RedHat

Slide 17

Slide 17 text

@holly_cummins #RedHat “I can’t bring up the microservices in my Java dev stack

Slide 18

Slide 18 text

@holly_cummins #RedHat “I can’t bring up the microservices in my Java dev stack … on my brand new Apple laptop with a M1 chip and 64GB of RAM.” - fintech developer

Slide 19

Slide 19 text

@holly_cummins #RedHat #GOTOams in the cloud, apps get started and stopped often

Slide 20

Slide 20 text

@holly_cummins #RedHat #GOTOams in the cloud, apps get started and stopped often

Slide 21

Slide 21 text

@holly_cummins #RedHat #GOTOams java servers are not very much like light switches

Slide 22

Slide 22 text

@holly_cummins #RedHat #GOTOams java servers are not very much like light switches

Slide 23

Slide 23 text

@holly_cummins #RedHat #GOTOams java servers are not very much like light switches (historically)

Slide 24

Slide 24 text

uh, can we do better than that?

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

enter … quarkus

Slide 27

Slide 27 text

@holly_cummins #RedHat spoiler: we did better :) CONTAINER ORCHESTRATION Machine Machine Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Machine NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Machine Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus https:/ /developers.redhat.com/blog/2017/03/14/java-inside-docker/

Slide 28

Slide 28 text

@holly_cummins #RedHat Container orchestration Node Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Quarkus Node Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack … a lot better quarkus native

Slide 29

Slide 29 text

an open source stack to write java apps quarkus

Slide 30

Slide 30 text

an open source stack to write java apps quarkus

Slide 31

Slide 31 text

@holly_cummins #RedHat #GOTOams so, did we adapt to the cloud?

Slide 32

Slide 32 text

do quarkus applications start faster? Quarkus + GraalVM 0.014 Seconds REST Quarkus + OpenJDK 0.75 Seconds Traditional Cloud-Native Stack 4.3 Seconds https://quarkus.io/blog/runtime-performance/

Slide 33

Slide 33 text

@holly_cummins to the code! demo!

Slide 34

Slide 34 text

@holly_cummins #RedHat mvn quarkus:build -Pnative -DskipTests target/code-with-quarkus-1.0.0-SNAPSHOT-runner

Slide 35

Slide 35 text

do quarkus applications start faster than lightbulbs?

Slide 36

Slide 36 text

do quarkus applications start faster than lightbulbs? ridiculously, yes

Slide 37

Slide 37 text

ok but does startup time matter?

Slide 38

Slide 38 text

ok but does startup time matter? fast boot time means auto-scaling works better more resilience to load spikes

Slide 39

Slide 39 text

Quarkus + GraalVM 13 MB Quarkus + OpenJDK 74 MB Traditional Cloud-Native Stack 140 MB rest application https://quarkus.io/blog/runtime-performance/ does quarkus improve memory utilization?

Slide 40

Slide 40 text

#Quarkus @holly_cummins

Slide 41

Slide 41 text

#Quarkus @holly_cummins hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus?

Slide 42

Slide 42 text

#Quarkus @holly_cummins hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? uhh … are you supposed to shut down applications after using them?

Slide 43

Slide 43 text

#Quarkus @holly_cummins hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? hey, wanna see quarkus? uhh … are you supposed to shut down applications after using them? 120 instances (!)

Slide 44

Slide 44 text

in the cloud, memory footprint matters

Slide 45

Slide 45 text

in the cloud, memory footprint matters

Slide 46

Slide 46 text

do quarkus applications have higher throughput? https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 47

Slide 47 text

do quarkus applications have higher throughput? 48 concurrent connections https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 48

Slide 48 text

do quarkus applications have higher throughput? 48 concurrent connections quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 49

Slide 49 text

do quarkus applications have higher throughput? 48 concurrent connections traditional cloud native stack 3555 req/s quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 50

Slide 50 text

do quarkus applications have higher throughput? 48 concurrent connections traditional cloud native stack 3555 req/s quarkus on jvm 6389 req/s quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 51

Slide 51 text

@holly_cummins #RedHat https://medium.com/arconsis/spring-boot-vs-quarkus-part-2-jvm-runtime-performance-af45d0db116e

Slide 52

Slide 52 text

@holly_cummins #RedHat https://medium.com/arconsis/spring-boot-vs-quarkus-part-2-jvm-runtime-performance-af45d0db116e spring boot quarkus response time 1901 ms 294 ms throughput 523 req/s 3374 req/s

Slide 53

Slide 53 text

#Quarkus @holly_cummins users care (a lot) about response time

Slide 54

Slide 54 text

better startup better footprint better throughput wait, isn’t that something for nothing?

Slide 55

Slide 55 text

@holly_cummins #RedHat the two ways of improving performance •trade off one thing against another •eliminate waste

Slide 56

Slide 56 text

traditional cloud native stack 3555 req/s quarkus on jvm 6389 req/s quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper

Slide 57

Slide 57 text

traditional cloud native stack 3555 req/s quarkus on jvm 6389 req/s quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper a trade-off of throughput against footprint

Slide 58

Slide 58 text

traditional cloud native stack 3555 req/s quarkus on jvm 6389 req/s quarkus native 3212 req/s https://www.redhat.com/en/resources/mi-quarkus-lab-validation-idc-analyst-paper no trade-off, just better :) a trade-off of throughput against footprint

Slide 59

Slide 59 text

@holly_cummins #RedHat where the win comes from 1832

Slide 60

Slide 60 text

@holly_cummins #RedHat 2010 multiple applications share a single application server instance application re-deployed many times between server restarts application dependencies changed while it is running

Slide 61

Slide 61 text

@holly_cummins #RedHat application frameworks optimised for dynamism

Slide 62

Slide 62 text

@holly_cummins #RedHat application frameworks optimised for dynamism dynamism has a cost

Slide 63

Slide 63 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 64

Slide 64 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 65

Slide 65 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 66

Slide 66 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 67

Slide 67 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 68

Slide 68 text

@holly_cummins #RedHat cloud apps are immutable now

Slide 69

Slide 69 text

@holly_cummins #RedHat a highly dynamic runtime in a container is pointless

Slide 70

Slide 70 text

@holly_cummins #RedHat a highly dynamic runtime in a container is pointless loading classes that aren’t needed

Slide 71

Slide 71 text

@holly_cummins #RedHat a highly dynamic runtime in a container is pointless loading classes that aren’t needed expensive, slow, reflection

Slide 72

Slide 72 text

@holly_cummins #RedHat a highly dynamic runtime in a container is pointless loading classes that aren’t needed expensive, slow, reflection the same initialisation on every startup

Slide 73

Slide 73 text

@holly_cummins #RedHat how does a framework start? @ 
 @ > packaging 
 (maven, gradle…) build time runtime

Slide 74

Slide 74 text

@holly_cummins #RedHat @ 
 @ > load and parse config files, properties, yaml, xml, etc. Build Time Runtime how does a framework start?

Slide 75

Slide 75 text

@holly_cummins #RedHat @ 
 @ > • classpath scanning and annotation discovery • attempt to load class to enable/disable features Build Time Runtime how does a framework start?

Slide 76

Slide 76 text

@holly_cummins #RedHat @ 
 @ > build a metamodel of the world Build Time Runtime How does a framework start? how does a framework start?

Slide 77

Slide 77 text

@holly_cummins #RedHat @ 
 @ > start thread pools, I/O, etc. Build Time Runtime how does a framework start?

Slide 78

Slide 78 text

@holly_cummins #RedHat what if we initialize at build time?

Slide 79

Slide 79 text

@holly_cummins #RedHat @ 
 @ > build time what if we initialize at build time?

Slide 80

Slide 80 text

@holly_cummins #RedHat @ 
 @ > runtime build time what if we initialize at build time?

Slide 81

Slide 81 text

@holly_cummins #RedHat quarkus makes a “closed-world” assumption

Slide 82

Slide 82 text

@holly_cummins #RedHat the quarkus way enables native compilation native (graalvm) @ 
 @ > jvm build time

Slide 83

Slide 83 text

ok but is performance all there is?

Slide 84

Slide 84 text

ok but is performance all there is? developer joy

Slide 85

Slide 85 text

@holly_cummins #RedHat

Slide 86

Slide 86 text

doing more up-front enables better devex @ 
 @ > build time runtime

Slide 87

Slide 87 text

@ 
 @ > doing more up-front enables better devex @ 
 @ > build time runtime build time

Slide 88

Slide 88 text

@ 
 @ > doing more up-front enables better devex @ 
 @ > build time runtime runtime build time

Slide 89

Slide 89 text

to the code! @holly_cummins #RedHat

Slide 90

Slide 90 text

@holly_cummins #RedHat #GOTOams zero-config live coding

Slide 91

Slide 91 text

@holly_cummins #RedHat #GOTOams tests are run on every code change “reverse code coverage” means only relevant tests run continuous testing

Slide 92

Slide 92 text

@holly_cummins #RedHat #GOTOams developer UI

Slide 93

Slide 93 text

@holly_cummins #RedHat #GOTOams zero-config testcontainers

Slide 94

Slide 94 text

@holly_cummins #RedHat testcontainers integration … without quarkus @TestConfiguration(proxyBeanMethods = false) public class ContainersConfig { @Bean @ServiceConnection public PostgreSQLContainer> postgres() { return new PostgreSQLContainer<>(DockerImageName.parse("postgres:14")); } } public class TestApplication { public static void main(String[] args) { SpringApplication .from(MySpringDataApplication::main) .with(ContainersConfig.class) .run(args); } } @Import(ContainersConfig.class)

Slide 95

Slide 95 text

@holly_cummins #RedHat testcontainers integration … without quarkus @TestConfiguration(proxyBeanMethods = false) public class ContainersConfig { @Bean @ServiceConnection public PostgreSQLContainer> postgres() { return new PostgreSQLContainer<>(DockerImageName.parse("postgres:14")); } } public class TestApplication { public static void main(String[] args) { SpringApplication .from(MySpringDataApplication::main) .with(ContainersConfig.class) .run(args); } }

Slide 96

Slide 96 text

@holly_cummins #RedHat testcontainers integration … without quarkus

Slide 97

Slide 97 text

@holly_cummins #RedHat zero-config testcontainers integration the only thing you need to do to make testcontainers work is not configure anything # configure your datasource quarkus.datasource.db-kind = postgresql quarkus.datasource.username = sarah quarkus.datasource.password = connor quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase # drop and create the database at startup quarkus.hibernate-orm.database.generation = drop-and-create

Slide 98

Slide 98 text

@holly_cummins #RedHat zero-config testcontainers integration the only thing you need to do to make testcontainers work is not configure anything # drop and create the database at startup quarkus.hibernate-orm.database.generation = drop-and-create

Slide 99

Slide 99 text

@holly_cummins #RedHat zero-config testcontainers integration the only thing you need to do to make testcontainers work is not configure anything

Slide 100

Slide 100 text

@holly_cummins #RedHat zero-config testcontainers integration the only thing you need to do to make testcontainers work is not configure anything quarkus also auto-invokes flyway and liquibase

Slide 101

Slide 101 text

@holly_cummins #RedHat zero-config testcontainers integration realistically, use profiles so things work in production :) # configure your datasource %prod.quarkus.datasource.db-kind = postgresql %prod.quarkus.datasource.username = sarah %prod.quarkus.datasource.password = connor %prod.quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase # on real databases, defaults to ‘none’, but let’s validate %prod.quarkus.hibernate-orm.database.generation = validate

Slide 102

Slide 102 text

@holly_cummins #RedHat #GOTOams • databases • redis • keycloak • kafka • elasticsearch • kubernetes • … or add your own auto-provision services “dev services” using testcontainers under the hood

Slide 103

Slide 103 text

@holly_cummins #RedHat #GOTOams more opinions, less boilerplate

Slide 104

Slide 104 text

@holly_cummins #RedHat #GOTOams package org.acme; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringDemo { public static void main(String[] args) { SpringApplication.run(SpringDemo.class, args); } } example: declaring an application

Slide 105

Slide 105 text

@holly_cummins #RedHat #GOTOams example: declaring an application

Slide 106

Slide 106 text

@holly_cummins #RedHat #GOTOams @ApplicationScoped public class GreetingRepository { public Entity findByName(int name) { return find("name", name).firstResult(); } void persist(Entity entity) {} void delete(Entity entity) {} Entity findById(Id id) {} List list(String query, Sort sort, Object... params) { return null; } Stream stream(String query, Object... params) { return null; } long count() { return 0; } long count(String query, Object... params) { return 0; } } example: panache + hibernate

Slide 107

Slide 107 text

@holly_cummins #RedHat #GOTOams example: panache + hibernate @ApplicationScoped public class GreetingRepository implements PanacheRepository { public Entity findByName(int name) { return find("name", name).firstResult(); } }

Slide 108

Slide 108 text

@holly_cummins #RedHat #GOTOams DAO example: panache + hibernate @ApplicationScoped public class GreetingRepository implements PanacheRepository { public Entity findByName(int name) { return find("name", name).firstResult(); } } repository pattern

Slide 109

Slide 109 text

@holly_cummins #RedHat #GOTOams example: panache + hibernate

Slide 110

Slide 110 text

@holly_cummins #RedHat #GOTOams example: panache + hibernate active record pattern @Entity public class Greeting extends PanacheEntity { public String name; public LocalDate issued; @Version public int version; public static List getTodaysGreetings() { return list("date", LocalDate.now()); } }

Slide 111

Slide 111 text

@holly_cummins #RedHat #GOTOams io.quarkus quarkus-spring-web io.quarkus quarkus-spring-data-jpa ok but we use spring option 1: compatibility libraries option 2: migration tooling • migration toolkit for applications (mta) • windup • open rewrite

Slide 112

Slide 112 text

@holly_cummins #RedHat “After a week of development with Quarkus, I was able to regain the same level of productivity as when I was developing with Spring Boot.” – Fawaz Paraïso, Decathlon

Slide 113

Slide 113 text

@holly_cummins #RedHat open source community of contributors

Slide 114

Slide 114 text

@holly_cummins #RedHat Emiliia Nesterovych 
 Emmanuel Bernard 
 Emre Kaplan 
 Enrique González Martínez 
 Enrique Mingorance Cano 
 Eoin Gallinagh 
 Eric Deandrea 
 Eric Wittmann 
 Erik Åsén 
 Erik Mattheis 
 Erin Schnabel 
 Eugene Berman 
 Evan Shortiss 
 Fabricio Gregorio 
 faculbsz 
 Falko Modler 
 Fedor Dudinskiy 
 Felipe Carvalho dos Anjos Formentin 
 Felipe Henrique Gross Windmoller 
 Fernando Comunello 
 Fernando Henrique 
 fhavel 
 Fikru Mengesha 
 Filippe Spolti 
 Florian Beutel 
 Florian Bütler 
 Florian Heubeck 
 Florin Botis 
 Foivos Zakkak 
 Foobartender 
 Fouad Almalki 
 Francesco Nigro 
 Francisco Javier Tirado Sarti 
 Francois Steyn 
 Frank Eichfelder 
 franz1981 
 freakse-sa 
 Fred Bricon 
 Frédérc Blanc 
 Freeman Fang 
 Fu Cheng 
 Gabriele Cardosi 
 Galder Zamarreño 
 galiacheng 
 Gavin King 
 Gavin Ray 
 Geert Schuring 
 Geoffrey De Smet 
 Geoffrey GREBERT 
 Georg Leber 
 George Gastaldi 
 manofthepeace 
 Manyanda Chitimbo 
 Marat Gubaidullin 
 Marc Nuri 
 Marc Schlegel 
 Marc Wrobel 
 Marcel Hanser 
 Marcel Lohmann 
 Marcell Cruz 
 Marcelo Pereira 
 Marcin Czeczko 
 Marcin Kłopotek 
 Marco Bungart 
 Marco Schaub 
 Marco Yeung 
 Marco Zanghì 
 Marcus Paulo 
 Marek Goldmann 
 Marek Skacelik 
 Marián Macik 
 Mario Fusco 
 MarioHNogueira 
 Mark Lambert 
 Mark Little 
 Mark McLaughlin 
 Mark Sailes 
 marko-bekhta 
 Markus Heberling 
 Markus Himmel 
 Markus Schwer 
 Martin C. Richards 
 Martin Grammelspacher 
 Martin Kouba 
 Martin Muzikar 
 Martin Panzer 
 Martin Weiler 
 martin-kofoed-jyskebank-dk 
 MartinWitt 
 Marvin B. Lillehaug 
 masini 
 Matej Novotny 
 Matej Vasek 
 Matheus Cruz 
 Mathias Holzer 
 Matteo Mortari 
 Matthias Andreas Benkard 
 Matthias Cullmann 
 mauroal 
 Max Andersen 
 Max Gabrielsson 
 Max Rydahl Andersen 
 Victor Hugo de Oliveira Molinar 
 Vincent Sevel 
 Vincent van Dam 
 Vinícius Ferraz Campos Florentino 
 Viswa Teja Nariboina 
 Vladimir Konkov 
 Vojtech Juranek 
 Vratislav Hais 
 w.glanzer 
 Walter Medvedeo 
 Wayne Ellis 
 Werner Glanzer 
 Willem Jan Glerum 
 William Antônio Siqueira 
 Wim Goeman 
 Wippermueller, Frank 
 wojciech.stryjewski 
 Xavier 
 Xieshen 
 xstefank 
 Y. Luis 
 Yann-Thomas LE MOIGNE 
 Yannick Reifschneider 
 YassinHajaj 
 Yelzhas Suleimenov 
 yesunch9 
 Yoann Rodière 
 Yoshikazu Nojima 
 Youngmin Koo 
 Yubao Liu 
 yugoccp 
 Yukihiro Okada 
 Zaheed Beita 
 zanmagerl 
 zedbeit 
 Zheng Feng 
 Žiga Deisinger 
 Zineb Bendhiba 
 zohar 
 Zoran Regvart 
 Шумов Игорь Юрьевич 
 出⻔三不惹 open source community of contributors

Slide 115

Slide 115 text

@holly_cummins #RedHat one last thing …

Slide 116

Slide 116 text

@holly_cummins #RedHat does being faster and lighter mean quarkus is greener?

Slide 117

Slide 117 text

digression: how do you measure carbon?

Slide 118

Slide 118 text

@holly_cummins #RedHat step 1: measure power usage

Slide 119

Slide 119 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement

Slide 120

Slide 120 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete

Slide 121

Slide 121 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall

Slide 122

Slide 122 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall and equipment

Slide 123

Slide 123 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall and equipment RAPL

Slide 124

Slide 124 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall and equipment RAPL programmatically accessible

Slide 125

Slide 125 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall and equipment RAPL programmatically accessible misses some components

Slide 126

Slide 126 text

@holly_cummins #RedHat step 1: measure power usage wall power measurement more complete needs access to the wall and equipment data costs carbon RAPL programmatically accessible misses some components

Slide 127

Slide 127 text

@holly_cummins #RedHat

Slide 128

Slide 128 text

@holly_cummins #RedHat

Slide 129

Slide 129 text

@holly_cummins #RedHat

Slide 130

Slide 130 text

@holly_cummins #RedHat load

Slide 131

Slide 131 text

@holly_cummins #RedHat Source: Teads EC2 instances carbon dataset

Slide 132

Slide 132 text

@holly_cummins #RedHat density Source: Clement Escoffier experiment 1: cloud Setup: • 800 requests/second, over 20 days • SLA > 99% • AWS instances Assumptions: • Costs are for us-east-1 data centre

Slide 133

Slide 133 text

@holly_cummins #RedHat Setup: • 800 requests/second, over 20 days • SLA > 99% Assumptions: Source: Clement Escoffier x Teads cloud carbon impact of framework choice interpolated carbon metrics

Slide 134

Slide 134 text

@holly_cummins #RedHat Setup: • 800 requests/second, over 20 days • SLA > 99% Assumptions: Source: Clement Escoffier x Teads cloud carbon impact of framework choice the carbon is lower because the cost is lower interpolated carbon metrics

Slide 135

Slide 135 text

@holly_cummins #RedHat Setup: • REST + CRUD • large heap • RAPL energy measurement • multiple instances to support high load
 Assumptions: • US energy mix Source: John O’Hara experiment 2: RAPL measurements

Slide 136

Slide 136 text

@holly_cummins #RedHat Setup: • REST + CRUD • large heap • RAPL energy measurement • multiple instances to support high load
 Assumptions: • US energy mix Source: John O’Hara experiment 2: RAPL measurements quarkus on JVM has the lowest carbon … because it has the highest throughput

Slide 137

Slide 137 text

• quarkus cuts carbon by ~2-3x* • native consumes more carbon than JVM carbon measurements: conclusions

Slide 138

Slide 138 text

@holly_cummins #RedHat ok but is it being used in production?

Slide 139

Slide 139 text

@holly_cummins #RedHat “We can run 3 times denser deployments without sacrificing availability and response times of services. Quarkus live coding is a really good thing: Making changes and reloading pages instantaneously is a great feature.” – Fawaz Thorsten Pohl, Lufthansa AVIATAR

Slide 140

Slide 140 text

@holly_cummins #RedHat 2019: Moved digital experience to Quarkus (from Spring Boot) • Startup times 40s ➡ 12s • RAM 800 MB ➡ 360 MB • Developer productivity ⬆ 30-40% – Christos Sotiriou, Vodafone Greece

Slide 141

Slide 141 text

@holly_cummins #RedHat tl;dpa (too long didn’t pay attention) deployment density lower cloud bill frictionless development experience Medium Nano auto-provision services zero-config live coding continuous testing developer UI greener

Slide 142

Slide 142 text

slides