کوارکوس یک جاوای مافوق صوت زیر اتمی است. مروری کوتاه بر چارچوب

کوارکوس یک جاوای مافوق صوت زیر اتمی است. مروری کوتاه بر چارچوب

معرفی

در XNUMX مارس، RedHat (به زودی IBM) ارایه شده چارچوب جدید - کوارکوس. به گفته توسعه دهندگان، این فریم ورک مبتنی بر GraalVM و OpenJDK HotSpot است و برای Kubernetes طراحی شده است. پشته Quarkus شامل: JPA/Hibernate، JAX-RS/RESTEasy، Eclipse Vert.x، Netty، Apache Camel، Kafka، Prometheus و دیگران است.

هدف این است که جاوا را به پلتفرم پیشرو برای استقرار Kubernetes و توسعه برنامه های بدون سرور تبدیل کنیم و به توسعه دهندگان یک رویکرد واحد برای توسعه در هر دو سبک واکنشی و ضروری ارائه دهیم.

اگر نگاه کنید این طبقه‌بندی فریم‌ورک‌ها، سپس Quarkus جایی بین «Aggregators/Code Generators» و «Fullstack Framework‌های سطح بالا» است. این در حال حاضر بیشتر از یک جمع‌کننده است، اما حتی به فول استک هم نمی‌رسد، زیرا... برای توسعه باطن طراحی شده است.

سرعت بسیار بالای راه اندازی اپلیکیشن و مصرف کم حافظه وعده داده شده است. در اینجا داده های وب سایت توسعه دهنده آمده است:

زمان از شروع تا اولین پاسخ (ها):

پیکربندی
REST
REST + JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

پشته بومی ابر سنتی*
4.3
9.5

مصرف حافظه (Mb):

پیکربندی
REST
REST + JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

پشته بومی ابر سنتی*
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

تفاوت با یک برنامه معمولی این است که کلاس 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 کار کرده اید، نیازی به یادگیری چیز جدیدی نیست.

کار با پایگاه داده

Hibernate و حاشیه نویسی استاندارد JPA برای موجودیت ها استفاده می شود. همانند کنترلرهای REST، باید حداقل کد را بنویسید. کافی است وابستگی ها را در فایل اسمبلی مشخص کنید، حاشیه نویسی را اضافه کنید @Entity و منبع داده را در application.properties پیکربندی کنید.

همه. بدون sessionFactory، 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 + "!";
       });
   }
}

کد ناهمزمان نیز می تواند به سرویس منتقل شود، نتیجه یکسان خواهد بود.

آزمایش

تست های برنامه های 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 از تولید یک پروژه خالی پشتیبانی نمی کند؛ اطلاعات دقیقی در وب سایت وجود دارد کتاب درسی.

برنامه های افزودنی

کوارکوس یک چارچوب قابل توسعه است. در حال حاضر سفارش وجود دارد 40 پسوند، که قابلیت های مختلفی را اضافه می کند - از پشتیبانی ظرف DI فنری и شتر آپاچی قبل از ثبت و انتشار معیارهای مربوط به خدمات در حال اجرا. و در حال حاضر افزونه ای برای پشتیبانی از برنامه های کاربردی نوشتن در Kotlin، علاوه بر جاوا وجود دارد.

نتیجه

به نظر من کوارکوس کاملاً مطابق با روندهای زمانه است. توسعه کد Backend در حال آسان‌تر و آسان‌تر شدن است و این چارچوب با افزودن پشتیبانی بومی برای Docker و Kubernetes، توسعه خدمات را ساده‌تر و سرعت می‌بخشد. یک مزیت بزرگ پشتیبانی داخلی از GraalVM و تولید تصاویر وابسته به پلتفرم است که به سرویس‌ها اجازه می‌دهد خیلی سریع شروع شوند و فضای کمی از حافظه اشغال کنند. و این در زمان ما که اشتیاق انبوه به میکروسرویس ها و معماری بدون سرور داریم، بسیار مهم است.

سایت رسمی - quarkus.io. نمونه هایی از پروژه ها برای شروع سریع در حال حاضر در دسترس هستند GitHub.

منبع: www.habr.com

اضافه کردن نظر