Kumaha Quarkus ngagabungkeun program imperatif sareng réaktif

Taun ieu kami ngarencanakeun pikeun ngembangkeun téma wadahna sacara serius, Cloud-Native Java и Kubernetes. A tuluyan logis tina jejer ieu bakal carita ngeunaan kerangka Quarkus, geus dianggap dina Habré. Artikel dinten ieu kirang langkung seueur ngeunaan desain "Subatomic superfast Java" sareng seueur deui ngeunaan janji anu Quarkus bawa ka Enterprise.

Kumaha Quarkus ngagabungkeun program imperatif sareng réaktif

Java sareng JVM masih populer pisan, tapi nalika damel sareng téknologi tanpa server sareng microservices cloud-asli, Java sareng basa JVM sanésna dianggo kirang-langkung kusabab aranjeunna nyéépkeun rohangan mémori teuing sareng lambat teuing pikeun dimuat, ngajantenkeun aranjeunna kirang cocog pikeun pamakéan ku peti umur pondok. Kabeneran, kaayaan ieu ayeuna mimiti robih berkat Quarkus.

Java subatomik super gancang parantos ngahontal tingkat anyar!

42 sékrési, 8 bulan gawé komunitas sareng 177 pamekar anu luar biasa - hasilna sadayana nyaéta sékrési dina bulan Nopémber 2019 Kuarkus 1.0, Pelepasan anu nandaan tonggak penting dina pamekaran proyék sareng nawiskeun seueur fitur sareng kamampuan anu saé (anjeun tiasa maca langkung seueur ngeunaan aranjeunna dina pangumuman).

Dinten ieu kami bakal nunjukkeun anjeun kumaha Quarkus ngagabungkeun modél program imperatif sareng réaktif kana inti réaktif tunggal. Urang bakal mimitian ku sajarah ringkes teras lebet kana detil ngeunaan naon dualisme inti réaktif Quarkus sareng kumaha Jawa-Pamekar tiasa ngamangpaatkeun kauntungan ieu.

Microservices, arsitéktur acara disetir и serverless-fungsi - kabeh ieu, sabab nyebutkeun, naek kiwari. Anyar, kreasi arsitéktur cloud-centric geus jadi leuwih gampang jeung leuwih diaksés, tapi masalah tetep - utamana pikeun pamekar Java. Contona, dina kasus fungsi serverless sarta microservices, aya hiji kabutuhan urgent pikeun ngurangan waktu ngamimitian, ngurangan pamakean memori, sarta masih nyieun ngembangkeun maranéhanana leuwih merenah tur nikmat. Java geus nyieun sababaraha perbaikan dina taun panganyarna, kayaning ningkat fungsionalitas ergonomics pikeun peti jeung saterusna. Nanging, ngajantenkeun Java tiasa dianggo leres dina wadahna masih sesah. Janten urang mimitian ku ningali sababaraha kompleksitas bawaan Java, anu khususna akut nalika ngembangkeun aplikasi Java anu berorientasi wadah.

Kahiji, hayu urang nempo sajarah.

Kumaha Quarkus ngagabungkeun program imperatif sareng réaktif

Aliran jeung wadah

Dimimitian ku vérsi 8u131, Java mimiti ngadukung wadah anu langkung seueur kusabab perbaikan fungsionalitas ergonomi. Khususna, JVM ayeuna terang sabaraha teras prosesor anu dijalankeun sareng tiasa ngonpigurasikeun pools benang-biasana garpu / gabung pools-sasuai. Tangtosna, ieu saé, tapi anggap urang gaduh aplikasi wéb tradisional anu nganggo servlet HTTP sareng dijalankeun dina Tomcat, Jetty, jsb. Hasilna, aplikasi ieu bakal masihan unggal pamundut thread misah tur ngidinan pikeun meungpeuk thread ieu bari ngantosan operasi I / O, contona, nalika ngakses database, file atawa jasa lianna. Nyaéta, ukuran aplikasi sapertos henteu gumantung kana jumlah inti anu sayogi, tapi dina jumlah pamundut sakaligus. Sajaba ti éta, ieu ngandung harti yén kuota atawa wates dina Kubernetes dina Jumlah cores moal jadi loba pitulung di dieu, sarta masalah pamustunganana bakal mungkas throttling.

Mémori kacapean

Benang téh mémori. Sareng watesan memori intra-wadah sanés hartosna panacea. Ngan mimitian ningkatkeun jumlah aplikasi sareng benang, sareng engké atanapi engké anjeun bakal ngalaman paningkatan kritis dina frékuénsi switching sareng, akibatna, degradasi kinerja. Ogé, upami aplikasi anjeun nganggo kerangka microservice tradisional, atanapi nyambung ka database, atanapi nganggo cache, atanapi upami henteu nganggo mémori, anjeun écés peryogi alat anu ngamungkinkeun anjeun ningali ka jero JVM sareng ningali kumaha ngatur mémori tanpa maéhan éta. JVM sorangan (contona, XX: + UseCGroupMemoryLimitForHeap). Sarta sanajan, saprak Java 9, JVM geus diajar pikeun nampa cgroups sarta adaptasi sasuai, reserving jeung ngatur memori tetep masalah rada kompléks.

Kuota jeung wates

Java 11 ngenalkeun dukungan pikeun kuota CPU (sapertos PreferContainerQuotaForCPUCount). Kubernetes ogé nawiskeun dukungan pikeun wates sareng kuota. Leres, ieu sadayana masuk akal, tapi upami aplikasina langkung seueur deui kuota anu dialokasikeun, urang deui dugi ka ukuran - sapertos dina aplikasi Java tradisional - ditangtukeun ku jumlah inti sareng alokasi benang anu misah pikeun masing-masing. pamundut, lajeng aya saeutik rasa dina sakabéh ieu.
Salaku tambahan, upami anjeun nganggo kuota sareng wates atanapi fungsi skala-kaluar tina platform anu aya dina Kubernetes, masalahna ogé henteu ngarengsekeun sorangan. Urang ngan ukur nyéépkeun langkung seueur sumber pikeun ngarengsekeun masalah aslina atanapi mungkas overspending. Sareng upami éta sistem beban tinggi dina méga umum umum, urang ampir pasti bakal ngagunakeun sumber daya anu langkung seueur tibatan anu urang peryogikeun.

Sarta naon anu kudu dipigawé kalayan sagala ieu?

Saderhana, paké perpustakaan I/O asynchronous sareng non-blocking sareng kerangka kerja sapertos Netty, Vert.x atawa Akka. Aranjeunna langkung cocog pikeun dianggo dina peti kusabab sipat réaktifna. Hatur nuhun kana non-blocking I / O, thread sarua bisa ngolah sababaraha requests simultaneous. Bari hiji pamundut ngantosan I / O hasil, thread processing eta dileupaskeun sarta direbut ku pamundut sejen. Sareng nalika hasil I / O tungtungna sumping, pamrosésan pamundut anu munggaran diteruskeun. Ku ngolah interleaved requests dina thread sarua, anjeun bisa ngurangan jumlah total threads sarta ngurangan konsumsi sumberdaya pikeun requests processing.

Kalawan non-blocking I / O, jumlah cores jadi parameter konci sabab nangtukeun jumlah I / O threads nu bisa dieksekusi dina paralel. Nalika dianggo leres, ieu ngamungkinkeun anjeun sacara efektif ngadistribusikaeun beban antara inti sareng nanganan beban kerja anu langkung luhur kalayan sumber daya anu langkung saeutik.

Kumaha, éta sadayana?

Henteu, aya anu sanés. Pemrograman réaktif ngabantosan ngagunakeun sumber daya anu langkung saé, tapi ogé hargana. Khususna, kodeu kedah ditulis ulang dumasar kana prinsip non-blocking sareng ngahindarkeun ngahalangan benang I / O. Sareng ieu mangrupikeun modél pangwangunan sareng palaksanaan anu béda-béda. Sareng sanaos seueur perpustakaan anu kapaké di dieu, éta tetep parobihan radikal dina cara mikir anu biasa.

Kahiji, anjeun kudu diajar kumaha carana nulis kode nu ngajalankeun asynchronously. Sakali anjeun mimiti ngagunakeun non-blocking I / O, anjeun kudu eksplisit tangtukeun naon anu kudu lumangsung nalika respon kana pamundut nu narima. Kantun meungpeuk sareng ngantosan moal jalan deui. Gantina, Anjeun bisa lulus callbacks, make programming réaktif atawa tuluyan. Tapi éta henteu sadayana: ngagunakeun non-blocking I / O, anjeun peryogi duanana non-blocking server na klien, preferably madhab. Dina kasus HTTP, sadayana saderhana, tapi aya ogé database, sistem file, sareng seueur deui.

Sarta sanajan total réaktivitas tungtung-to-tungtung maximizes efisiensi, shift misalna bisa jadi hésé burih dina prakna. Ku alatan éta, kamampuh pikeun ngagabungkeun kode réaktif jeung imperatif jadi prasyarat pikeun:

  1. Éféktif ngagunakeun sumberdaya di wewengkon paling dimuat dina sistem software;
  2. Paké kode gaya basajan dina bagian sésana.

Nepangkeun Quarkus

Sabenerna, ieu hakekat Quarkus - pikeun ngagabungkeun modél réaktif sareng imperatif dina lingkungan runtime tunggal.

Quarkus dumasar kana Vert.x sareng Netty, kalayan sajumlah kerangka réaktif sareng ekstensi di luhur pikeun ngabantosan pamekar. Quarkus dirancang pikeun ngawangun teu ukur microservices HTTP, tapi ogé arsitéktur acara-disetir. Kusabab sifat réaktifna, éta tiasa dianggo sacara efektif sareng sistem olahtalatah (Apache Kafka, AMQP, jsb.).

Trikna nyaéta kumaha ngagunakeun mesin réaktif anu sami pikeun kode imperatif sareng réaktif.

Kumaha Quarkus ngagabungkeun program imperatif sareng réaktif

Quarkus ngalakukeun ieu cemerlang. Pilihan antara imperatif sareng réaktif écés - nganggo kernel réaktif pikeun duanana. Naon bener mantuan kalawan gancang, kode non-blocking nu handles ampir sagalana nu ngaliwatan thread acara-loop, alias thread IO. Tapi upami anjeun gaduh REST klasik atanapi aplikasi sisi klien, Quarkus ngagaduhan modél program imperatif anu siap. Contona, rojongan HTTP di Quarkus dumasar kana pamakéan mesin non-blocking jeung réaktif (Eclipse Vert.x na Netty). Sadaya pamundut HTTP anu ditampi ku aplikasi anjeun mimiti dialirkeun kana loop acara (Io Thread) teras dikirim ka bagian kode anu ngatur pamundut. Gumantung kana tujuan, kodeu manajemén pamundut bisa disebut dina thread misah (nu disebut thread worker, dipaké dina kasus servlets na Jax-RS) atawa ngagunakeun sumber I / O thread (jalur réaktif).

Kumaha Quarkus ngagabungkeun program imperatif sareng réaktif

Panyambung sistem olahtalatah ngagunakeun klien non-blocking ngajalankeun on luhureun mesin Vert.x. Ku alatan éta, anjeun tiasa sacara efektif ngirim, nampi sareng ngolah pesen tina sistem middleware olahtalatah.

loka Quarkus.io Ieu sababaraha tutorial anu saé pikeun ngabantosan anjeun ngamimitian sareng Quarkus:

Kami ogé parantos nyiptakeun tutorial hands-on online pikeun ngajarkeun anjeun sababaraha aspék program réaktif ngan ukur dina browser, teu aya IDE anu diperyogikeun, sareng teu aya komputer anu diperyogikeun. Anjeun tiasa mendakan palajaran ieu di dieu.

sumberdaya mangpaat

10 palajaran video ngeunaan Quarkus pikeun akrab sareng topik

Sabab nyebutkeun dina website Quarkus.io, quarkus - ieu Kubernetes-berorientasi tumpukan Java, tailored pikeun GraalVM na OpenJDK HotSpot sarta dirakit ti perpustakaan Java pangalusna sarta standar.

Pikeun ngabantosan anjeun ngartos topik, kami parantos milih 10 pidéo pidéo anu nyertakeun sagala rupa aspék Quarkus sareng conto panggunaanana:

1. Ngawanohkeun Quarkus: The Next Generation Java Framework pikeun Kubernetes

Ku Thomas Qvarnstrom jeung Jason Greene
Tujuan tina proyék Quarkus nya éta nyieun platform Java pikeun Kubernetes jeung lingkungan serverless, sarta ngagabungkeun model programming réaktif jeung imperatif kana lingkungan runtime tunggal ambéh pamekar flexibly bisa rupa-rupa pendekatan maranéhna nalika gawé bareng rupa-rupa arsitéktur aplikasi disebarkeun. Panggihan leuwih dina ceramah bubuka di handap.

2. Quarkus: Superfast Subatomic Java

Ku: Burr Sutter
Tutorial pidéo ti DevNation Live ieu nunjukkeun kumaha ngagunakeun Quarkus pikeun ngaoptimalkeun aplikasi Java perusahaan, API, layanan mikro, sareng fungsi tanpa server dina lingkungan Kubernetes/OpenShift, ngajantenkeun aranjeunna langkung alit, langkung gancang, sareng langkung skalabel.

3. Quarkus sareng GraalVM: ngagancangkeun Hibernasi ka kecepatan super sareng nyusut kana ukuran subatomik

Panulis: Sanne Grinovo
Tina presentasi anjeun bakal diajar kumaha Quarkus janten, kumaha jalanna, sareng kumaha ngamungkinkeun anjeun ngadamel perpustakaan kompleks, sapertos Hibernate ORM, cocog sareng gambar GraalVM asli.

4. Diajar ngamekarkeun aplikasi serverless

Panulis: Martin Luther
Video di handap ieu nunjukkeun kumaha cara nyiptakeun aplikasi Java anu sederhana nganggo Quarkus sareng nyebarkeunana salaku aplikasi tanpa server dina Knative.

5. Quarkus: Wilujeng coding

Panulis: Edson Yanaga
Pitunjuk pidéo pikeun nyiptakeun proyék Quarkus anu munggaran anjeun, ngamungkinkeun anjeun ngartos naha Quarkus kéngingkeun pangembang.

6. Java jeung peti - naon kahareup maranéhna babarengan

Dipasang ku Mark Little
Presentasi ieu ngenalkeun sajarah Jawa sareng ngajelaskeun kunaon Quarkus mangrupikeun masa depan Jawa.

7. Quarkus: Superfast Subatomic Java

Panulis: Dimitris Andreadis
Tinjauan kaunggulan Quarkus anu nampi pangakuan ti pamekar: kesederhanaan, kecepatan ultra luhur, perpustakaan sareng standar pangsaéna.

8. Quarkus jeung sistem rokét subatomik

Panulis: Clement Escoffier
Ngaliwatan integrasi jeung GraalVM, Quarkus nyadiakeun pangalaman ngembangkeun ultra-gancang jeung lingkungan runtime subatomik. Panulis nyarioskeun ngeunaan sisi réaktif Quarkus sareng cara ngagunakeunana pikeun ngawangun aplikasi réaktif sareng streaming.

9. Quarkus sarta ngembangkeun aplikasi gancang di Eclipse MicroProfile

Panulis: John Clingan
Ku ngagabungkeun Eclipse MicroProfile sareng Quarkus, pamekar tiasa nyiptakeun aplikasi MicroProfile wadahna anu lengkep anu diluncurkeun dina puluhan milidetik. Pidéo éta langkung rinci ngeunaan kumaha kode aplikasi MicroProfile wadahna pikeun panyebaran dina platform Kubernetes.

10. Java, "Turbo" Vérsi

Panulis: Marcus Biel
Panulis nunjukkeun kumaha ngagunakeun Quarkus pikeun nyiptakeun wadah Java super-leutik, super-gancang anu ngamungkinkeun terobosan nyata, khususna dina lingkungan tanpa server.



sumber: www.habr.com

Tambahkeun komentar