Pehea ʻo Quarkus e hoʻohui ai i nā polokalamu imperative a me reactive

I kēia makahiki, hoʻolālā mākou e hoʻomohala koʻikoʻi i nā kumuhana pahu, Cloud-Native Java и Kubernetes. ʻO ka hoʻomau kūpono o kēia mau kumuhana he moʻolelo e pili ana i ka ʻōnaehana Quarkus noonooia ma Habré. He liʻiliʻi ka ʻatikala o kēia lā e pili ana i ka hoʻolālā ʻana o "subatomic superfast Java" a me nā mea hou aʻe e pili ana i ka ʻōlelo hoʻohiki a Quarkus e lawe mai i Enterprise.

Pehea ʻo Quarkus e hoʻohui ai i nā polokalamu imperative a me reactive

Ua kaulana loa ʻo Java a me ka JVM, akā i ka hana ʻana me nā ʻenehana serverless a me nā microservices cloud-native, ua hoʻohana liʻiliʻi ʻia ʻo Java a me nā ʻōlelo JVM ʻē aʻe no ka mea ʻoi aku ka nui o ka hoʻomanaʻo ʻana a lohi loa i ka hoʻouka ʻana, e hana ana iā lākou. kūpono ʻole no ka hoʻohana ʻana me nā ipu pōkole. ʻO ka mea pōmaikaʻi, ke hoʻomaka nei kēia kūlana e hoʻololi i ka mahalo iā Quarkus.

Ua hōʻea ʻo Superfast subatomic Java i kahi pae hou!

42 hoʻokuʻu, 8 mahina o ka hana kaiāulu a me 177 nā mea hoʻomohala kupaianaha - ʻo ka hopena o ia mea a pau i ka hoʻokuʻu ʻia ma Nowemapa 2019 Quarkus 1.0, kahi hoʻokuʻu e hōʻailona ana i kahi koʻikoʻi koʻikoʻi i ka hoʻomohala ʻana i ka papahana a hāʻawi i nā hiʻohiʻona ʻoluʻolu a me nā mea hiki (hiki iā ʻoe ke heluhelu hou e pili ana iā lākou ma hoolaha).

I kēia lā, e hōʻike mākou iā ʻoe pehea e hoʻohui ai ʻo Quarkus i nā hiʻohiʻona hoʻolālā imperative a me reactive i hoʻokahi kumu reactive. E hoʻomaka mākou me kahi moʻolelo pōkole a laila e hele i nā kikoʻī e pili ana i ka Quarkus 'reactive core dualism a pehea Iawa- Hiki i nā mea hoʻomohala ke hoʻohana i kēia mau pono.

Nā lawelawe liʻiliʻi, nā hale hana hanana и kikoʻole-ʻoihana - ʻo kēia mau mea, e like me kā lākou e ʻōlelo nei, ke piʻi nei i kēia lā. I kēia mau lā, ua maʻalahi a maʻalahi ka hoʻokumu ʻana i nā papa hana cloud-centric, akā mau nā pilikia - ʻoi loa no nā mea hoʻomohala Java. No ka laʻana, i ke ʻano o nā hana serverless a me nā microservices, pono e hōʻemi i ka manawa hoʻomaka, hoʻemi i ka hoʻohana ʻana i ka hoʻomanaʻo, a hoʻomau i kā lākou hoʻomohala ʻana i mea maʻalahi a leʻaleʻa. Ua hana ʻo Java i nā hoʻomaikaʻi i nā makahiki i hala iho nei, e like me ka hoʻomaikaʻi ʻana i ka hana ergonomics no nā ipu a pēlā aku. Eia nō naʻe, paʻakikī ka loaʻa ʻana o Java e hana pono i loko o kahi pahu. No laila, e hoʻomaka mākou ma ka nānā ʻana i kekahi o nā mea paʻakikī o Java, ʻoi aku ka koʻikoʻi i ka hoʻomohala ʻana i nā noi Java e pili ana i ka pahu.

ʻO ka mua, e nānā kākou i ka mōʻaukala.

Pehea ʻo Quarkus e hoʻohui ai i nā polokalamu imperative a me reactive

Nā kahawai a me nā ipu

E hoʻomaka ana me ka mana 8u131, ua hoʻomaka ʻo Java i nā pahu kākoʻo hou aʻe ma muli o ka hoʻomaikaʻi ʻana i ka hana ergonomics. ʻO ka mea kūikawā, ʻike ka JVM i ka nui o nā cores kaʻina e holo nei a hiki ke hoʻonohonoho i nā kolamu thread-ʻo ka maʻamau fork/join pools-e like me. ʻOiaʻiʻo, maikaʻi kēia, akā e ʻōlelo mākou he polokalamu pūnaewele kuʻuna mākou e hoʻohana ana i nā servlets HTTP a holo i Tomcat, Jetty, etc. ʻO ka hopena, e hāʻawi kēia palapala noi i kēlā me kēia noi i kahi pae ʻokoʻa a ʻae iā ia e ālai i kēia pae i ke kali ʻana i nā hana I/O, no ka laʻana, ke komo ʻana i ka waihona, nā faila a i ʻole nā ​​​​lawelawe ʻē aʻe. ʻO ia hoʻi, ʻaʻole pili ka nui o ia noi i ka helu o nā cores i loaʻa, akā ma ka helu o nā noi like. Eia kekahi, ʻo ia hoʻi, ʻaʻole kōkua nui nā quota a i ʻole nā ​​palena ma Kubernetes i ka helu o nā cores ma ʻaneʻi, a e pau ka mea i ka throttling.

Hoʻopau hoʻomanaʻo

He hoʻomanaʻo nā kaula. A ʻo nā palena hoʻomanaʻo intra-container ʻaʻole ia he panacea. E hoʻomaka wale e hoʻonui i ka helu o nā noi a me nā kaula, a ma hope a ma hope paha e hālāwai ʻoe i kahi piʻi koʻikoʻi o ka hoʻololi pinepine ʻana a, ma muli o ka hopena, ka hōʻemi ʻana o ka hana. Eia kekahi, inā hoʻohana kāu palapala noi i nā microservice kuʻuna, a pili paha i kahi waihona, a hoʻohana paha i ka caching, a i ʻole e hoʻohana i ka hoʻomanaʻo, pono ʻoe i kahi mea hana e hiki ai iā ʻoe ke nānā i loko o ka JVM a ʻike i ke ʻano o ka mālama ʻana i ka hoʻomanaʻo me ka pepehi ʻole ʻana. ʻO JVM ponoʻī (no ka laʻana, XX:+UseCGroupMemoryLimitForHeap). A ʻoiai, mai ka Java 9, ua aʻo ka JVM e ʻae i nā hui a hoʻololi e like me ia, ʻo ka mālama ʻana a me ka mālama ʻana i ka hoʻomanaʻo he mea paʻakikī loa ia.

Nā helu a me nā palena

Ua hoʻokomo ʻo Java 11 i ke kākoʻo no ka CPU quotas (e like me PreferContainerQuotaForCPUCount). Hāʻawi pū ʻo Kubernetes i ke kākoʻo no nā palena a me nā quota. ʻAe, kūpono kēia mau mea a pau, akā inā ʻoi aku ka nui o ka noi ma mua o ka quota i hāʻawi ʻia, hoʻopau hou mākou i ka nui - e like me ke ʻano me nā noi Java kuʻuna - i hoʻoholo ʻia e ka helu o nā cores a me ka hoʻokaʻawale ʻana i kahi kaula kaʻawale no kēlā me kēia. noi, a laila, ʻaʻohe manaʻo o kēia mau mea a pau.
Eia kekahi, inā ʻoe e hoʻohana i nā quota a me nā palena a i ʻole nā ​​hana hoʻonui o ka paepae ma lalo o Kubernetes, ʻaʻole hoʻi e hoʻoponopono ka pilikia iā ia iho. Hoʻohana wale mākou i nā kumuwaiwai hou aʻe no ka hoʻoponopono ʻana i ka pilikia kumu a i ʻole e hoʻopau i ka hoʻolimalima. A inā he ʻōnaehana kiʻekiʻe ia i loko o kahi ao lehulehu, ʻaneʻane pau mākou i ka hoʻohana ʻana i nā kumuwaiwai ʻoi aku ma mua o kā mākou pono maoli.

A he aha ka hana me kēia mau mea?

No ka maʻalahi, e hoʻohana i nā hale waihona puke I/O asynchronous a me ka pale ʻole e like me Netty, Vert.x a i ʻole ʻAka. ʻOi aku ka maikaʻi o ka hana ʻana i loko o nā pahu ma muli o ko lākou ʻano reactive. Mahalo i ka pale ʻole ʻana iā I/O, hiki i ke kaula hoʻokahi ke hana i nā noi like ʻole. ʻOiai e kali ana kekahi noi i nā hualoaʻa I/O, ua hoʻokuʻu ʻia ka hoʻoili ʻana o ke kaula a lawe ʻia e kekahi noi ʻē aʻe. A i ka hiki ʻana mai o nā hopena I/O, hoʻomau ka hana ʻana o ka noi mua. Ma o ka hoʻoili ʻana i nā noi i loko o ka pae hoʻokahi, hiki iā ʻoe ke hōʻemi i ka nui o nā loina a hoʻemi i ka hoʻohana waiwai no ka hoʻoponopono ʻana i nā noi.

Me ka pale ʻole ʻana i ka I/O, lilo ka helu o nā cores i ʻāpana koʻikoʻi no ka mea e hoʻoholo ai i ka helu o nā kaula I/O i hiki ke hoʻokō like ʻia. Ke hoʻohana pololei ʻia, ʻae kēia iā ʻoe e puʻunaue pono i ka ukana ma waena o nā cores a mālama i nā haʻahaʻa hana kiʻekiʻe me nā kumu waiwai liʻiliʻi.

Pehea, ʻo ia wale nō?

ʻAʻole, aia kekahi mea ʻē aʻe. Hoʻohana maikaʻi ʻia ka hoʻohana ʻana i nā kumuwaiwai, akā hiki mai ma ke kumu kūʻai. ʻO ka mea nui, pono e kākau hou ʻia ke code e like me nā loina o ka pale ʻole a pale i ka pale ʻana i nā kaula I/O. A he kumu hoʻohālike ʻokoʻa loa kēia o ka hoʻomohala ʻana a me ka hoʻokō. A ʻoiai he nui nā hale waihona puke e pono ai ma ʻaneʻi, he hoʻololi koʻikoʻi nō ia i ke ʻano o ka noʻonoʻo maʻamau.

ʻO ka mea mua, pono ʻoe e aʻo pehea e kākau ai i nā code e holo like ʻole. Ke hoʻomaka ʻoe i ka hoʻohana ʻana i ka I/O non-blocking, pono ʻoe e wehewehe pono i ka mea e hana ʻia ke loaʻa kahi pane i kahi noi. ʻAʻole e hana hou ka pale wale ʻana a me ke kali ʻana. Akā, hiki iā ʻoe ke hāʻawi i nā callbacks, hoʻohana i ka polokalamu reactive a i ʻole ka hoʻomau. Akā ʻaʻole ʻo ia wale nō: no ka hoʻohana ʻana i ka I/O non-blocking, pono ʻoe i nā kikowaena non-blocking a me nā mea kūʻai aku, ʻoi aku ka maikaʻi ma nā wahi āpau. I ka hihia o HTTP, maʻalahi nā mea a pau, akā aia pū kekahi mau waihona, nā ʻōnaehana faila, a me nā mea hou aku.

A ʻoiai ʻo ka hoʻokō ʻana o ka hopena i ka hopena e hoʻonui i ka pono, hiki ke paʻakikī i ka ʻōpū i ka hana. No laila, ʻo ka hiki ke hoʻohui i ka reactive a me ka imperative code e lilo i mea pono i mea e:

  1. E hoʻohana pono i nā kumuwaiwai ma nā wahi i hoʻouka nui ʻia o ka ʻōnaehana polokalamu;
  2. E hoʻohana i ke code kaila maʻalahi i kona mau ʻāpana i koe.

Hoʻolauna iā Quarkus

ʻOiaʻiʻo, ʻo kēia ke kumu o Quarkus - e hoʻohui i nā hiʻohiʻona reactive a imperative i loko o kahi kaiapuni runtime hoʻokahi.

Hoʻokumu ʻia ʻo Quarkus ma Vert.x a me Netty, me kahi ʻano o nā ʻano hana hoʻohālikelike a me nā hoʻonui ma luna e kōkua i ka mea hoʻomohala. Hoʻolālā ʻia ʻo Quarkus no ke kūkulu ʻana ʻaʻole wale i nā microservices HTTP wale nō, akā, ʻo nā hale hana hoʻokele hanana. Ma muli o kona ʻano reactive, hana maikaʻi loa ia me nā ʻōnaehana memo (Apache Kafka, AMQP, etc.).

ʻO ka hoʻopunipuni pehea e hoʻohana ai i ka ʻenekini reactive like no nā code imperative a me reactive.

Pehea ʻo Quarkus e hoʻohui ai i nā polokalamu imperative a me reactive

Hana maikaʻi ʻo Quarkus i kēia. ʻIke ʻia ka koho ma waena o ka imperative a me ka reactive - e hoʻohana i kahi kernel reactive no nā mea ʻelua. ʻO ka mea e kōkua nui ai, ʻo ia ka wikiwiki, ka pāʻālua ʻole e hoʻopaʻa i nā mea āpau e hele ai i ka thread-loop thread, aka IO thread. Akā inā loaʻa iā ʻoe nā noi REST maʻamau a i ʻole nā ​​​​mea kūʻai aku, aia ʻo Quarkus i kahi hiʻohiʻona hoʻolālā koʻikoʻi i ka mākaukau. No ka laʻana, hoʻokumu ʻia ke kākoʻo HTTP ma Quarkus ma ka hoʻohana ʻana i kahi ʻenekini non-blocking a reactive (Eclipse Vert.x a me Netty). ʻO nā noi HTTP āpau i loaʻa i kāu noi e hele mua ʻia ma kahi hanana hanana (IO Thread) a laila hoʻouna ʻia i ka ʻāpana o ke code nāna e mālama i nā noi. Ma muli o ka wahi e hele ai, hiki ke kāhea ʻia ke code hoʻokele noi i loko o kahi pae ʻokoʻa (ka mea i kapa ʻia ka thread worker, i hoʻohana ʻia i ka hihia o nā servlets a me Jax-RS) a i ʻole e hoʻohana i ke kumu I/O thread (reactive route).

Pehea ʻo Quarkus e hoʻohui ai i nā polokalamu imperative a me reactive

Hoʻohana nā mea hoʻohui ʻōnaehana leka uila i nā mea kūʻai ʻole-pale e holo ana ma luna o ka ʻenekini Vert.x. No laila, hiki iā ʻoe ke hoʻouna, loaʻa a hana i nā leka mai nā ʻōnaehana middleware memo.

Aia ma ka pūnaewele Quarkus.io Eia kekahi mau kumu aʻo maikaʻi e kōkua iā ʻoe e hoʻomaka me Quarkus:

Ua hana pū mākou i nā aʻo lima lima ma ka pūnaewele e aʻo iā ʻoe i nā ʻano like ʻole o ka hoʻolālā reactive i loko o kahi polokalamu kele pūnaewele, ʻaʻohe pono IDE, a ʻaʻohe kamepiula pono. Hiki iā ʻoe ke loaʻa kēia mau haʻawina maanei.

Nā Kumuwaiwai Pono

10 mau haʻawina wikiō ma Quarkus e kamaʻāina i ke kumuhana

E like me kā lākou e ʻōlelo nei ma ka pūnaewele Quarkus.io, ʻO Quarkus - kēia Kubernetes-oriented Java stack, i hoʻonohonoho ʻia no GraalVM a me OpenJDK HotSpot a hui ʻia mai nā hale waihona puke Java maikaʻi loa a me nā kūlana.

No ke kōkua ʻana iā ʻoe e hoʻomaopopo i ke kumuhana, ua koho mākou i nā kumu aʻo wikiō 10 e uhi ana i nā ʻano like ʻole o Quarkus a me nā hiʻohiʻona o kona hoʻohana ʻana:

1. Hoʻokomo ʻia ʻo Quarkus: ʻO ka Generation Java Framework no nā Kubernetes

Na Thomas Qvarnstrom a me Jason Greene
ʻO ka pahuhopu o ka papahana Quarkus, ʻo ia ka hoʻokumu ʻana i kahi kahua Java no nā Kubernetes a me nā kaiapuni serverless, a e hoʻohui i nā hiʻohiʻona hoʻolālā reactive a imperative i loko o kahi kaiapuni holo hoʻokahi i hiki i nā mea hoʻomohala ke hoʻololi i kā lākou ala i ka wā e hana ana me kahi ākea o nā papa hana hoʻolaha. E ʻike hou aʻe ma ka haʻiʻōlelo hoʻomaka ma lalo nei.

2. Quarkus: Superfast Subatomic Java

Na: Burr Sutter
Hōʻike kēia wikiō aʻoaʻo mai DevNation Live pehea e hoʻohana ai iā Quarkus no ka hoʻonui ʻana i nā noi Java ʻoihana, nā API, nā microservices, a me nā hana serverless i loko o kahi kaiapuni Kubernetes/OpenShift, e ʻoi aku ka liʻiliʻi, wikiwiki, a ʻoi aku ka scalable.

3. ʻO Quarkus a me GraalVM: e hoʻokē ana i ka Hibernate i nā wikiwiki nui a hoʻemi ʻia i nā nui subatom.

Mea kākau: Sanne Grinovo
Mai ka hōʻike ʻana e aʻo ai ʻoe pehea i hiki mai ai ʻo Quarkus, pehea ia e hana ai, a pehea e hiki ai iā ʻoe ke hana i nā hale waihona puke paʻakikī, e like me Hibernate ORM, kūpono me nā kiʻi GraalVM maoli.

4. E aʻo e hoʻomohala i nā polokalamu serverless

Mea kākau: Martin Luther
Hōʻike ka wikiō ma lalo nei i ka hana ʻana i kahi palapala Java maʻalahi me ka hoʻohana ʻana iā Quarkus a kau ʻia ma ke ʻano he noi serverless ma Knative.

5. Quarkus: E leʻaleʻa i ka coding

Mea kākau: Edson Yanaga
He alakaʻi wikiō i ka hana ʻana i kāu papahana Quarkus mua, e ʻae iā ʻoe e hoʻomaopopo i ke kumu e lanakila ai ʻo Quarkus i nā puʻuwai o nā mea hoʻomohala.

6. ʻO Java a me nā ipu - pehea kā lākou e hiki mai ana

Kau ʻia e Mark Little
Hōʻike kēia hōʻike i ka mōʻaukala o Java a wehewehe i ke kumu ʻo Quarkus ka wā e hiki mai ana o Java.

7. Quarkus: Superfast Subatomic Java

Mea kākau: Dimitris Andreadis
ʻO kahi hiʻohiʻona o nā pono o Quarkus i loaʻa i ka ʻike mai nā mea hoʻomohala: ka maʻalahi, nā wikiwiki kiʻekiʻe loa, nā hale waihona puke maikaʻi loa a me nā kūlana.

8. Quarkus a me nā ʻōnaehana rocket subatomic

Mea kākau: Clement Escoffier
Ma o ka hoʻohui pū ʻana me GraalVM, hāʻawi ʻo Quarkus i kahi ʻike hoʻomohala ultra-wikiwiki a me kahi kaiapuni subatomic runtime. Kūkākūkā ka mea kākau e pili ana i ka ʻaoʻao reactive o Quarkus a pehea e hoʻohana ai ia mea no ke kūkulu ʻana i nā noi reactive a me ke kahe ʻana.

9. Quarkus a me ka hoʻomohala noi wikiwiki ʻana ma Eclipse MicroProfile

Mea kākau: John Clingan
Ma ka hoʻohui ʻana iā Eclipse MicroProfile a me Quarkus, hiki i nā mea hoʻomohala ke hana i nā polokalamu MicroProfile pahu pahu piha piha e hoʻomaka ana i nā ʻumi milliseconds. Hele ka wikiō i nā kikoʻī e pili ana i ka hoʻopaʻa inoa ʻana i kahi noi MicroProfile containerized no ka hoʻolaha ʻana ma ke kahua Kubernetes.

10. Java, "Turbo" mana

Mea kākau: Marcus Biel
Hōʻike ka mea kākau i ka hoʻohana ʻana iā Quarkus e hana i nā ipu Java super-liʻiliʻi, super-wikiwiki e hiki ai i nā holomua maoli, ʻoi aku hoʻi i nā kaiapuni serverless.



Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka