Sut mae Quarkus yn cyfuno rhaglennu hanfodol ac adweithiol

Eleni rydym yn bwriadu datblygu themâu cynwysyddion o ddifrif, Java Cwmwl-frodorol и Kubernetes. Parhad rhesymegol o'r pynciau hyn fydd stori am fframwaith Quarkus, yn barod ystyried ar Habré. Mae erthygl heddiw yn ymwneud llai â dyluniad "Java cyflym iawn subatomig" a mwy am yr addewid y mae Quarkus yn ei roi i Enterprise.

Sut mae Quarkus yn cyfuno rhaglennu hanfodol ac adweithiol

Mae Java a'r JVM yn dal i fod yn hynod boblogaidd, ond wrth weithio gyda thechnolegau di-weinydd a microwasanaethau cwmwl-frodorol, defnyddir Java ac ieithoedd JVM eraill yn llai a llai oherwydd eu bod yn cymryd gormod o le cof ac yn rhy araf i'w llwytho, gan eu gwneud yn addas iawn i'w ddefnyddio gyda chynwysyddion tymor byr. Yn ffodus, mae'r sefyllfa hon bellach yn dechrau newid diolch i Quarkus.

Mae Java isatomig cyflym iawn wedi cyrraedd lefel newydd!

42 o ddatganiadau, 8 mis o waith cymunedol a 177 o ddatblygwyr anhygoel - canlyniad y cyfan oedd rhyddhau ym mis Tachwedd 2019 Cwarcws 1.0, datganiad sy'n nodi carreg filltir bwysig yn natblygiad y prosiect ac sy'n cynnig llawer o nodweddion a galluoedd cŵl (gallwch ddarllen mwy amdanynt yn cyhoeddiad).

Heddiw, byddwn yn dangos i chi sut mae Quarkus yn cyfuno modelau rhaglennu hanfodol ac adweithiol yn un craidd adweithiol. Byddwn yn dechrau gyda hanes byr ac yna'n mynd i fanylder ynghylch beth yw deuoliaeth graidd adweithiol Quarkus a sut. Java-Gall datblygwyr fanteisio ar y manteision hyn.

Microwasanaethau, pensaernïaeth a yrrir gan ddigwyddiadau и di-weinydd-swyddogaethau – mae hyn i gyd, fel y dywedant, ar gynnydd heddiw. Yn ddiweddar, mae creu pensaernïaeth cwmwl-ganolog wedi dod yn llawer haws ac yn fwy hygyrch, ond erys problemau - yn enwedig i ddatblygwyr Java. Er enghraifft, yn achos swyddogaethau di-weinydd a microwasanaethau, mae angen brys i leihau'r amser cychwyn, lleihau'r defnydd o gof, a dal i wneud eu datblygiad yn fwy cyfleus a phleserus. Mae Java wedi gwneud nifer o welliannau yn ystod y blynyddoedd diwethaf, megis gwell ymarferoldeb ergonomeg ar gyfer cynwysyddion ac ati. Fodd bynnag, mae cael Java i weithio'n iawn mewn cynhwysydd yn dal yn heriol. Felly byddwn yn dechrau trwy edrych ar rai o gymhlethdodau cynhenid ​​​​Java, sy'n arbennig o ddifrifol wrth ddatblygu cymwysiadau Java sy'n canolbwyntio ar gynhwyswyr.

Yn gyntaf, gadewch i ni edrych ar yr hanes.

Sut mae Quarkus yn cyfuno rhaglennu hanfodol ac adweithiol

Nentydd a chynwysyddion

Gan ddechrau gyda fersiwn 8u131, dechreuodd Java gefnogi cynwysyddion fwy neu lai oherwydd gwelliannau mewn ymarferoldeb ergonomeg. Yn benodol, mae'r JVM bellach yn gwybod faint o greiddiau prosesydd y mae'n rhedeg arnynt a gall ffurfweddu pyllau edau - yn nodweddiadol pyllau fforch / ymuno - yn unol â hynny. Wrth gwrs, mae hyn yn wych, ond gadewch i ni ddweud bod gennym ni gymhwysiad gwe traddodiadol sy'n defnyddio servlets HTTP ac yn rhedeg yn Tomcat, Jetty, ac ati. O ganlyniad, bydd y cymhwysiad hwn yn rhoi edefyn ar wahân i bob cais ac yn caniatáu iddo rwystro'r edefyn hwn wrth aros am weithrediadau I / O, er enghraifft, wrth gyrchu'r gronfa ddata, ffeiliau neu wasanaethau eraill. Hynny yw, nid yw maint cais o'r fath yn dibynnu ar nifer y creiddiau sydd ar gael, ond ar nifer y ceisiadau ar yr un pryd. Yn ogystal, mae hyn yn golygu na fydd cwotâu neu derfynau yn Kubernetes ar nifer y creiddiau o lawer o gymorth yma, a bydd y mater yn y pen draw yn dod i ben gyda chyffro.

Gorludded cof

Mae edafedd yn gof. Ac nid yw cyfyngiadau cof o fewn y cynhwysydd yn ateb i bob problem o bell ffordd. Dechreuwch gynyddu nifer y cymwysiadau ac edafedd, ac yn hwyr neu'n hwyrach byddwch yn dod ar draws cynnydd critigol mewn amlder newid ac, o ganlyniad, diraddio perfformiad. Hefyd, os yw'ch cais yn defnyddio fframweithiau microwasanaeth traddodiadol, neu'n cysylltu â chronfa ddata, neu'n defnyddio caching, neu'n defnyddio cof fel arall, mae'n amlwg bod angen teclyn arnoch sy'n eich galluogi i edrych y tu mewn i'r JVM a gweld sut mae'n rheoli cof heb ei ladd. JVM ei hun (er enghraifft, XX:+UseCGroupMemoryLimitForHeap). Ac er, ers Java 9, mae'r JVM wedi dysgu derbyn cgroups ac addasu yn unol â hynny, mae cadw a rheoli cof yn parhau i fod yn fater eithaf cymhleth.

Cwotâu a therfynau

Cyflwynodd Java 11 gefnogaeth ar gyfer cwotâu CPU (fel PreferContainerQuotaForCPUCCount). Mae Kubernetes hefyd yn cynnig cefnogaeth ar gyfer terfynau a chwotâu. Ydy, mae hyn i gyd yn gwneud synnwyr, ond os yw'r cais eto'n fwy na'r cwota a ddyrannwyd, rydyn ni eto yn y pen draw gyda'r maint - fel sy'n wir am gymwysiadau Java traddodiadol - wedi'i bennu gan nifer y creiddiau a chyda dyraniad edefyn ar wahân ar gyfer pob un. cais, yna nid oes fawr o synnwyr yn hyn oll.
Yn ogystal, os ydych chi'n defnyddio cwotâu a therfynau neu swyddogaethau ehangu'r platfform sy'n sail i Kubernetes, nid yw'r broblem ychwaith yn datrys ei hun. Yn syml, rydyn ni'n gwario mwy o adnoddau ar ddatrys y broblem wreiddiol neu'n gorwario. Ac os yw'n system llwyth uchel mewn cwmwl cyhoeddus cyhoeddus, rydym bron yn sicr yn defnyddio mwy o adnoddau nag sydd eu hangen arnom mewn gwirionedd.

A beth i'w wneud â hyn i gyd?

I'w roi yn syml, defnyddiwch lyfrgelloedd I/O anghydamserol a di-rwystro a fframweithiau fel Netty, Vert.x neu Akka. Maent yn llawer mwy addas ar gyfer gweithio mewn cynwysyddion oherwydd eu natur adweithiol. Diolch i I/O nad yw'n rhwystro, gall yr un edefyn brosesu sawl cais ar yr un pryd. Tra bod un cais yn aros am ganlyniadau I / O, mae'r prosesu edau yn cael ei ryddhau a'i gymryd drosodd gan gais arall. A phan fydd y canlyniadau I / O yn cyrraedd o'r diwedd, mae prosesu'r cais cyntaf yn parhau. Trwy brosesu rhyngddalennog ceisiadau o fewn yr un edefyn, gallwch leihau cyfanswm nifer yr edafedd a lleihau'r defnydd o adnoddau ar gyfer prosesu ceisiadau.

Gyda I/O nad yw'n rhwystro, mae nifer y creiddiau yn dod yn baramedr allweddol oherwydd ei fod yn pennu nifer yr edafedd I/O y gellir eu gweithredu ochr yn ochr. Pan gaiff ei ddefnyddio'n gywir, mae hyn yn caniatáu ichi ddosbarthu'r llwyth rhwng creiddiau yn effeithiol a thrin llwythi gwaith uwch gyda llai o adnoddau.

Sut, dyna i gyd?

Na, mae rhywbeth arall. Mae rhaglennu adweithiol yn helpu i wneud gwell defnydd o adnoddau, ond hefyd yn dod am bris. Yn benodol, bydd yn rhaid ailysgrifennu'r cod yn unol ag egwyddorion peidio â blocio ac osgoi blocio edafedd I / O. Ac mae hwn yn fodel hollol wahanol o ddatblygu a gweithredu. Ac er bod llawer o lyfrgelloedd defnyddiol yma, mae'n dal i fod yn newid radical yn y ffordd arferol o feddwl.

Yn gyntaf, mae angen i chi ddysgu sut i ysgrifennu cod sy'n rhedeg yn asyncronig. Unwaith y byddwch yn dechrau defnyddio I/O nad yw'n rhwystro, mae angen i chi nodi'n benodol beth ddylai ddigwydd pan dderbynnir ymateb i gais. Yn syml, ni fydd blocio ac aros yn gweithio mwyach. Yn lle hynny, gallwch basio galwadau yn ôl, defnyddio rhaglennu adweithiol neu barhad. Ond nid dyna'r cyfan: i ddefnyddio I/O nad yw'n rhwystro, mae angen gweinyddwyr a chleientiaid nad ydynt yn rhwystro, yn ddelfrydol ym mhobman. Yn achos HTTP, mae popeth yn syml, ond mae yna hefyd gronfeydd data, systemau ffeiliau, a llawer mwy.

Ac er bod cyfanswm adweithedd o'r dechrau i'r diwedd yn cynyddu effeithlonrwydd, gall fod yn anodd stumogi sifft o'r fath yn ymarferol. Felly, mae'r gallu i gyfuno cod adweithiol a chod hanfodol yn rhagofyniad er mwyn:

  1. Defnyddio adnoddau'n effeithiol yn y rhannau o'r system feddalwedd sydd wedi'u llwytho fwyaf;
  2. Defnyddiwch god arddull symlach yn y rhannau sy'n weddill.

Cyflwyno Quarkus

Mewn gwirionedd, dyma hanfod Quarkus - i gyfuno modelau adweithiol a hanfodol o fewn amgylchedd rhedeg sengl.

Mae Quarkus yn seiliedig ar Vert.x a Netty, gydag ystod o fframweithiau adweithiol ac estyniadau ar ei ben i helpu'r datblygwr. Mae Quarkus wedi'i gynllunio ar gyfer adeiladu nid yn unig microwasanaethau HTTP, ond hefyd pensaernïaeth a yrrir gan ddigwyddiadau. Oherwydd ei natur adweithiol, mae'n gweithio'n effeithiol iawn gyda systemau negeseuon (Apache Kafka, AMQP, ac ati).

Y tric yw sut i ddefnyddio'r un injan adweithiol ar gyfer cod hanfodol ac adweithiol.

Sut mae Quarkus yn cyfuno rhaglennu hanfodol ac adweithiol

Mae Quarkus yn gwneud hyn yn wych. Mae'r dewis rhwng rheidrwydd ac adweithiol yn amlwg - defnyddiwch gnewyllyn adweithiol ar gyfer y ddau. Yr hyn y mae'n wirioneddol helpu ag ef yw cod cyflym, di-flocio sy'n trin bron popeth sy'n mynd trwy'r edefyn dolen digwyddiad, aka edau IO. Ond os oes gennych chi REST clasurol neu gymwysiadau ochr y cleient, mae gan Quarkus fodel rhaglennu hanfodol yn barod. Er enghraifft, mae cefnogaeth HTTP yn Quarkus yn seiliedig ar ddefnyddio injan nad yw'n rhwystro ac adweithiol (Eclipse Vert.x a Netty). Mae pob cais HTTP a dderbynnir gan eich cais yn cael ei basio yn gyntaf trwy ddolen ddigwyddiad (IO Thread) ac yna'n cael ei anfon i'r rhan o'r cod sy'n rheoli'r ceisiadau. Yn dibynnu ar y cyrchfan, gellir galw'r cod rheoli cais o fewn edefyn ar wahân (yr hyn a elwir yn edau gweithiwr, a ddefnyddir yn achos servlets a Jax-RS) neu ddefnyddio'r edau ffynhonnell I/O (llwybr adweithiol).

Sut mae Quarkus yn cyfuno rhaglennu hanfodol ac adweithiol

Mae cysylltwyr system negeseuon yn defnyddio cleientiaid nad ydynt yn rhwystro sy'n rhedeg ar ben injan Vert.x. Felly, gallwch chi anfon, derbyn a phrosesu negeseuon o systemau nwyddau canol negeseuon yn effeithiol.

Mae'r safle Quarkus.io Dyma rai tiwtorialau da i'ch helpu i ddechrau gyda Quarkus:

Rydym hefyd wedi creu tiwtorialau ymarferol ar-lein i ddysgu gwahanol agweddau ar raglennu adweithiol i chi mewn porwr yn unig, nid oes angen DRhA, ac nid oes angen cyfrifiadur. Gallwch ddod o hyd i'r gwersi hyn yma.

Adnoddau defnyddiol

10 gwers fideo ar Quarkus i ddod yn gyfarwydd â'r pwnc

Fel maen nhw'n dweud ar y wefan Quarkus.io, Cwarcws - mae'n Kubernetes- stac Java wedi'i gyfeirio, wedi'i deilwra ar gyfer GraalVM ac OpenJDK HotSpot ac wedi'i ymgynnull o'r llyfrgelloedd a'r safonau Java gorau.

I’ch helpu i ddeall y pwnc, rydym wedi dewis 10 tiwtorial fideo sy’n ymdrin â gwahanol agweddau ar Quarkus ac enghreifftiau o’i ddefnydd:

1. Cyflwyno Quarkus: Fframwaith Java'r Genhedlaeth Nesaf ar gyfer Kubernetes

Gan Thomas Qvarnstrom a Jason Greene
Nod prosiect Quarkus yw creu platfform Java ar gyfer Kubernetes ac amgylcheddau di-weinydd, a chyfuno modelau rhaglennu adweithiol a hanfodol yn un amgylchedd amser rhedeg fel y gall datblygwyr amrywio eu hagwedd yn hyblyg wrth weithio gydag ystod eang o saernïaeth cymwysiadau dosbarthedig. Darganfyddwch fwy yn y ddarlith ragarweiniol isod.

2. Quarkus: Java Isatomig Cyflym Iawn

Gan: Burr Sutter
Mae'r tiwtorial fideo hwn gan DevNation Live yn dangos sut i ddefnyddio Quarkus i wneud y gorau o gymwysiadau Java menter, APIs, microservices, a swyddogaethau di-weinydd mewn amgylchedd Kubernetes / OpenShift, gan eu gwneud yn llawer llai, cyflymach a mwy graddadwy.

3. Quarkus a GraalVM: cyflymu gaeafgysgu i gyflymderau gwych a'i grebachu i feintiau isatomig

Awdur: Sanne Grinovero
O'r cyflwyniad byddwch yn dysgu sut y daeth Quarkus i fod, sut mae'n gweithio, a sut mae'n caniatáu ichi wneud llyfrgelloedd cymhleth, fel Hibernate ORM, yn gydnaws â delweddau GraalVM brodorol.

4. Dysgwch sut i ddatblygu cymwysiadau di-weinydd

Awdur: Martin Luther
Mae'r fideo isod yn dangos sut i greu cymhwysiad Java syml gan ddefnyddio Quarkus a'i ddefnyddio fel cymhwysiad heb weinydd ar Knative.

5. Quarkus: Cael hwyl codio

Awdur: Edson Yanaga
Canllaw fideo i greu eich prosiect Quarkus cyntaf, sy'n eich galluogi i ddeall pam mae Quarkus yn ennill calonnau datblygwyr.

6. Java a chynwysyddion - beth fydd eu dyfodol gyda'i gilydd

Postiwyd gan Mark Little
Mae'r cyflwyniad hwn yn cyflwyno hanes Java ac yn egluro pam mai Quarkus yw dyfodol Java.

7. Quarkus: Java Isatomig Cyflym Iawn

Awdur: Dimitris Andreadis
Trosolwg o fanteision Quarkus sydd wedi derbyn cydnabyddiaeth gan ddatblygwyr: symlrwydd, cyflymder uchel iawn, y llyfrgelloedd a'r safonau gorau.

8. Quarkus a systemau roced isatomig

Awdur: Clement Escoffier
Trwy integreiddio â GraalVM, mae Quarkus yn darparu profiad datblygu cyflym iawn ac amgylchedd amser rhedeg isatomig. Mae'r awdur yn sôn am ochr adweithiol Quarkus a sut i'w ddefnyddio i adeiladu cymwysiadau adweithiol a ffrydio.

9. Quarkus a datblygiad cais cyflym yn Eclipse MicroProfile

Awdur: John Clingan
Trwy gyfuno Eclipse MicroProfile a Quarkus, gall datblygwyr greu cymwysiadau MicroProfile llawn cynnwys sy'n lansio mewn degau o filieiliadau. Mae'r fideo yn manylu ar sut i godio cais MicroProfile mewn cynhwysydd i'w ddefnyddio ar blatfform Kubernetes.

10. Java, fersiwn "Turbo".

Awdur: Marcus Biel
Mae'r awdur yn dangos sut i ddefnyddio Quarkus i greu cynwysyddion Java hynod fach, hynod gyflym sy'n galluogi datblygiadau go iawn, yn enwedig mewn amgylcheddau heb weinydd.



Ffynhonnell: hab.com

Ychwanegu sylw