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.
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.
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:
Defnyddio adnoddau'n effeithiol yn y rhannau o'r system feddalwedd sydd wedi'u llwytho fwyaf;
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.
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).
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.
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.