Cumu Quarkus combina a prugrammazione imperativa è reattiva

Quist'annu avemu pensatu à sviluppà seriamente temi di container, Cloud-Native Java и Kubernetes. Una continuazione logica di questi temi serà una storia nantu à u quadru Quarkus, digià cunsideratu nantu à Habré. L'articulu d'oghje hè menu nantu à u disignu di "Subatomic superfast Java" è più nantu à a prumessa chì Quarkus porta à Enterprise.

Cumu Quarkus combina a prugrammazione imperativa è reattiva

Java è JVM sò sempre assai populari, ma quandu travaglianu cù tecnulugii senza servitore è microservizi nativi in ​​nuvola, Java è altre lingue JVM sò sempre più usate perchè occupanu troppu spaziu di memoria è sò troppu lenti per carica, facenduli. pocu adattatu per l'usu cù cuntenituri di corta vita. Per furtuna, sta situazione hè avà cuminciatu à cambià grazia à Quarkus.

Superfast subatomic Java hà righjuntu un novu livellu!

42 versioni, 8 mesi di travagliu cumunitariu è 177 sviluppatori maravigghiusi - u risultatu di tuttu hè stata a liberazione in nuvembre 2019 Quarkus 1.0, una liberazione chì marca una tappa impurtante in u sviluppu di u prugettu è offre assai funzioni è capacità interessanti (pudete leghje più nantu à elli in annunziu).

Oghje vi mustraremu cumu Quarkus combina mudelli di prugrammazione imperativi è reattivi in ​​un unicu core reattivu. Cuminceremu cù una breve storia è poi andemu in i dettagli nantu à ciò chì hè u dualisimu core reattivu di Quarkus è cumu Java-Developers pò prufittà di sti benefici.

Microservizi, architetture guidate da eventi и servitore-funzioni - tuttu questu hè, cumu dicenu, in crescita oghje. Ricertamenti, a creazione di architetture centrate in nuvola hè diventata assai più faciule è più accessibile, ma i prublemi restanu - in particulare per i sviluppatori Java. Per esempiu, in u casu di e funzioni senza servitore è i microservizi, ci hè una necessità urgente di riduce u tempu di startup, riduce u cunsumu di memoria, è ancu rende u so sviluppu più còmuda è piacevule. Java hà fattu parechje migliure in l'ultimi anni, cum'è una funziunalità ergonomica mejorata per i cuntenituri è cusì. Tuttavia, ottene Java per travaglià bè in un containeru hè sempre sfida. Allora cuminciaremu à guardà alcune di e cumplessità inerenti di Java, chì sò particularmente aguti quandu si sviluppanu applicazioni Java orientate à u containeru.

Prima, fighjemu a storia.

Cumu Quarkus combina a prugrammazione imperativa è reattiva

Flussi è cuntenituri

Partendu da a versione 8u131, Java hà cuminciatu à supportà più o menu i cuntenituri per via di e migliorie in a funziunalità ergonomica. In particulare, a JVM sapi avà quanti core di processore hè in esecuzione è pò cunfigurà pools di thread-tipicamente fork/join pools-in cunsiquenza. Di sicuru, questu hè grande, ma dicemu chì avemu una applicazione web tradiziunale chì usa servlets HTTP è corre in Tomcat, Jetty, etc. In u risultatu, sta applicazione darà à ogni dumanda un filu separatu è permettenu di bluccà stu filu mentre aspetta l'operazioni I / O, per esempiu, quandu accede à a basa di dati, à i schedari o à altri servizii. Questu hè, a dimensione di una tale applicazione ùn dipende micca da u numeru di nuclei dispunibili, ma da u numeru di richieste simultanee. Inoltre, questu significa chì e quote o limiti in Kubernetes nantu à u numeru di nuclei ùn saranu micca assai aiutu quì, è a materia finirà in throttling.

Esaurimentu di memoria

I fili sò memoria. E limitazioni di memoria intra-container ùn sò micca una panacea. Basta à cumincià à aumentà u numeru di applicazioni è fili, è prima o dopu vi scontru un aumentu criticu di a frequenza di commutazione è, in u risultatu, a degradazione di u rendiment. Inoltre, se a vostra applicazione utilizeghja quadri tradiziunali di microserviziu, o si cunnetta à una basa di dati, o usa caching, o altrimenti usa memoria, ovviamente avete bisognu di un strumentu chì vi permette di circà l'internu di a JVM è vede cumu gestisce a memoria senza tumbà. JVM stessu (per esempiu, XX: + UseCGroupMemoryLimitForHeap). E ancu s'è, dapoi Java 9, a JVM hà amparatu à accettà cgroups è adattà in cunseguenza, a riservazione è a gestione di a memoria resta una materia abbastanza cumplessa.

Quote è limiti

Java 11 hà introduttu supportu per quote di CPU (cum'è PreferContainerQuotaForCPUCount). Kubernetes offre ancu supportu per i limiti è i quote. Iè, tuttu questu hè sensu, ma se l'applicazione supera di novu a quota assignata, finiscemu di novu cù a dimensione - cum'è u casu cù l'applicazioni tradiziunali Java - determinata da u numeru di core è cù l'assignazione di un filu separatu per ogni. dumanda, allora ci hè pocu sensu in tuttu questu.
Inoltre, se utilizate quote è limiti o e funzioni di scala di a piattaforma sottu à Kubernetes, u prublema ùn si risolve micca. Semu spende più risorse per risolve u prublema originale o finisci per spende più. È s'ellu hè un sistema di alta carica in un nuvulu publicu publicu, quasi certamente finiscinu cù più risorse di ciò chì avemu veramente bisognu.

È chì fà cù tuttu questu?

Per esse simplicemente, aduprate biblioteche I/O asincrone è non-bloccanti è quadri cum'è Netty, Vert.x o Akka. Sò assai megliu adattati per travaglià in cuntenituri per via di a so natura reattiva. Grazie à l'I / O senza bloccu, u stessu filu pò processà parechje dumande simultanee. Mentre una dumanda aspetta i risultati I/O, u processu di filu hè liberatu è ripigliatu da una altra dumanda. È quandu i risultati I / O finalmente arrivanu, u prucessu di a prima dumanda cuntinua. Per u prucessu interleaved di e dumande in u stessu filu, pudete riduce u numeru tutale di fili è riduce u cunsumu di risorse per processà e dumande.

Cù I/O non-blocking, u numeru di core diventa un paràmetru chjave perchè determina u numeru di fili I/O chì ponu esse eseguiti in parallelu. Quandu s'utilice bè, questu permette di distribuisce in modu efficace a carica trà i core è di gestisce carichi di travagliu più altu cù menu risorse.

Cumu, hè tuttu?

Innò, ci hè qualcosa d'altru. A prugrammazione reattiva aiuta à fà un megliu usu di e risorse, ma vene ancu à un prezzu. In particulare, u codice duverà esse riscritto secondu i principii di non-blocking è evite micca bluccà i fili I / O. È questu hè un mudellu completamente diversu di sviluppu è esecutivu. E ancu s'ellu ci sò assai biblioteche utili quì, hè sempre un cambiamentu radicali in u modu di pensamentu abituale.

Prima, avete bisognu di amparà à scrive u codice chì corre in modu asincronu. Una volta chì avete principiatu à utilizà l'I / O senza bloccu, avete bisognu di specificà esplicitamente ciò chì deve succede quandu una risposta à una dumanda hè ricevutu. Simply bluccatu è aspittendu ùn funziona più. Invece, pudete passà callbacks, aduprà prugrammazione reattiva o continuazione. Ma questu ùn hè micca tuttu: per utilizà l'I / O senza bloccu, avete bisognu di i servitori è di i clienti chì ùn sò micca bloccanti, preferibile in ogni locu. In u casu di HTTP, tuttu hè simplice, ma ci sò ancu basa di dati, sistemi di schedari, è assai più.

E ancu s'è a reattività tutale end-to-end maximizeghja l'efficienza, un tali cambiamentu pò esse difficiule di stomacu in pratica. Dunque, a capacità di cumminà codice reattivu è imperativu diventa un prerequisite per:

  1. Aduprate in modu efficace e risorse in e zone più cariche di u sistema di software;
  2. Aduprate codice di stile più simplice in e so parti restanti.

Presentazione di Quarkus

In realtà, questu hè l'essenza di Quarkus - per unisce mudelli reattivi è imperativi in ​​un unicu ambiente di runtime.

Quarkus hè basatu annantu à Vert.x è Netty, cù una gamma di frameworks reattivi è estensioni in cima per aiutà u sviluppatore. Quarkus hè pensatu per custruisce micca solu microservizi HTTP, ma ancu architetture guidate da eventi. A causa di a so natura reattiva, travaglia assai efficace cù sistemi di messageria (Apache Kafka, AMQP, etc.).

U truccu hè cumu utilizà u listessu mutore reattivu per u codice imperativu è reattivu.

Cumu Quarkus combina a prugrammazione imperativa è reattiva

Quarkus faci questu brillantemente. A scelta trà imperativu è reattivu hè ovvia - utilizate un kernel reattivu per i dui. Ciò chì aiuta veramente hè un codice veloce, senza bloccu, chì gestisce quasi tuttu ciò chì passa per u filu di l'avvenimentu, aka filu IO. Ma s'è vo avete REST classicu o appiicazioni di u cliente, Quarkus hà un mudellu di prugrammazione imperativu prontu. Per esempiu, u supportu HTTP in Quarkus hè basatu annantu à l'usu di un mutore non-blocking è reattivu (Eclipse Vert.x è Netty). Tutte e richieste HTTP ricevute da a vostra applicazione sò prima passate per un ciclu di l'avvenimentu (IO Thread) è dopu mandate à a parte di u codice chì gestisce e dumande. Sicondu u destinazione, u codice di gestione di a dumanda pò esse chjamatu in un filu separatu (u filu di u travagliu chjamatu, utilizatu in u casu di servlets è Jax-RS) o aduprà u filu I / O fonte (via reattiva).

Cumu Quarkus combina a prugrammazione imperativa è reattiva

I connettori di u sistema di messageria utilizanu clienti chì ùn sò micca bluccati in esecuzione nantu à u mutore Vert.x. Per quessa, pudete effittivamenti mandà, riceve è processà i missaghji da i sistemi middleware di messageria.

In u situ Quarkus.io Eccu alcuni boni tutoriali per aiutà à inizià cù Quarkus:

Avemu ancu creatu tutoriali pratichi in linea per insegnà diversi aspetti di a prugrammazione reattiva in solu un navigatore, senza IDE necessariu, è senza computer. Pudete truvà queste lezioni ccà.

Risorse utili

10 video lezioni nantu à Quarkus per familiarizà cù u tema

Comu dicenu nantu à u situ web Quarkus.io, quarkus - questu KubernetesStack Java orientatu, adattatu per GraalVM è OpenJDK HotSpot è assemblatu da e migliori librerie è standard Java.

Per aiutà à capisce u tema, avemu sceltu 10 tutoriali video chì copre parechji aspetti di Quarkus è esempi di u so usu:

1. Introducing Quarkus: U Framework Java di Next Generation per Kubernetes

Di Thomas Qvarnstrom è Jason Greene
L'obiettivu di u prughjettu Quarkus hè di creà una piattaforma Java per Kubernetes è ambienti serverless, è di cumminà mudelli di prugrammazione reattivi è imperativi in ​​un unicu ambiente di runtime in modu chì i sviluppatori ponu varià in modu flessibile u so approcciu quandu travaglianu cù una larga gamma di architetture di applicazioni distribuite. Scopri di più in a conferenza introduttiva sottu.

2. Quarkus: Superfast Subatomic Java

Di: Burr Sutter
Stu video tutoriale da DevNation Live mostra cumu utilizà Quarkus per ottimisà l'applicazioni Java di l'impresa, l'API, i microservizii è e funzioni senza servitore in un ambiente Kubernetes / OpenShift, facenduli assai più chjuchi, più veloci è più scalabili.

3. Quarkus è GraalVM: accelerà Hibernate à super velocità è riducendu à dimensioni subatomiche

Auteur : Sanne Grinovero
Da a presentazione, amparate cumu Quarkus hè ghjuntu, cumu funziona, è cumu permette di fà biblioteche cumplessi, cum'è Hibernate ORM, cumpatibili cù l'imaghjini GraalVM nativu.

4. Amparate à sviluppà applicazioni serverless

Autore: Martin Luther
U video sottu mostra cumu creà una applicazione Java simplice cù Quarkus è implementà cum'è una applicazione serverless in Knative.

5. Quarkus: Divertitevi à codificà

Autore: Edson Yanaga
Una guida video per creà u vostru primu prughjettu Quarkus, chì vi permette di capisce perchè Quarkus vince u core di i sviluppatori.

6. Java è cuntenituri - quale sarà u so avvene inseme

Postatu da Mark Little
Questa presentazione presenta a storia di Java è spiega perchè Quarkus hè u futuru di Java.

7. Quarkus: Superfast Subatomic Java

Auteur : Dimitris Andreadis
Una panoramica di i vantaghji di Quarkus chì anu ricivutu ricunniscenza da i sviluppatori: simplicità, velocità ultra-alta, e migliori librerie è standard.

8. Quarkus è sistemi di razzi subatomici

Autore: Clément Escoffier
Attraversu l'integrazione cù GraalVM, Quarkus furnisce una sperienza di sviluppu ultra-veloce è un ambiente di runtime subatomicu. L'autore parla di u latu reattivu di Quarkus è cumu aduprà per custruisce applicazioni reattive è streaming.

9. Quarkus è u sviluppu rapidu di l'applicazioni in Eclipse MicroProfile

Autore: John Clingan
Cumminendu Eclipse MicroProfile è Quarkus, i sviluppatori ponu creà applicazioni MicroProfile containerizzate cumplete chì lancianu in decine di millisecondi. U video entra in dettagliu nantu à cumu codificà una applicazione MicroProfile cuntainerizzata per a implementazione nantu à a piattaforma Kubernetes.

10. Java, versione "Turbo".

Autore: Marcus Biel
L'autore mostra cumu utilizà Quarkus per creà cuntenituri Java super-picculi è super-veloci chì permettenu reali innovazioni, in particulare in ambienti senza servitori.



Source: www.habr.com

Add a comment