ኳርኩስ እጅግ በጣም የላቀ ሱባቶሚክ ጃቫ ነው። የማዕቀፉ አጭር መግለጫ

ኳርኩስ እጅግ በጣም የላቀ ሱባቶሚክ ጃቫ ነው። የማዕቀፉ አጭር መግለጫ

መግቢያ

በማርች XNUMX፣ RedHat (በቅርቡ IBM) .едставила አዲስ መዋቅር - ኩርኩስ. እንደ ገንቢዎቹ ከሆነ ይህ ማዕቀፍ በ GraalVM እና OpenJDK HotSpot ላይ የተመሰረተ እና ለ Kubernetes የተዘጋጀ ነው። የኳርኩስ ቁልል የሚከተሉትን ያጠቃልላል JPA/Hibernate፣ JAX-RS/RESTEasy፣ Eclipse Vert.x፣ Netty፣ Apache Camel፣ Kafka፣ Prometheus እና ሌሎች።

ግቡ ጃቫን ለኩበርኔትስ ማሰማራት እና አገልጋይ አልባ መተግበሪያ ልማት መሪ መድረክ ማድረግ ነው፣ ይህም ለገንቢዎች በሪአክቲቭ እና በአስፈላጊ ቅጦች ውስጥ አንድ ወጥ የሆነ የእድገት አቀራረብን ይሰጣል።

ብትመለከቱ ፡፡ ይሄ ማዕቀፎችን መመደብ፣ ከዚያም ኳርኩስ በ"Aggregators/ Code Generators" እና "High-level fullstack frameworks" መካከል ያለ ቦታ ነው። ይህ አስቀድሞ ከአሰባሳቢ በላይ ነው፣ ነገር ግን ወደ ሙሉ ቁልል እንኳን አይደርስም፣ ምክንያቱም... ለጀርባ ልማት የተበጀ.

በጣም ከፍተኛ የመተግበሪያ ማስጀመሪያ ፍጥነት እና ዝቅተኛ የማህደረ ትውስታ ፍጆታ ቃል ተገብቷል። ከገንቢው ድር ጣቢያ የተገኘው መረጃ ይኸውና፡-

ከመጀመሪያው እስከ የመጀመሪያ ምላሽ (ቶች) ጊዜ፡-

ውቅር
ማረት
REST+JPA

Quarkus+ GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

ባህላዊ የደመና ቤተኛ ቁልል*
4.3
9.5

የማህደረ ትውስታ ፍጆታ (Mb):

ውቅር
ማረት
REST+JPA

Quarkus+ GraalVM
13
35

Quarkus+OpenJDK
74
130

ባህላዊ የደመና ቤተኛ ቁልል*
140
218

የሚገርም ነው አይደል?

*ስለዚህ የቴክኖሎጂ ቁልል ምንም አይነት መረጃ አላገኘሁም፣ ይህ ከተጨማሪ የሰውነት ስብስብ ጋር አንድ ዓይነት ስፕሪንግ ቡት ነው ብለን መገመት እንችላለን።.

ሰላም ልዑል!

በኳርኩስ የተጻፈው ቀላሉ መተግበሪያ ይህን ይመስላል።

@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

ከመደበኛ አፕሊኬሽን የሚለየው የመተግበሪያ ክፍል የለም! ኳርኩስ ትኩስ ዳግም መጫንን ይደግፋል፣ ስለዚህ መተግበሪያዎን እንደገና ሳያስጀምሩት መለወጥ ይችላሉ ፣ ይህም እድገትን የበለጠ ፈጣን ያደርገዋል።

ቀጥሎ ምን አለ? ማብራሪያ በመጠቀም አገልግሎትን ወደ መቆጣጠሪያ ማከል ትችላለህ መርፌ. የአገልግሎት ኮድ፡-

@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!

ኳርኩስ ከሚታወቁ ማዕቀፎች - CDI እና JAX-RS መደበኛ ማብራሪያዎችን እንደሚጠቀም ልብ ይበሉ። በእርግጥ ከዚህ በፊት ከCDI እና JAX-RS ጋር ሰርተው ከሆነ አዲስ ነገር መማር አያስፈልግም።

ከመረጃ ቋቱ ጋር በመስራት ላይ

ለድርጅቶች Hibernate እና መደበኛ JPA ማብራሪያዎች ጥቅም ላይ ይውላሉ። እንደ REST መቆጣጠሪያዎች፣ አነስተኛ ኮድ መጻፍ ያስፈልግዎታል። በማህበሩ ፋይል ውስጥ ያሉትን ጥገኞች ለማመልከት በቂ ነው, ማብራሪያዎችን ይጨምሩ @Entity እና በመተግበሪያ ውስጥ የውሂብ ምንጭን ያዋቅሩ.properties.

ሁሉም። ምንም የክፍለ-ጊዜ ፋብሪካ፣ persistence.xml ወይም ሌላ የአገልግሎት ፋይሎች የሉም። አስፈላጊውን ኮድ ብቻ እንጽፋለን. ነገር ግን፣ አስፈላጊ ከሆነ፣ የ persistence.xml ፋይል መፍጠር እና የ ORM ንብርብርን በደንብ ማዋቀር ይችላሉ።

ኳርኩስ አካላትን መሸጎጥ፣ ከአንድ እስከ ብዙ ግንኙነቶች ስብስቦችን እና መጠይቆችን ይደግፋል። በመጀመሪያ ሲታይ በጣም ጥሩ ይመስላል, ግን እሱ ነው አካባቢያዊ መሸጎጫ, ለአንድ Kubernetes መስቀለኛ መንገድ. እነዚያ። የተለያዩ አንጓዎች መሸጎጫዎች እርስ በእርሳቸው አልተመሳሰሉም. ይህ ጊዜያዊ እንደሆነ ተስፋ አደርጋለሁ.

ያልተመሳሰለ ኮድ አፈፃፀም

ከላይ እንደተጠቀሰው ኳርኩስ ምላሽ ሰጪ የፕሮግራም አወጣጥ ዘይቤን ይደግፋል። የቀደመው ማመልከቻ ኮድ በተለየ ቅፅ ሊጻፍ ይችላል.

@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 + "!";
       });
   }
}

ያልተመሳሰለ ኮድ ወደ አገልግሎቱ ሊተላለፍ ይችላል, ውጤቱም ተመሳሳይ ይሆናል.

ሙከራ

የኳርኩስ መተግበሪያዎች ፈተናዎች በJUnit4 ወይም JUnit5 ሊጻፉ ይችላሉ። ከዚህ በታች የማጠቃለያ ነጥብ ምሳሌ ፈተና አለ፣ የተፃፈው ሬስትአስሱሬድ በመጠቀም ነው፣ ነገር ግን ሌላ ማዕቀፍ መጠቀም ይቻላል፡-

@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 ማብራሪያ ፈተናዎችን ከማካሄድዎ በፊት መተግበሪያውን እንዲያሄዱ ያዛል። የተቀረው ለሁሉም ገንቢዎች የሚታወቅ ኮድ ነው።

መድረክ-ተኮር መተግበሪያ

ኳርኩስ ከግራልቪኤም ጋር በጥብቅ የተዋሃደ ስለሆነ፣ መድረክ ላይ የተወሰነ ኮድ መፍጠር በእርግጥ ይቻላል። ይህንን ለማድረግ, GraalVM ን መጫን እና የ GRAALVM_HOME አካባቢን ተለዋዋጭ መለየት ያስፈልግዎታል. ተጨማሪ ለስብሰባ መገለጫ ይመዝገቡ እና ማመልከቻውን በሚገነቡበት ጊዜ ይግለጹ:

mvn package -Pnative

የሚገርመው ነገር የተፈጠረው መተግበሪያ ሊሞከር ይችላል። እና ይህ አስፈላጊ ነው ምክንያቱም የቤተኛ ኮድ አፈፃፀም በ JVM ላይ ካለው አፈፃፀም ሊለያይ ይችላል። የ@SubstrateTest ማብራሪያ በመድረክ ላይ የተወሰነ የመተግበሪያ ኮድን ይሰራል። ያለውን የፍተሻ ኮድ እንደገና መጠቀም ውርስን በመጠቀም ሊከናወን ይችላል ፣ በውጤቱም ፣ በመድረክ ላይ የተመሠረተ መተግበሪያን ለመሞከር ኮድ ይህንን ይመስላል።

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

የመነጨው ምስል በዶከር ውስጥ ተጭኖ በኩበርኔትስ ወይም በOpenShift ውስጥ ሊሰራ ይችላል፣ በዝርዝር ይገለጻል። መመሪያዎች.

የመሳሪያ ስብስብ

የኳርኩስ ማእቀፍ ከ Maven እና Gradle ጋር መጠቀም ይቻላል. እንደ Gradle ሳይሆን ማቨን ሙሉ በሙሉ ይደገፋል። እንደ አለመታደል ሆኖ በአሁኑ ጊዜ Gradle ባዶ ፕሮጀክት ማመንጨትን አይደግፍም ፣ በድር ጣቢያው ላይ ዝርዝር መረጃ አለ። የመማሪያ መጽሐፍ.

ቅጥያዎች

ኳርኩስ ሊሰፋ የሚችል ማዕቀፍ ነው። በአሁኑ ጊዜ ትዕዛዝ አለ 40 ቅጥያዎች, የተለያዩ ተግባራትን የሚጨምሩ - ከድጋፍ የፀደይ DI መያዣ и Apache Camel አገልግሎቶችን ለማስኬድ መለኪያዎችን ከመግባት እና ከማተምዎ በፊት። እና በኮትሊን ውስጥ ከጃቫ በተጨማሪ አፕሊኬሽኖችን ለመጻፍ የሚደግፍ ቅጥያ አስቀድሞ አለ።

መደምደሚያ

በእኔ አስተያየት ኳርኩስ በጊዜው ከነበሩት አዝማሚያዎች ጋር ተመሳሳይ ነው። የጀርባ ኮድ ልማት ቀላል እና ቀላል እየሆነ መጥቷል፣ እና ይህ ማዕቀፍ ለዶከር እና ለኩበርኔትስ ቤተኛ ድጋፍን በመጨመር የአገልግሎት ልማትን የበለጠ ያቃልላል እና ያፋጥናል። አንድ ግዙፍ ፕላስ አብሮ የተሰራ ድጋፍ ለ GraalVM እና በመድረክ ላይ የተመሰረቱ ምስሎችን መፍጠር ነው፣ ይህም አገልግሎቶች በፍጥነት እንዲጀምሩ እና ትንሽ የማህደረ ትውስታ ቦታ እንዲወስዱ ያስችላቸዋል። ይህ ደግሞ ለማይክሮ ሰርቪስ እና አገልጋይ አልባ አርክቴክቸር ባለንበት ወቅት በጣም አስፈላጊ ነው።

ኦፊሴላዊ ጣቢያ - ኳርኩስ.io. ለፈጣን ጅምር የፕሮጀክቶች ምሳሌዎች ቀድሞውኑ ይገኛሉ የፊልሙ.

ምንጭ: hab.com

አስተያየት ያክሉ