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 нь "Агрегатор/Код үүсгэгч" болон "Өндөр түвшний бүрэн фрэймворк" хоёрын хооронд байдаг. Энэ нь аль хэдийн нэгтгэгчээс илүү зүйл боловч бүрэн стект ч хүрдэггүй, учир нь... backend хөгжүүлэхэд зориулагдсан.

Аппликешныг эхлүүлэх маш өндөр хурд, санах ой бага зарцуулна гэж амлаж байна. Хөгжүүлэгчийн вэбсайтаас авсан өгөгдөл энд байна:

Эхлэлээс эхний хариу хүртэлх хугацаа:

Тохиргоо
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Уламжлалт Cloud Native Stack*
4.3
9.5

Санах ойн зарцуулалт (Mb):

Тохиргоо
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Уламжлалт Cloud Native Stack*
140
218

Гайхалтай, тийм үү?

*Би энэ технологийн стекийн талаар ямар ч мэдээлэл олсонгүй, бид үүнийг нэмэлт биеийн иж бүрдэл бүхий хаврын гутал гэж таамаглаж болно..

Сайн уу, дэлхий!

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

Энгийн программаас ялгаатай нь Хэрэглээний анги байхгүй! 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 дээр ажиллаж байсан бол мэдээж шинэ зүйл сурах шаардлагагүй.

Мэдээллийн сантай ажиллах

Аж ахуйн нэгжүүдэд зориулсан Hibernate болон стандарт JPA тэмдэглэгээг ашигладаг. REST контроллеруудын нэгэн адил та хамгийн бага код бичих хэрэгтэй. Ассемблей файл дахь хамаарлыг зааж өгөхөд хангалттай, тайлбар нэмэх @Entity мөн application.properties дотор өгөгдлийн эх үүсвэрийг тохируулах.

Бүгд. sessionFactory, persistence.xml болон бусад үйлчилгээний файл байхгүй. Бид зөвхөн шаардлагатай кодыг бичнэ. Гэхдээ шаардлагатай бол та persistence.xml файл үүсгэж, ORM давхаргыг илүү нарийн тохируулж болно.

Quarkus нь аж ахуйн нэгжүүдийн кэш, нэгээс олон харилцаанд зориулсан цуглуулга, асуулгад дэмжлэг үзүүлдэг. Эхлээд харахад энэ нь гайхалтай харагдаж байна, гэхдээ энэ нь тийм ээ орон нутгийн кэш, нэг Кубернетес зангилааны хувьд. Тэдгээр. Өөр өөр зангилааны кэшүүд хоорондоо синхрончлогдоогүй байна. Энэ түр зуурынх гэж найдаж байна.

Асинхрон кодын гүйцэтгэл

Дээр дурдсанчлан 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 өргөтгөл, янз бүрийн функцийг нэмдэг - дэмжлэгээс Хаврын DI сав и Апачи тэмээ ажиллаж байгаа үйлчилгээний хэмжүүрийг бүртгэх, нийтлэхээс өмнө. Мөн Java-ээс гадна Котлин дээр програм бичихийг дэмжих өргөтгөл аль хэдийн байгаа.

дүгнэлт

Миний бодлоор Кваркус тухайн үеийн чиг хандлагатай нэлээд нийцэж байгаа. Арын кодыг боловсруулах нь илүү хялбар, хялбар болж байгаа бөгөөд энэ хүрээ нь Docker болон Kubernetes-д уугуул дэмжлэг нэмснээр үйлчилгээний хөгжлийг улам хялбарчилж, хурдасгаж байна. Маш том давуу тал бол GraalVM-ийн суурилуулсан дэмжлэг, платформоос хамааралтай зургууд үүсгэх бөгөөд энэ нь үйлчилгээг маш хурдан эхлүүлэх, санах ойд бага зай эзлэх боломжийг олгодог. Энэ нь бидний микро үйлчилгээ, сервергүй архитектурт ихээхэн хүсэл тэмүүлэлтэй байгаа өнөө үед маш чухал юм.

Албан ёсны сайт - quarkus.io. Түргэн эхлүүлэх төслүүдийн жишээнүүд аль хэдийн бэлэн байна GitHub.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх