Quarkus çawa bernamesaziya mecbûrî û reaktîf bi hev dike

Vê salê em plan dikin ku bi ciddî mijarên konteynerê pêş bixin, Cloud-Native Java и Kubernetes. Berdewamek mentiqî ya van mijaran dê çîrokek li ser çarçoweya Quarkus be, jixwe nirxandin li ser Habré. Gotara îro hindiktir li ser sêwirana "Javaya superlez a subatomîkî" ye û bêtir li ser soza ku Quarkus dide Enterprise.

Quarkus çawa bernamesaziya mecbûrî û reaktîf bi hev dike

Java û JVM hîn jî zehf populer in, lê dema ku bi teknolojiyên bê server û mîkroxizmetên xwemalî yên ewr re dixebitin, Java û zimanên din ên JVM kêm û kêm têne bikar anîn ji ber ku ew pir cîhê bîranînê digirin û ji bo barkirinê pir hêdî ne, û wan dikin. ji bo karanîna bi konteynerên demkurt re nebaş e. Xwezî, ev rewş niha bi saya Quarkus dest bi guhertinê dike.

Java-ya subatomî ya Superfast gihîştiye astek nû!

42 serbestberdan, 8 meh xebata civatê û 177 pêşdebirên ecêb - encama her tiştî di Mijdara 2019-an de derket. Quarkus 1.0, serbestberdanek ku di pêşkeftina projeyê de qonaxek girîng destnîşan dike û gelek taybetmendî û kapasîteyên xweş pêşkêşî dike (hûn dikarin li ser wan bêtir bixwînin daxûyanî).

Îro em ê nîşanî we bidin ka Quarkus çawa modelên bernamesaziya mecbûrî û reaktîf di nav bingehek reaktîf de yek dike. Em ê bi dîrokek kurt dest pê bikin û dûv re bi hûrgulî biçin ser dualîzma bingehîn a reaktîf a Quarkus çi ye û çawa ye Java-Pêşdebir dikarin ji van feydeyan sûd werbigirin.

Microservices, mîmariyên bûyeran и serverless-fonksiyonên - ev hemî, wekî ku ew dibêjin, îro zêde dibe. Di van demên dawî de, afirandina mîmariyên ewr-navendî pir hêsantir û gihîştîtir bûye, lê pirsgirêk dimînin - nemaze ji bo pêşdebirên Java. Mînakî, di warê fonksiyonên bê server û mîkroxizmetan de, pêdivî ye ku bilez dema destpêkirinê kêm bike, xerckirina bîranînê kêm bike, û hîn jî pêşveçûna wan hêsantir û xweştir bike. Java di van salên dawî de gelek çêtirkirin çêkiriye, wek baştirkirina fonksiyonên ergonomîk ên ji bo konteyneran û hwd. Lêbelê, girtina Java ku di konteynerê de bi rêkûpêk bixebite hîn jî dijwar e. Ji ber vê yekê em ê dest bi nihêrîna hin tevliheviyên xwerû yên Java-yê bikin, yên ku bi taybetî di dema pêşdebirina serîlêdanên Java-ya konteyner-oriented de tûj in.

Pêşî, em li dîrokê binêrin.

Quarkus çawa bernamesaziya mecbûrî û reaktîf bi hev dike

Streams û konteynir

Bi guhertoya 8u131-ê dest pê kir, Java ji ber çêtirbûna fonksiyonên ergonomîk kêm-zêde destek da konteyneran. Bi taybetî, JVM naha dizane ku ew li ser çend navikên pêvajoyê dixebitin û dikare li gorî vê yekê hewzên tîrê-bi gelemperî hewzên fork / tevlê bibin- mîheng bike. Bê guman, ev pir xweş e, lê em bibêjin ku me serîlêdanek webê ya kevneşopî heye ku servîsên HTTP bikar tîne û di Tomcat, Jetty, hwd de dimeşîne. Wekî encamek, ev serîlêdan dê her daxwazek mijarek cihêreng bide û dihêle ku ew dema ku li benda karûbarên I/O ye, ji bo nimûne, dema ku xwe bigihîne databas, pelan an karûbarên din, vê mijarê asteng bike. Ango, mezinahiya serîlêdanek wusa ne bi hejmara navikên berdest, lê bi hejmara daxwazên hevdem ve girêdayî ye. Wekî din, ev tê vê wateyê ku kota an sînorên di Kubernetes de li ser hejmara navokan dê li vir pir arîkar nebin, û mijar dê di dawiyê de bi qefilandinê biqede.

Memory westandina

Mijar bîranîn in. Û tixûbên bîranîna hundur-konteyner bi tu awayî ne dermanek in. Tenê dest bi zêdekirina hejmara serîlêdan û mijaran bikin, û zû an dereng hûn ê bi zêdebûnek krîtîk a frekansa veguheztinê re rû bi rû bimînin û, wekî encam, bi xirabûna performansê re. Di heman demê de, heke serîlêdana we çarçoveyên mîkroxizmeta kevneşopî bikar tîne, an bi databasek ve girêdide, an caching bikar tîne, an wekî din bîranîn bikar tîne, bê guman hûn hewceyê amûrek e ku destûrê dide we ku hûn li hundurê JVM-ê binihêrin û bibînin ka ew çawa bîranînê bêyî kuştina wê bi rê ve dibe. JVM bixwe (mînak, XX: + UseCGroupMemoryLimitForHeap). Û her çend, ji Java 9-ê vir ve, JVM fêr bûye ku cgroupan qebûl bike û li gorî xwe biguncîne, parastin û birêvebirina bîranînê mijarek pir tevlihev dimîne.

Kota û sînorên

Java 11 piştgirî ji bo kotayên CPU (wek PreferContainerQuotaForCPUCount) destnîşan kir. Kubernetes ji bo sînor û kotayan jî piştgirî pêşkêşî dike. Erê, ev hemî watedar e, lê heke serîlêdan dîsa ji kotaya veqetandî derbas bibe, em dîsa bi qebareyê diqedin - wekî ku di serîlêdanên Java-ya kevneşopî de ye - ji hêla hejmara navokan ve û bi veqetandina mijarek veqetandî ji bo her yekê. daxwaz, wê gavê di van hemîyan de hindik e.
Wekî din, heke hûn kota û sînoran an fonksiyonên pîvandinê yên platforma binavê Kubernetes bikar bînin, pirsgirêk jî bixwe çareser nabe. Em bi tenê ji bo çareserkirina pirsgirêka orîjînal bêtir çavkaniyan xerc dikin an jî zêde xerc dikin. Û heke ew di nav ewrek gelemperî de pergalek bargiraniyek bilind be, em hema bêje bê guman ji ya ku em bi rastî hewce ne bêtir çavkaniyan bikar tînin.

Û bi van hemûyan re çi bikin?

Ji bo ku bi hêsanî were gotin, pirtûkxane û çarçoveyên mîna Netty-ê yên asynkron û ne-asteng bikar bînin, Vert.x an Akka. Ew ji ber xwezaya xweya reaktîf ji bo xebatê di konteyneran de pir çêtir in. Bi xêra I/O-ya ne-astengkirî, heman mijar dikare gelek daxwazên hevdemî pêvajoyê bike. Dema ku daxwazek li benda encamên I/O ye, pêvajoya pêvekirina wê tê berdan û ji hêla daxwazek din ve tê girtin. Û gava ku encamên I/O di dawiyê de digihîjin, pêvajokirina daxwaza yekem berdewam dike. Bi pêvajoya navhevkirî ya daxwaznameyên di hundurê heman mijarê de, hûn dikarin jimara giştî ya mijaran kêm bikin û xerckirina çavkaniyê ji bo daxwazên pêvajoyê kêm bikin.

Bi I/O-ya ne-astengkirî re, hejmara navokan dibe pîvanek sereke ji ber ku ew hejmara têlên I/O yên ku dikarin paralel werin darve kirin diyar dike. Dema ku rast tê bikar anîn, ev dihêle hûn bi bandor barkirinê di navbera naverokan de belav bikin û bi çavkaniyên hindiktir barkêşên xebatê yên bilindtir bikin.

Çawa, ev hemû?

Na, tiştek din heye. Bernamekirina reaktîf dibe alîkar ku çavkaniyan çêtir bikar bînin, lê di heman demê de bihayek jî tê. Bi taybetî, kod dê li gorî prensîbên ne-astengkirinê ji nû ve were nivîsandin û ji astengkirina mijarên I/O dûr bikevin. Û ev modelek bi tevahî cûda ya pêşveçûn û darvekirinê ye. Û her çend li vir gelek pirtûkxaneyên kêrhatî hene, ew hîn jî di awayê ramana gelemperî de guhertinek radîkal e.

Pêşîn, hûn hewce ne ku fêr bibin ka meriv çawa kodek ku asynchronously dimeşîne binivîse. Gava ku hûn dest bi karanîna I/O-ya ne-astengker dikin, hûn hewce ne ku bi eşkere diyar bikin ku gava bersivek ji daxwazek re were wergirtin divê çi bibe. Tenê astengkirin û li bendê dê êdî nexebite. Di şûna wê de, hûn dikarin banga paşde derbas bikin, bernameya reaktîf an berdewamkirinê bikar bînin. Lê ew ne hemî ye: ji bo ku hûn I/O-ya ne-asteng bikar bînin, hûn hem pêşkêşkerên ne-astengker û hem jî xerîdar hewce ne, bi tercîhî li her derê. Di doza HTTP de, her tişt hêsan e, lê databas, pergalên pelan, û hêj bêtir jî hene.

Û her çend reaktîvîteya tevahî ya dawî-bi-dawî karîgeriyê zêde dike jî, veguheztinek wusa di pratîkê de dijwar be. Ji ber vê yekê, şiyana berhevkirina koda reaktîf û mecbûrî dibe şertek ji bo ku:

  1. Di deverên herî barkirî yên pergala nermalavê de çavkaniyan bi bandor bikar bînin;
  2. Di beşên wê yên mayî de koda şêwazê hêsantir bikar bînin.

Nasandina Quarkus

Bi rastî, ev cewhera Quarkus-ê ye - ku modelên reaktîf û mecbûrî di nav jîngehek dema xebitandinê de bi hev re bikin.

Quarkus li ser Vert.x û Netty-yê ye, digel rêzek çarçoveyek reaktîf û dirêjkirina li jorê ku alîkariya pêşdebir bike. Quarkus ji bo avakirina ne tenê mîkroxizmetên HTTP-ê, lê di heman demê de mîmariyên bi bûyer-rêveber jî hatî çêkirin. Ji ber xwezaya xweya reaktîf, ew bi pergalên peyamberdanê (Apache Kafka, AMQP, hwd.) pir bi bandor dixebite.

Hişk ev e ku meriv çawa heman motora reaktîf hem ji bo koda mecbûrî û hem jî ji bo reaktîf bikar tîne.

Quarkus çawa bernamesaziya mecbûrî û reaktîf bi hev dike

Quarkus vê yekê bi awakî berbiçav dike. Hilbijartina di navbera imperative û reaktîf de eşkere ye - ji bo herduyan jî kernelek reaktîf bikar bînin. Tiştê ku ew bi rastî jê re dibe alîkar kodek bilez, ne-asteng e ku hema hema her tiştê ku di nav kêşeya bûyer-loopê re derbas dibe, bi navê IO-yê re derbas dibe. Lê heke we REST-ya klasîk an serîlêdanên alîgirê xerîdar hebin, Quarkus modelek bernamesaziya mecbûrî amade ye. Mînakî, piştgiriya HTTP-ê li Quarkus-ê li ser bingeha karanîna motorek ne-asteng û reaktîf (Eclipse Vert.x û Netty) ye. Hemî daxwazên HTTP-ê yên ku ji hêla serîlêdana we ve têne wergirtin pêşî di nav pêlekek bûyerê (IO Mijara) de têne derbas kirin û dûv re ji beşa kodê re têne şandin ku daxwazan birêve dibe. Bi mebestê ve girêdayî, koda rêveberiya daxwaznameyê dikare di nav mijarek veqetandî de were gazî kirin (ku jê re tê gotin xebatkar, di doza servlets û Jax-RS de tê bikar anîn) an jî çavkaniya I/O (rêça reaktîf) bikar bîne.

Quarkus çawa bernamesaziya mecbûrî û reaktîf bi hev dike

Girêdanên pergala peyamberdanê xerîdarên ne-astengker ên ku li ser motora Vert.x-ê dixebitin bikar tînin. Ji ber vê yekê, hûn dikarin bi bandor ji pergalên navgîniya mesajê re bişînin, bistînin û pêvajoyê bikin.

Li ser malperê Quarkus.io Li vir hin dersên baş hene ku ji we re bibin alîkar ku hûn bi Quarkus re dest pê bikin:

Me di heman demê de dersên serhêl ên serhêl çêkiriye da ku hûn bi tenê gerokek, bê IDE hewce ne, û ne hewceyê komputerê, çend aliyên bernamesaziya reaktîf fêrî we bikin. Hûn dikarin van dersan bibînin vir.

Çavkaniyên bikarhêner

10 dersên vîdyoyê li ser Quarkus ji bo ku hûn mijarê nas bikin

Wekî ku ew li ser malperê dibêjin Quarkus.io, quarkus - ev Kubernetes-stack Java-ya oriented, ku ji bo GraalVM û OpenJDK HotSpot hatî çêkirin û ji pirtûkxane û standardên Java yên çêtirîn hatî berhev kirin.

Ji bo ku hûn mijarê fam bikin, me 10 dersên vîdyoyê hilbijart ku cûrbecûr aliyên Quarkus û mînakên karanîna wê vedihewîne:

1. Danasîna Quarkus: Çarçoveya Java ya Nifşê Pêşe ji bo Kubernetes

Ji hêla Thomas Qvarnstrom û Jason Greene ve
Armanca projeya Quarkus ew e ku ji bo Kubernetes û hawîrdorên bê server platformek Java-yê biafirîne, û modelên bernamesaziya reaktîf û mecbûrî di yek jîngehek dema xebitandinê de berhev bike da ku pêşdebiran dema ku bi cûrbecûr mîmarên serîlêdana belavkirî re dixebitin bi nermî nêzîkatiya xwe biguhezînin. Di dersa destpêkê ya jêrîn de bêtir fêr bibin.

2. Quarkus: Javaya Subatomî ya Serlez

Ji hêla: Burr Sutter
Vê dersa vîdyoyê ji DevNation Live destnîşan dike ka meriv çawa Quarkus bikar tîne da ku serîlêdanên Java-ya pargîdanî, API, mîkroxizmet, û fonksiyonên bê server di hawîrdorek Kubernetes/OpenShift de xweşbîn bike, wan pir piçûktir, bileztir û berbelavtir dike.

3. Quarkus û GraalVM: Hibernate bi leza super bileztir dike û wê berbi mezinahiyên subatomîk ve dike

Nivîskar: Sanne Grinovero
Ji pêşkêşiyê hûn ê fêr bibin ka Quarkus çawa çêbû, ew çawa dixebite, û ew çawa dihêle hûn pirtûkxaneyên tevlihev, mîna Hibernate ORM, bi wêneyên xwemalî yên GraalVM re hevaheng çêbikin.

4. Fêr bibin ku serîlêdanên bê server pêşve bibin

Nivîskar: Martin Luther
Vîdyoya jêrîn destnîşan dike ka meriv çawa bi karanîna Quarkus serîlêdanek Java-ya hêsan biafirîne û wê wekî serîlêdanek bê server li ser Knative-ê bicîh bike.

5. Quarkus: Bi kodkirina kêfê re

Nivîskar: Edson Yanaga
Rêbernameyek vîdyoyê ji bo afirandina projeya xweya yekem Quarkus, ku dihêle hûn fêm bikin ka çima Quarkus dilê pêşdebiran bi dest dixe.

6. Java û konteynir - dê pêşeroja wan bi hev re çi be

Ji hêla Mark Little ve hatî şandin
Ev pêşkêşî dîroka Java destnîşan dike û rave dike ka çima Quarkus paşeroja Java ye.

7. Quarkus: Javaya Subatomî ya Serlez

Nivîskar: Dimitris Andreadis
Nêrînek li ser avantajên Quarkus-ê yên ku ji pêşdebiran têne pejirandin: sadebûn, leza pir-bilind, pirtûkxane û standardên çêtirîn.

8. Pergalên roketên Quarkus û subatomî

Nivîskar: Clement Escoffier
Bi yekbûna bi GraalVM re, Quarkus ezmûnek pêşkeftina ultra-lez û jîngehek dema xebitandinê ya subatomî peyda dike. Nivîskar li ser aliyê reaktîf ê Quarkus û çawaniya karanîna wê ji bo avakirina serîlêdanên reaktîf û vekêşanê diaxive.

9. Quarkus û pêşkeftina bilez a serîlêdanê li Eclipse MicroProfile

Nivîskar: John Clingan
Bi tevhevkirina Eclipse MicroProfile û Quarkus, pêşdebiran dikarin serîlêdanên MicroProfile-a konteynirkirî yên tam-taybetmend ên ku di deh millisecondan de dest pê dikin biafirînin. Vîdyo bi hûrgulî diçe ka meriv çawa serîlêdana MicroProfile ya konteynirkirî ji bo bicîhkirina li ser platforma Kubernetes kod dike.

10. Java, guhertoya "Turbo".

Nivîskar: Marcus Biel
Nivîskar destnîşan dike ku meriv çawa Quarkus bikar tîne da ku konteynerên Java-ya super-biçûk, super-lez biafirîne ku destkeftiyên rastîn pêk tîne, nemaze di hawîrdorên bê server.



Source: www.habr.com

Add a comment