Kepiye Quarkus nggabungake pemrograman imperatif lan reaktif

Taun iki kita rencana ngembangake tema kontainer kanthi serius, Cloud-Native Java ΠΈ Kubernetes. Lanjutan logis saka topik kasebut bakal dadi crita babagan kerangka Quarkus, wis dianggep ing HabrΓ©. Artikel dina iki kurang babagan desain "Subatomic superfast Java" lan liyane babagan janji sing Quarkus nggawa Enterprise.

Kepiye Quarkus nggabungake pemrograman imperatif lan reaktif

Java lan JVM isih populer banget, nanging nalika nggarap teknologi tanpa server lan microservices cloud-native, Java lan basa JVM liyane kurang digunakake amarga njupuk akeh ruang memori lan alon banget kanggo mbukak. kurang cocok kanggo digunakake karo kontaner short-urip. Untunge, kahanan iki saiki wiwit owah amarga Quarkus.

Jawa subatomik super cepet wis tekan tingkat anyar!

42 rilis, 8 wulan kerja komunitas lan 177 pangembang sing luar biasa - asil kabeh yaiku rilis ing November 2019 Quarkus 1.0, rilis sing menehi tandha tonggak penting ing pangembangan proyek lan nawakake akeh fitur lan kemampuan sing apik (sampeyan bisa maca liyane babagan iki ing pengumuman).

Dina iki kita bakal nuduhake sampeyan carane Quarkus nggabungake model pemrograman imperatif lan reaktif dadi inti reaktif siji. Kita bakal miwiti kanthi riwayat ringkes banjur rinci babagan apa dualisme inti reaktif Quarkus lan kepiye Jawa- Pangembang bisa njupuk kauntungan saka keuntungan iki.

Layanan mikro, arsitektur mimpin acara ΠΈ serverless-fungsi - kabeh iki, lagi ngomong, ing munggah dina. Bubar, nggawe arsitektur cloud-centric dadi luwih gampang lan luwih gampang diakses, nanging masalah tetep - utamane kanggo pangembang Java. Contone, ing kasus fungsi tanpa server lan layanan mikro, perlu banget kanggo nyuda wektu wiwitan, nyuda konsumsi memori, lan nggawe pangembangane luwih trep lan nyenengake. Jawa wis nggawe sawetara dandan ing taun-taun pungkasan, kayata fungsi ergonomis sing luwih apik kanggo wadhah lan sapiturute. Nanging, supaya Jawa bisa mlaku kanthi bener ing wadhah isih angel. Dadi, kita bakal miwiti kanthi ndeleng sawetara kerumitan sing ana ing Jawa, sing utamane akut nalika ngembangake aplikasi Java sing berorientasi kontainer.

Pisanan, ayo ndeleng sejarah.

Kepiye Quarkus nggabungake pemrograman imperatif lan reaktif

Aliran lan wadhah

Miwiti karo versi 8u131, Jawa wiwit luwih utawa kurang ndhukung wadhah amarga dandan ing fungsi ergonomics. Utamane, JVM saiki ngerti pira inti prosesor sing digunakake lan bisa ngatur blumbang benang-biasane garpu / gabung karo kolam renang. Mesthi, iki apik banget, nanging ayo kita duwe aplikasi web tradisional sing nggunakake servlet HTTP lan mlaku ing Tomcat, Jetty, lsp. AkibatΓ©, aplikasi iki bakal menehi saben panjalukan thread kapisah lan ngidini kanggo mblokir thread iki nalika nunggu operasi I / O, contone, nalika ngakses database, file utawa layanan liyane. Tegese, ukuran aplikasi kasebut ora gumantung saka jumlah intine sing kasedhiya, nanging jumlah panjaluk simultan. Kajaba iku, iki tegese kuota utawa watesan ing Kubernetes babagan jumlah intine ora bakal mbantu akeh ing kene, lan masalah kasebut pungkasane bakal mandheg.

Kesel memori

Utas minangka memori. Lan watesan memori intra-wadhah ora ateges panacea. Mung miwiti nambah jumlah aplikasi lan Utas, lan cepet utawa mengko sampeyan bakal nemoni Tambah kritis ing frekuensi ngoper lan, minangka asil, degradasi kinerja. Kajaba iku, yen aplikasi sampeyan nggunakake kerangka microservice tradisional, utawa nyambung menyang database, utawa nggunakake cache, utawa nggunakake memori, sampeyan mesthi mbutuhake alat sing ngidini sampeyan ndeleng ing JVM lan ndeleng carane ngatur memori tanpa mateni. JVM dhewe (contone, XX: + UseCGroupMemoryLimitForHeap). Lan sanajan, wiwit Jawa 9, JVM wis sinau kanggo nampa cgroups lan adaptasi, cadangan lan ngatur memori tetep dadi masalah sing rada rumit.

Kuota lan watesan

Java 11 ngenalake dhukungan kanggo kuota CPU (kaya PreferContainerQuotaForCPUCount). Kubernetes uga nawakake dhukungan kanggo watesan lan kuota. Ya, iki kabeh masuk akal, nanging yen aplikasi maneh ngluwihi kuota sing diparengake, kita bakal entuk ukuran maneh - kaya kasus aplikasi Jawa tradisional - ditemtokake dening jumlah inti lan alokasi benang sing kapisah kanggo saben. request, banjur ana sethitik pangertèn ing kabeh iki.
Kajaba iku, yen sampeyan nggunakake kuota lan watesan utawa fungsi skala-metu saka platform ndasari Kubernetes, masalah uga ora ngatasi dhewe. Kita mung mbuwang luwih akeh sumber daya kanggo ngrampungake masalah asli utawa mbuwang overspending. Lan yen iku sistem dhuwur-munggah ing maya umum umum, kita meh mesthi mungkasi munggah nggunakake sumber daya luwih saka kita pancene perlu.

Lan apa sing kudu dilakoni karo kabeh iki?

Cukup, gunakake perpustakaan lan kerangka I/O sing ora sinkron lan ora mblokir kaya Netty, Vert.x utawa Akka. Dheweke luwih cocog kanggo nggarap kontainer amarga sifate reaktif. Thanks kanggo I/O non-blocking, thread sing padha bisa ngolah pirang-pirang panjalukan bebarengan. Nalika siji panjalukan nunggu asil I/O, pangolahan thread bakal dirilis lan dijupuk saka panjalukan liyane. Lan nalika asil I / O pungkasanipun teka, pangolahan panjalukan pisanan terus. Kanthi proses interleaved panjalukan ing thread sing padha, sampeyan bisa nyuda jumlah utas lan nyuda konsumsi sumber daya kanggo panjalukan pangolahan.

Kanthi non-blocking I / O, nomer intine dadi parameter kunci amarga nemtokake nomer I / O Utas sing bisa kaleksanan ing podo karo. Yen digunakake kanthi bener, iki ngidini sampeyan nyebarake beban ing antarane inti lan nangani beban kerja sing luwih dhuwur kanthi sumber daya sing luwih sithik.

Carane, iku kabeh?

Ora, ana liyane. Pemrograman reaktif mbantu nggunakake sumber daya sing luwih apik, nanging uga ana regane. Utamane, kode kasebut kudu ditulis maneh miturut prinsip non-blocking lan supaya ora ngalangi benang I/O. Lan iki minangka model pangembangan lan eksekusi sing beda banget. Lan sanajan ana akeh perpustakaan sing migunani ing kene, nanging isih ana owah-owahan radikal ing cara mikir sing biasa.

Pisanan, sampeyan kudu sinau carane nulis kode sing ora sinkron. Sawise sampeyan miwiti nggunakake non-blocking I / O, sampeyan kudu tegas nemtokake apa sing kudu kelakon nalika respon kanggo panjalukan ditampa. Mung mblokir lan ngenteni ora bakal bisa maneh. Nanging, sampeyan bisa pass callbacks, nggunakake program reaktif utawa terus. Nanging ora kabeh: kanggo nggunakake I/O non-blocking, sampeyan kudu server lan klien non-blocking, luwih apik nang endi wae. Ing kasus HTTP, kabeh gampang, nanging ana uga database, sistem file, lan liya-liyane.

Lan sanajan total reaktivitas mburi-kanggo-mburi nggedhekake efisiensi, owah-owahan kasebut bisa angel ditindakake ing praktik. Mula, kemampuan kanggo nggabungake kode reaktif lan imperatif dadi prasyarat kanggo:

  1. Gunakake sumber daya kanthi efektif ing wilayah paling akeh ing sistem piranti lunak;
  2. Gunakake kode gaya sing luwih prasaja ing bagean sing isih ana.

Ngenalke Quarkus

Bener, iki minangka inti saka Quarkus - kanggo nggabungake model reaktif lan imperatif ing lingkungan runtime siji.

Quarkus adhedhasar Vert.x lan Netty, kanthi sawetara kerangka reaktif lan ekstensi ing ndhuwur kanggo mbantu pangembang. Quarkus dirancang kanggo mbangun ora mung layanan mikro HTTP, nanging uga arsitektur sing didorong acara. Amarga sifat reaktif, bisa digunakake kanthi efektif karo sistem olahpesen (Apache Kafka, AMQP, lsp.).

Trik yaiku carane nggunakake mesin reaktif sing padha kanggo kode imperatif lan reaktif.

Kepiye Quarkus nggabungake pemrograman imperatif lan reaktif

Quarkus nindakake iki kanthi apik. Pilihan antarane imperatif lan reaktif jelas - gunakake kernel reaktif kanggo loro kasebut. Apa pancene mbantu karo cepet, kode non-blocking sing nangani meh kabeh sing liwat thread acara-loop, alias thread IO. Nanging yen sampeyan duwe REST klasik utawa aplikasi sisih klien, Quarkus duwe model pemrograman sing penting. Contone, dhukungan HTTP ing Quarkus adhedhasar panggunaan mesin non-blocking lan reaktif (Eclipse Vert.x lan Netty). Kabeh panjalukan HTTP sing ditampa dening aplikasi sampeyan pisanan dilewati liwat loop acara (Io Thread) banjur dikirim menyang bagean kode sing ngatur panjaluk kasebut. Gumantung ing tujuan, kode manajemen panyuwunan bisa diarani ing thread sing kapisah (disebut thread pekerja, digunakake ing kasus servlets lan Jax-RS) utawa nggunakake benang I/O sumber (rute reaktif).

Kepiye Quarkus nggabungake pemrograman imperatif lan reaktif

Konektor sistem olahpesen nggunakake klien non-blocking sing mlaku ing ndhuwur mesin Vert.x. Mula, sampeyan bisa kanthi efektif ngirim, nampa lan ngolah pesen saka sistem middleware olahpesen.

Ing situs kasebut Quarkus.io Ing ngisor iki sawetara tutorial sing apik kanggo mbantu sampeyan miwiti Quarkus:

Kita uga wis nggawe tutorial tangan online kanggo mulang sampeyan macem-macem aspek program reaktif mung ing browser, ora dibutuhake IDE, lan ora mbutuhake komputer. Sampeyan bisa nemokake pawulangan iki kene.

Sumber daya migunani

10 piwulang video babagan Quarkus kanggo kenal karo topik kasebut

Nalika padha ngomong ing website Quarkus.io, quarkus - iki Kubernetes-oriented tumpukan Jawa, ngarang kanggo GraalVM lan OpenJDK HotSpot lan nglumpuk saka perpustakaan Jawa paling apik lan standar.

Kanggo mbantu sampeyan ngerti topik kasebut, kita wis milih 10 video tutorial sing nyakup macem-macem aspek Quarkus lan conto panggunaane:

1. Introducing Quarkus: The Next Generation Java Framework for Kubernetes

Miturut Thomas Qvarnstrom lan Jason Greene
Sasaran saka proyek Quarkus yaiku nggawe platform Java kanggo Kubernetes lan lingkungan tanpa server, lan nggabungake model pemrograman reaktif lan imperatif dadi lingkungan runtime siji supaya pangembang bisa ngowahi pendekatan kanthi fleksibel nalika nggarap macem-macem arsitektur aplikasi sing disebarake. Sinau luwih lengkap ing ceramah pambuka ing ngisor iki.

2. Quarkus: Superfast Subatomic Java

Miturut: Burr Sutter
Tutorial video saka DevNation Live iki nduduhake carane nggunakake Quarkus kanggo ngoptimalake aplikasi Java perusahaan, API, layanan mikro, lan fungsi tanpa server ing lingkungan Kubernetes/OpenShift, dadi luwih cilik, luwih cepet, lan bisa diukur.

3. Quarkus lan GraalVM: nyepetake Hibernate menyang kecepatan super lan nyusut dadi ukuran subatomik

Pengarang: Sanne Grinovo
Saka presentation sampeyan bakal sinau carane Quarkus teka, cara kerjane, lan carane ngidini sampeyan nggawe perpustakaan rumit, kayata Hibernate ORM, kompatibel karo gambar GraalVM asli.

4. Sinau ngembangake aplikasi tanpa server

Pengarang: Martin Luther
Video ing ngisor iki nuduhake carane nggawe aplikasi Java sing prasaja nggunakake Quarkus lan nyebarake minangka aplikasi tanpa server ing Knative.

5. Quarkus: Seneng coding

Pengarang: Edson Yanaga
Pandhuan video kanggo nggawe proyek Quarkus sing sepisanan, ngidini sampeyan ngerti kenapa Quarkus menangake ati para pangembang.

6. Jawa lan wadhah – apa masa depane bebarengan

Dikirim dening Mark Little
Presentasi iki ngenalake sejarah Jawa lan nerangake sebabe Quarkus minangka masa depan Jawa.

7. Quarkus: Superfast Subatomic Java

Penulis: Dimitris Andreadis
Ringkesan babagan kaluwihan Quarkus sing wis diakoni saka pangembang: kesederhanaan, kecepatan ultra-dhuwur, perpustakaan lan standar sing paling apik.

8. Sistem roket Quarkus lan subatom

Pengarang: Clement Escoffier
Liwat integrasi karo GraalVM, Quarkus nyedhiyakake pengalaman pangembangan ultra-cepet lan lingkungan runtime subatomik. Penulis ngomong babagan sisih reaktif Quarkus lan cara nggunakake aplikasi kasebut kanggo mbangun aplikasi reaktif lan streaming.

9. Quarkus lan pangembangan aplikasi kanthi cepet ing Eclipse MicroProfile

Penulis: John Clingan
Kanthi nggabungake Eclipse MicroProfile lan Quarkus, pangembang bisa nggawe aplikasi MicroProfile containerized lengkap sing diluncurake ing puluhan milidetik. Video kasebut rinci babagan cara nggawe kode aplikasi MicroProfile sing wis dikontainer kanggo penyebaran ing platform Kubernetes.

10. Jawa, "Turbo" versi

Pengarang: Marcus Biel
Penulis nuduhake carane nggunakake Quarkus kanggo nggawe wadhah Jawa super-cilik, super-cepet sing mbisakake terobosan nyata, utamanΓ© ing lingkungan serverless.



Source: www.habr.com

Add a comment