Кваркус - бул үндөн ылдам субатомдук Java. Алкактын кыскача баяндамасы

Кваркус - бул үндөн ылдам субатомдук 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

Эстутум керектөө (Мб):

тарам
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Салттуу Cloud Native Stack*
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

Кадимки тиркемеден айырмасы - Колдонмо классы жок! 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 ичиндеги маалымат булагын конфигурациялаңыз.

Баары. sessionFactory, persistence.xml же башка кызмат файлдары жок. Биз керектүү кодду гана жазабыз. Бирок, зарыл болсо, сиз persistence.xml файлын түзүп, ORM катмарын жакшыраак конфигурациялай аласыз.

Quarkus объекттердин кэштерин, бирден көпкө байланыштар үчүн коллекцияларды жана сурамдарды колдойт. Бир караганда бул сонун көрүнөт, бирок ошондой жергиликтүү кэштөө, бир 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 бош долбоорду түзүүнү колдобойт; веб-сайтта толук маалымат бар окуу китеби.

кеңейүү

Кваркус - кеңейтилүүчү алкак. Учурда буйрук бар 40 узартуу, ар кандай функцияларды кошо турган - колдоодон Жазгы DI контейнер и Apache Camel иштеп жаткан кызматтар үчүн көрсөткүчтөрдү журналга жана жарыялоого чейин. Жана Javaдан тышкары Котлинде тиркемелерди жазууну колдоо үчүн кеңейтүү бар.

жыйынтыктоо

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

Расмий сайт - quarkus.io. Тез баштоо үчүн долбоорлордун мисалдары мурунтан эле жеткиликтүү GitHub.

Source: www.habr.com

Комментарий кошуу