Quarkus-ը գերձայնային ենթաատոմային Java է: Շրջանակի համառոտ ակնարկ

Quarkus-ը գերձայնային ենթաատոմային Java է: Շրջանակի համառոտ ակնարկ

Ներածություն

Մարտի XNUMX-ին RedHat (շուտով IBM) ներկայացրել նոր շրջանակ - Քվարկուս. Ըստ մշակողների, այս շրջանակը հիմնված է GraalVM-ի և OpenJDK HotSpot-ի վրա և նախատեսված է Kubernetes-ի համար։ Quarkus ստեկը ներառում է՝ JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus և այլն:

Նպատակն է Java-ն դարձնել առաջատար հարթակ Kubernetes-ի տեղակայման և առանց սերվերի հավելվածների մշակման համար՝ ծրագրավորողներին տրամադրելով զարգացման միասնական մոտեցում ինչպես ռեակտիվ, այնպես էլ հրամայական ոճերով:

Եթե ​​նայեք սա է շրջանակների դասակարգում, ապա Quarkus-ը գտնվում է ինչ-որ տեղ «Aggregators/Code Generators» և «High Level Fullstack Frameworks» միջև։ Սա արդեն ավելին է, քան ագրեգատորը, բայց նույնիսկ ամբողջական փաթեթ չի հասնում, քանի որ... հարմարեցված է backend-ի զարգացման համար:

Խոստացվում է հավելվածի գործարկման շատ բարձր արագություն և հիշողության ցածր սպառում: Ահա մշակողի կայքի տվյալները.

Ժամանակը սկզբից մինչև առաջին պատասխանը (ներ).

Տեսիլ
ՀԱՆԳՍՏՅԱՆ
ՀԱՆԳՍՏԻ + JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Ավանդական Cloud Native Stack*
4.3
9.5

Հիշողության սպառում (Mb):

Տեսիլ
ՀԱՆԳՍՏՅԱՆ
ՀԱՆԳՍՏԻ + JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Ավանդական Cloud Native Stack*
140
218

Տպավորիչ է, այնպես չէ՞։

*Ես որևէ տեղեկություն չգտա այս տեխնոլոգիայի փաթեթի մասին, մենք կարող ենք ենթադրել, որ սա ինչ-որ Spring Boot-ն է՝ մարմնի լրացուցիչ հանդերձանքով:.

Բարեւ աշխարհ!

Quarkus-ում գրված ամենապարզ հավելվածը այսպիսի տեսք կունենա.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Դա բառացիորեն մեկ դաս է և բավական է: Դուք կարող եք գործարկել հավելվածը, օգտագործելով Maven-ը զարգացման ռեժիմում.

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

Սովորական հավելվածից տարբերությունն այն է, որ Application դաս չկա: Quarkus-ն աջակցում է տաք վերաբեռնմանը, այնպես որ կարող եք փոխել ձեր հավելվածն առանց այն վերագործարկելու՝ զարգացումն ավելի արագ դարձնելով:

Ի՞նչ է հաջորդը: Դուք կարող եք ծառայություն ավելացնել կարգավորիչին՝ օգտագործելով ծանոթագրություն Ներարկել. Ծառայության կոդը:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hello " + name + "!";
   }
}

Վերահսկիչ:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hello developer!

Նշենք, որ Quarkus-ը օգտագործում է ստանդարտ ծանոթագրություններ ծանոթ շրջանակներից՝ CDI և JAX-RS: Նոր բան սովորելու կարիք չկա, եթե նախկինում, իհարկե, աշխատել եք CDI-ի և JAX-RS-ի հետ։

Տվյալների բազայի հետ աշխատելը

Օգտագործվում են Ձմեռային ռեժիմ և ստանդարտ JPA ծանոթագրություններ սուբյեկտների համար: Ինչպես REST կարգավարների դեպքում, դուք պետք է գրեք նվազագույն կոդ: Բավական է անսամբլի ֆայլում նշել կախվածությունները, ավելացնել անոտացիաներ @Entity և կարգավորել տվյալների աղբյուրը application.properties-ում:

Բոլորը. SesionFactory, persistence.xml կամ այլ սպասարկման ֆայլեր չկան: Մենք գրում ենք միայն այն կոդը, որն անհրաժեշտ է։ Այնուամենայնիվ, անհրաժեշտության դեպքում կարող եք ստեղծել persistence.xml ֆայլ և ավելի նուրբ կարգավորել ORM շերտը:

Quarkus-ն աջակցում է սուբյեկտների քեշավորմանը, մեկից շատ հարաբերությունների հավաքածուներ և հարցումներ: Առաջին հայացքից հիանալի է թվում, բայց այդպես է տեղական caching, մեկ Kubernetes հանգույցի համար: Նրանք. Տարբեր հանգույցների քեշերը միմյանց հետ համաժամանակացված չեն: Հուսով եմ, որ սա ժամանակավոր է:

Կոդի ասինխրոն կատարում

Ինչպես նշվեց վերևում, Quarkus-ը նաև աջակցում է ռեակտիվ ծրագրավորման ոճին: Նախորդ դիմումի ծածկագիրը կարող է գրվել այլ ձևով:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage<String> greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hello " + name + "!";
       });
   }
}

Ծառայությանը կարող է փոխանցվել նաև ասինխրոն կոդը, արդյունքը կլինի նույնը։

Փորձարկում

Quarkus հավելվածների թեստերը կարող են գրվել JUnit4 կամ JUnit5: Ստորև բերված է վերջնական կետի փորձարկման օրինակ, այն գրված է RestAssured-ի միջոցով, բայց կարող է օգտագործվել մեկ այլ շրջանակ.

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hello " + uuid + "!"));
   }
}

@QuarkusTest անոտացիան ձեզ հրահանգում է գործարկել հավելվածը նախքան թեստերը: Մնացած ծածկագիրը ծանոթ է բոլոր մշակողներին:

Պլատֆորմին հատուկ հավելված

Քանի որ Quarkus-ը սերտորեն ինտեգրված է GraalVM-ի հետ, իհարկե, հնարավոր է ստեղծել հարթակին հատուկ կոդ: Դա անելու համար դուք պետք է տեղադրեք GraalVM և նշեք GRAALVM_HOME միջավայրի փոփոխականը: Հետագա գրանցեք պրոֆիլ հավաքման համար և նշեք այն հավելվածը կառուցելիս.

mvn package -Pnative

Հետաքրքիր է, որ ստեղծված հավելվածը կարող է փորձարկվել: Եվ սա կարևոր է, քանի որ հայրենի կոդի կատարումը կարող է տարբերվել JVM-ում կատարումից: @SubstrateTest անոտացիան գործարկում է հարթակին հատուկ հավելվածի կոդը: Գոյություն ունեցող թեստային ծածկագրի վերօգտագործումը կարող է իրականացվել ժառանգության միջոցով, արդյունքում՝ հարթակից կախված հավելվածի փորձարկման կոդը այսպիսի տեսք կունենա.

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Ստեղծված պատկերը կարող է փաթեթավորվել Docker-ում և գործարկվել Kubernetes-ում կամ OpenShift-ում, մանրամասն նկարագրված հրահանգներ.

Инструментарий

Quarkus շրջանակը կարող է օգտագործվել Maven-ի և Gradle-ի հետ: Maven-ը լիովին աջակցվում է, ի տարբերություն Gradle-ի: Ցավոք, այս պահին Gradle-ը չի աջակցում դատարկ նախագծի ստեղծմանը, կայքում կա մանրամասն տեղեկատվություն դասագիրք.

Ընդլայնումներ

Quarkus-ը ընդարձակվող շրջանակ է: Ներկայումս կա պատվեր 40 ընդարձակում, որոնք ավելացնում են տարբեր գործառույթներ՝ աջակցությունից Spring DI կոնտեյներ и Apache Camel նախքան մուտքագրելը և գործարկվող ծառայությունների չափումները հրապարակելը: Եվ արդեն կա ընդլայնում, որն աջակցում է Կոտլինում հավելվածներ գրելուն, բացի Java-ից:

Ամփոփում

Իմ կարծիքով Quarkus-ը բավականին համահունչ է ժամանակի տենդենցներին։ Backend կոդի մշակումն ավելի ու ավելի հեշտ է դառնում, և այս շրջանակն էլ ավելի պարզեցնում և արագացնում է ծառայությունների զարգացումը` ավելացնելով Docker-ի և Kubernetes-ի համար տեղական աջակցություն: Հսկայական պլյուսը GraalVM-ի ներկառուցված աջակցությունն է և պլատֆորմից կախված պատկերների ստեղծումը, որը թույլ է տալիս ծառայություններին իսկապես արագ սկսել և քիչ տեղ գրավել հիշողության մեջ: Եվ սա շատ կարևոր է միկրոծառայությունների և առանց սերվերի ճարտարապետության հանդեպ զանգվածային կիրքի մեր ժամանակներում:

Պաշտոնական կայք - quarkus.io. Արագ մեկնարկի նախագծերի օրինակներ արդեն հասանելի են GitHub.

Source: www.habr.com

Добавить комментарий