Quarkus — գերարագ ենթատոմային Java։ Նպատակի վերանայման շրջանակ

Quarkus — գերարագ ենթատոմային Java։ Նպատակի վերանայման շրջանակ

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

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

Ստեղծման նպատակն է դարձնել Java-ն प्रमुख հարթակ Kubernetes-ում տեղափոխման և serverless ծրագրերի մշակման համար, առաջարկելով մշակողներին միակողմանի մոտեցում նաև ռեակտիվ, ոչ թե հանրային ձևով զարգացնելու համար։

Եթե նայում եք այս շրջանակների դասակարգմանը, ապա Quarkus գտնվում է «Աggregators/Code Generators» և «High-level fullstack frameworks» միջև։ Դա արդեն ավելին է, քան агрегատ, բայց դեռ չի հասնում full-stack-ի, քանի որ կենտրոնացած է բախտանի մշակման վրա։

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

Սկիզբից մինչև առաջին պատասխան ժամանակ (վարկյաններ):

Կոնֆիգուրացիա
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditional Cloud Native Stack*
4.3
9.5

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

Կոնֆիգուրացիա
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditional Cloud Native Stack*
140
218

Հիանալի չէ, այդքան չէ?

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

Hello World!

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 աջակցում է տաք վերադարձին, որպեսզի կարողանաք փոփոխել հավելվածը առանց այն վերափոխելու, այդպիսով զարգացումը դառնում է ավելի արագ։

Ինչ է հաջորդը? Կարելի է ավելացնել ծառայություն վերահսկիչի միջոցով Annotացիայով Inject։ Ծառայության կոդը.

@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ում օգտագործվում են սովորական Annotացիաներ՝ հայտնի շրջանակներից — CDI և JAX-RS։ Ոչինչ նոր սովորել պետք չէ, եթե դուք աշխատել եք CDI և JAX-RS-ի հետ մինչև այս պահը, իհարկե։

Աշխատանք տվյալների բազայի հետ

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

Հիմնականում։ Ոչ մի sessionFactory, persistence.xml և այլ ծառայողական ֆայլեր։ Գրում ենք միայն այն կոդը, որն անհրաժեշտ է։ Բայց, եթե անհրաժեշտ լինի, կարող եք ստեղծել persistence.xml ֆայլ և ավելի նուրբ կարգավորել ORM շերտը։

Quarkus օժանդակում է էակների, մեկից բազմաթիվ հարաբերությունների հավաքածուների և հարցումների կշռման։ Առաջին հայացքից, դա թվացյալ լավ է, բայց սա տեղական կշռում, մեկ Kubernetes узла համար։ Այսինքն, տարբեր узлы-ների կշռումները միմյանց միջև չեն համակցվում։ Հուսով եմ, որ սա ժամանակավոր է։

Ասինքրոն կատարման կոդ

Ինչպես վերը նշվեց, Quarkus օժանդակություն է ցուցաբերում նաև ռեակտիվ ծրագրավորման ոճին։ Նախորդ ծրային կոդը կարելի է գրանցել այլ կերպ։

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

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

Ասինքրոն կոդը նույնպես կարելի է տեղափոխել ծառայություն, արդյունքը նույնը կլինի։

Թեստավորում

Quarkus ծրագրերի համար թեստերը կարելի է գրել JUnit4 կամ JUnit5 վրա։ Ներքևում ներկայացված է օրինակ թեստի համար endpoint, որը գրված է 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 անոտացումը համարում է ծրագիրը սկսել առաջ, քան թեստերը սկսել։ Կ demás անփոփոխ է բոլոր ծրագրավորողների համար։

Պլատֆորմի կախյալ ծրագիր

Քանի որ Quarkus խիստ ինտեգրված է GraalVM-ի հետ, կարող եք, իհարկե, ստեղծել պլատֆորմի կախյալ կոդ։ Bunun համար անհրաժեշտ է տեղադրել 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 մինչև սպասարկման և կատարողականների հրապարակում։ Եվ արդեն գոյություն ունի լրացում՝ Kotlin լեզվով ծրագրարմարանքի աջակցությամբ, Java-ի լրիվեցմանը։

Ավարտ

Ընդհանուր առմամբ, կարծում եմ, որ Quarkus-ի ժամանակակից միտումներն իրենց տեղում են։ Բեքենդ կոդի մշակումն ավելի ու ավելի հեշտ է դառնում, և այս ֆрейմվորը առավելապես հեշտացնում և արագացնում է ծառայությունների մշակումը՝ ավելացնելով "ծնողական" աջակցություն Docker և Kubernetes։ Մեծ առավելությունն է՝ ներմուծված GraalVM աջակցություն և պլատֆորմից կախված պատկերների ստեղծում, ինչը թույլ է տալիս իրականում արագ մեկնարկվող և կոմպակտ ծառայություններ ստեղծել։ Սա շատ կարևոր է մեր ժամանակներում, երբ զանգվածային հետաքրքրություն կա միկրոմասնակարգերի և serverless ճարտարապետության հանդեպ։

Մասնագիտական կայք — quarkus.io։ Հարուստ մեկնարկային նախագծերի օրինակներ արդեն կան GitHub.

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster