Чӣ тавр Quarkus барномасозии императивӣ ва реактивиро муттаҳид мекунад

Имсол мо нақша дорем, ки мавзӯъҳои контейнериро ба таври ҷиддӣ таҳия кунем, Cloud-Native Java и Кубернитель. Идомаи мантиқии ин мавзӯъҳо аллакай ҳикоя дар бораи чаҳорчӯбаи Кваркус хоҳад буд баррасӣ дар Хабре. Мақолаи имрӯза камтар дар бораи тарҳрезии "субатомӣ Java superfast" ва бештар дар бораи ваъдае, ки Quarkus ба Enterprise медиҳад.

Чӣ тавр Quarkus барномасозии императивӣ ва реактивиро муттаҳид мекунад

Java ва JVM то ҳол бениҳоят маъмуланд, аммо ҳангоми кор бо технологияҳои бе сервер ва хидматҳои микросерверҳои абрӣ, Java ва дигар забонҳои JVM камтар ва камтар истифода мешаванд, зеро онҳо фазои хотираи аз ҳад зиёдро ишғол мекунанд ва боркунии онҳо хеле суст аст. барои истифода бо зарфҳои кӯтоҳмуддат чандон мувофиқ нест. Хушбахтона, ин вазъият ҳоло ба шарофати Кваркус тағир меёбад.

Superfast субатомӣ Java ба сатҳи нав расид!

42 релиз, 8 моҳи кори ҷомеа ва 177 таҳиягарони аҷиб - натиҷаи ин ҳама дар моҳи ноябри соли 2019 бароварда шуд. Кваркус 1.0, релиз, ки марҳалаи муҳими рушди лоиҳаро нишон медиҳад ва бисёр хусусиятҳо ва қобилиятҳои олиро пешниҳод мекунад (шумо метавонед дар бораи онҳо бештар дар эълон).

Имрӯз мо ба шумо нишон медиҳем, ки чӣ тавр Quarkus моделҳои барномасозии императивӣ ва реактивиро ба як ядрои реактивӣ муттаҳид мекунад. Мо аз таърихи мухтасар оғоз мекунем ва сипас муфассал дар бораи он ки дуализми реактивии Кваркус чист ва чӣ гуна аст. Java-Таҳиягарон метавонанд аз ин имтиёзҳо истифода баранд.

Хидматҳои хурд, меъмории ба рӯйдодҳо асосёфта и сервер нест-функсияхо — хамаи ин, чунон ки мегуянд, имруз дар авч аст. Ба наздикӣ, эҷоди меъмории ба абр нигаронидашуда хеле осонтар ва дастрастар шудааст, аммо мушкилот боқӣ мондаанд - махсусан барои таҳиягарони Java. Масалан, дар мавриди функсияҳои бе сервер ва хидматрасонии хурд, зарурати фаврӣ кам кардани вақти оғозёбӣ, кам кардани истеъмоли хотира ва то ҳол таҳияи онҳоро қулай ва лаззатбахш кардан лозим аст. Java дар солҳои охир як қатор такмилҳоро ба даст овард, ба монанди беҳтар кардани функсияҳои эргономикӣ барои контейнерҳо ва ғайра. Бо вуҷуди ин, гирифтани Java дар як контейнер дуруст кор кардан ҳоло ҳам душвор аст. Ҳамин тавр, мо аз баррасии баъзе мураккабиҳои хоси Java оғоз мекунем, ки махсусан ҳангоми таҳияи барномаҳои Java, ки ба контейнер нигаронида шудаанд, шадидтаранд.

Аввалан, биёед ба таърих назар андозем.

Чӣ тавр Quarkus барномасозии императивӣ ва реактивиро муттаҳид мекунад

Ҷараёнҳо ва контейнерҳо

Аз версияи 8u131 сар карда, Java бо сабаби такмил додани функсияҳои эргономика контейнерҳоро кам ё камтар дастгирӣ кард. Махсусан, JVM ҳоло медонад, ки дар чанд ядрои протсессори он кор мекунад ва мувофиқан метавонад ҳавзҳои риштаҳоро танзим кунад - маъмулан ҳавзҳои мушак/пайвастшавӣ -. Албатта, ин олиҷаноб аст, аммо биёед бигӯем, ки мо як барномаи анъанавии веб дорем, ки серверҳои HTTP-ро истифода мебарад ва дар Tomcat, Jetty ва ғайра кор мекунад. Дар натиҷа, ин барнома ба ҳар як дархост як риштаи алоҳида медиҳад ва ба он имкон медиҳад, ки ин риштаро ҳангоми интизории амалиёти воридотӣ / баромад, масалан, ҳангоми дастрасӣ ба пойгоҳи додаҳо, файлҳо ё хидматҳои дигар банд кунад. Яъне, андозаи чунин барнома на аз шумораи ядроҳои мавҷуда, балки аз шумораи дархостҳои ҳамзамон вобаста аст. Илова бар ин, ин маънои онро дорад, ки квотаҳо ё маҳдудиятҳо дар Кубернетес оид ба шумораи ядроҳо дар ин ҷо кӯмаки зиёд нахоҳанд дошт ва масъала дар ниҳоят бо фишор ба охир мерасад.

хастагии хотира

Риштаҳо хотира мебошанд. Ва маҳдудиятҳои хотираи дохиликонтейнер ҳеҷ гоҳ панацея нестанд. Танҳо ба афзоиши шумораи замимаҳо ва риштаҳо шурӯъ кунед ва дер ё зуд шумо ба афзоиши шадиди басомади гузариш ва дар натиҷа таназзули кор дучор хоҳед шуд. Инчунин, агар барномаи шумо чаҳорчӯбаҳои анъанавии микросервисро истифода барад, ё ба пойгоҳи додаҳо пайваст шавад ё кэшро истифода кунад ё ба таври дигар хотираро истифода барад, ба шумо бешубҳа асбобе лозим аст, ки ба шумо имкон медиҳад дохили JVM-ро бубинед ва бубинед, ки он чӣ гуна хотираро бидуни куштани онро идора мекунад. Худи JVM (масалан, XX:+UseCGroupMemoryLimitForHeap). Ва гарчанде, ки аз Java 9, JVM қабули гурӯҳҳо ва мутобиқ шуданро омӯхтааст, захира кардан ва идоракунии хотира як масъалаи хеле мураккаб боқӣ мемонад.

Квотаҳо ва маҳдудиятҳо

Java 11 дастгирии квотаҳои CPU-ро ҷорӣ кард (ба монанди PreferContainerQuotaForCPUCount). Kubernetes инчунин барои маҳдудиятҳо ва квотаҳо дастгирӣ пешниҳод мекунад. Бале, ин ҳама маъно дорад, аммо агар барнома боз аз квотаи ҷудошуда зиёд бошад, мо боз ба андозае хотима меёбем - ба монанди барномаҳои анъанавии Java - аз рӯи шумораи ядроҳо ва бо ҷудо кардани риштаи алоҳида барои ҳар як муайян карда мешавад. талаб кунад, пас дар хамаи ин кам маъно дорад.
Илова бар ин, агар шумо квотаҳо ва маҳдудиятҳо ё функсияҳои васеъ кардани платформаи Kubernetes-ро истифода баред, мушкилот низ худ аз худ ҳал намешавад. Мо танҳо барои ҳалли мушкилоти аслӣ бештар захираҳоро сарф мекунем ё дар ниҳоят сарфи зиёдатӣ мекунем. Ва агар ин як системаи сербориш дар абри ҷамъиятӣ бошад, мо қариб албатта захираҳои бештареро, ки ба мо лозим аст, истифода мебарем.

Ва бо ин ҳама чӣ бояд кард?

Оддӣ карда гӯем, китобхонаҳо ва чаҳорчӯбаҳои асинхронӣ ва ғайрибандӣ истифода баред, ба монанди Netty, Vert.x ё Акка. Онҳо аз сабаби табиати реактивии худ барои кор дар контейнерҳо хеле мувофиқанд. Бо шарофати баста нашудани I/O, як ришта метавонад дархостҳои сершуморро дар як вақт коркард кунад. Ҳангоме ки як дархост интизори натиҷаҳои воридот / баромад аст, коркарди риштаи он озод карда мешавад ва аз ҷониби дархости дигар гирифта мешавад. Ва ҳангоме ки натиҷаҳои I/O ниҳоят меоянд, коркарди дархости аввал идома меёбад. Бо коркарди омехтаи дархостҳо дар як ришта, шумо метавонед шумораи умумии риштаҳоро кам кунед ва истеъмоли захираҳоро барои коркарди дархостҳо кам кунед.

Ҳангоми баста нашудани I/O, шумораи ядроҳо як параметри калидӣ мегардад, зеро он шумораи риштаҳои I/O-ро, ки дар мувозӣ иҷро карда мешаванд, муайян мекунад. Вақте ки дуруст истифода мешавад, ин ба шумо имкон медиҳад, ки сарбориро байни ядроҳо самаранок тақсим кунед ва сарбории кории зиёдтарро бо захираҳои камтар идора кунед.

Чӣ тавр, ин ҳама аст?

Не, чизи дигаре ҳаст. Барномасозии реактивӣ барои беҳтар истифода бурдани захираҳо кӯмак мекунад, аммо бо нархи гарон низ меояд. Аз ҷумла, код бояд мувофиқи принсипҳои баста нашудан аз нав навишта шавад ва аз бастани риштаҳои I/O пешгирӣ карда шавад. Ва ин як модели комилан дигари таҳия ва иҷро аст. Ва гарчанде ки дар ин чо бисьёр китобхонахои фоиданок мавчуданд, дар тафаккури мукаррарй дигаргунии куллй ба амал меояд.

Аввалан, шумо бояд чӣ гуна навиштани кодеро омӯзед, ки асинхронӣ кор мекунад. Пас аз он ки шумо ба истифодабарии воридот ва баромади манънашаванда шурӯъ мекунед, шумо бояд ба таври возеҳ муайян кунед, ки ҳангоми гирифтани посух ба дархост чӣ рӯй медиҳад. Танҳо бастан ва интизорӣ дигар кор нахоҳад кард. Ба ҷои ин, шумо метавонед зангҳои бозгаштро гузаронед, барномасозии реактивӣ ё идомаро истифода баред. Аммо ин ҳама нест: барои истифодаи I/O, ба шумо ҳам серверҳои манънашаванда ва ҳам муштариён лозиманд, беҳтараш дар ҳама ҷо. Дар мавриди HTTP, ҳама чиз оддӣ аст, аммо инчунин пойгоҳи додаҳо, системаҳои файлӣ ва ғайра мавҷуданд.

Ва гарчанде ки реактивии пурраи ниҳоӣ самаранокиро ба ҳадди аксар мерасонад, дар амал чунин тағирот метавонад ба меъда душвор бошад. Аз ин рӯ, қобилияти якҷоя кардани кодҳои реактивӣ ва императивӣ шарти ҳатмӣ мегардад, то:

  1. Истифодаи самараноки захираҳо дар минтақаҳои пурборкунандаи системаи нармафзор;
  2. Дар қисмҳои боқимондаи он рамзи услуби соддатарро истифода баред.

Муаррифии Кваркус

Дарвоқеъ, ин моҳияти Quarkus аст - якҷоя кардани моделҳои реактивӣ ва императивӣ дар як муҳити ягонаи корӣ.

Quarkus ба Vert.x ва Netty асос ёфтааст, ки дорои як қатор чаҳорчӯбаҳои реактивӣ ва васеъшавӣ дар боло барои кӯмак ба таҳиякунанда мебошад. Quarkus барои сохтани на танҳо микросервисҳои HTTP, балки меъмории ба рӯйдодҳо асосёфта пешбинӣ шудааст. Аз сабаби табиати реактивии худ, он бо системаҳои паёмнависӣ (Apache Kafka, AMQP ва ғайра) хеле самаранок кор мекунад.

Ҳилла дар он аст, ки чӣ гуна як муҳаррики реактивиро барои рамзи императивӣ ва реактивӣ истифода бурдан мумкин аст.

Чӣ тавр Quarkus барномасозии императивӣ ва реактивиро муттаҳид мекунад

Кваркус ин корро ба таври олиҷаноб мекунад. Интихоби байни императивӣ ва реактивӣ аён аст - барои ҳарду ядрои реактивиро истифода баред. Он чизе ки он воқеан ба он кӯмак мекунад, рамзи зуд ва бебанд аст, ки қариб ҳама чизеро, ки аз риштаи ҳалқаи ҳодиса мегузарад, яъне риштаи IO идора мекунад. Аммо агар шумо барномаҳои классикии REST ё муштарӣ дошта бошед, Quarkus дорои модели императивии барномасозӣ мебошад. Масалан, дастгирии HTTP дар Quarkus ба истифодаи муҳаррики бастанашаванда ва реактивӣ (Eclipse Vert.x ва Netty) асос ёфтааст. Ҳама дархостҳои HTTP, ки аз ҷониби барномаи шумо гирифта шудаанд, аввал аз ҳалқаи рӯйдодҳо (IO Thread) гузаронида мешаванд ва сипас ба қисми код, ки дархостҳоро идора мекунад, фиристода мешаванд. Вобаста аз макони таъинот, рамзи идоракунии дархостро метавон дар дохили як риштаи алоҳида даъват кард (ба истилоҳ риштаи коргарӣ, ки дар мавриди сервлетҳо ва Jax-RS истифода мешавад) ё риштаи I/O-ро (масири реактивӣ) истифода барад.

Чӣ тавр Quarkus барномасозии императивӣ ва реактивиро муттаҳид мекунад

Пайвасткунакҳои системаи паёмнависӣ муштариёнеро, ки дар болои муҳаррики Vert.x кор мекунанд, истифода мебаранд. Аз ин рӯ, шумо метавонед паёмҳоро аз системаҳои миёнаравии паёмнависӣ самаранок ирсол кунед, қабул кунед ва коркард кунед.

Дар сомона Quarkus.io Инҳоянд чанд дарси хубе, ки ба шумо дар оғози кор бо Quarkus кӯмак мекунанд:

Мо инчунин дарсҳои амалии онлайнро таҳия кардем, то ба шумо ҷанбаҳои гуногуни барномасозии реактивиро танҳо дар браузер омӯзанд, на IDE ва на компютер лозим. Шумо метавонед ин дарсҳоро пайдо кунед дар ин ҷо.

Сарчашмаҳои фоиданок

10 дарси видеоӣ дар бораи Кваркус барои шиносоӣ бо мавзӯъ

Тавре ки дар сайт мегӯянд Quarkus.io, Кваркус - аст, Кубернитель-Стеки Java нигаронидашуда, ки барои GraalVM ва OpenJDK HotSpot таҳия шудааст ва аз беҳтарин китобхонаҳо ва стандартҳои Java ҷамъ оварда шудааст.

Барои фаҳмидани мавзӯъ, мо 10 видеои видеоиро интихоб кардем, ки ҷанбаҳои гуногуни Кваркус ва мисолҳои истифодаи онро дар бар мегиранд:

1. Муаррифии Quarkus: Чаҳорчӯбаи насли ояндаи Java барои Kubernetes

Томас Кварнстром ва Ҷейсон Грин
Ҳадафи лоиҳаи Quarkus эҷоди платформаи Java барои Kubernetes ва муҳитҳои бе сервер ва муттаҳид кардани моделҳои барномасозии реактивӣ ва императивӣ дар як муҳити ягонаи корӣ мебошад, то таҳиягарон ҳангоми кор бо доираи васеи меъмории паҳншудаи барномаҳо муносибати худро чандир тағйир диҳанд. Маълумоти бештарро дар лексияи муқаддимавии зер пайдо кунед.

2. Кваркус: Superfast Subatomic Java

Муаллиф: Бурр Саттер
Ин дастури видеоӣ аз DevNation Live нишон медиҳад, ки чӣ тавр истифода бурдани Quarkus барои оптимизатсияи барномаҳои Java, API, микросервисҳо ва функсияҳои бе сервер дар муҳити Kubernetes/OpenShift, онҳоро хеле хурдтар, тезтар ва миқёспазир мегардонад.

3. Quarkus ва GraalVM: суръат бахшидан ба Hibernate ба суръати олӣ ва кам кардани он ба андозаи субатомӣ

Муаллиф: Санне Гриноверо
Аз презентатсия шумо хоҳед фаҳмид, ки Quarkus чӣ гуна ба вуҷуд омадааст, он чӣ гуна кор мекунад ва чӣ гуна он ба шумо имкон медиҳад, ки китобхонаҳои мураккабро ба мисли Hibernate ORM бо тасвирҳои аслии GraalVM созед.

4. Таҳияи замимаҳои бе серверро омӯзед

Муаллиф: Мартин Лютер
Видеои дар поён овардашуда нишон медиҳад, ки чӣ тавр сохтани як барномаи оддии Java бо истифода аз Quarkus ва ҷойгиркунии он ҳамчун як барномаи бе сервер дар Knative.

5. Кваркус: Рамзгузорӣ карданро хурсанд кунед

Муаллиф: Эдсон Янага
Дастури видеоӣ барои сохтани аввалин лоиҳаи Quarkus, ки ба шумо имкон медиҳад фаҳмед, ки чаро Quarkus дили таҳиягаронро ба даст меорад.

6. Java ва контейнерҳо - ояндаи онҳо якҷоя чӣ хоҳад буд

Интишори Марк Литл
Ин презентатсия таърихи Java-ро муаррифӣ мекунад ва мефаҳмонад, ки чаро Quarkus ояндаи Java аст.

7. Кваркус: Superfast Subatomic Java

Муаллиф: Димитрис Андреадис
Шарҳи бартариҳои Quarkus, ки аз ҷониби таҳиягарон эътироф шудаанд: соддагӣ, суръати ултра баланд, беҳтарин китобхонаҳо ва стандартҳо.

8. Системахои ракетахои кваркусй ва субатомй

Муаллиф: Клемент Эскоффиер
Тавассути ҳамгироӣ бо GraalVM, Quarkus таҷрибаи хеле босуръати рушд ва муҳити субатомии корро таъмин мекунад. Муаллиф дар бораи паҳлӯи реактивии Кваркус ва чӣ гуна истифода бурдани он барои сохтани барномаҳои реактивӣ ва ҷараёнӣ сӯҳбат мекунад.

9. Кваркус ва рушди босуръати барномаҳо дар Eclipse MicroProfile

Муаллиф: Ҷон Клининг
Бо омезиши Eclipse MicroProfile ва Quarkus, таҳиягарон метавонанд барномаҳои мукаммали контейнерии MicroProfile эҷод кунанд, ки дар даҳҳо миллисонияҳо оғоз мешаванд. Видео дар бораи чӣ гуна рамзгузорӣ кардани барномаи контейнерии MicroProfile барои ҷойгиркунӣ дар платформаи Kubernetes муфассал шарҳ дода шудааст.

10. Java, версияи "Turbo"

Муаллиф: Маркус Бил
Муаллиф нишон медиҳад, ки чӣ тавр истифода бурдани Quarkus барои сохтани контейнерҳои хеле хурд ва хеле тези Java, ки ба пешрафтҳои воқеӣ имкон медиҳанд, махсусан дар муҳити бе сервер.



Манбаъ: will.com

Илова Эзоҳ