Кваркус — дыбыстан жоғары субатомдық 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 «Агрегаторлар/код генераторлары» мен «Жоғары деңгейлі толық стэк фреймворктары» арасында орналасқан. Бұл агрегатордан артық, бірақ ол тіпті толық стекке де жетпейді, себебі... серверді әзірлеуге арналған.

Бағдарламаны іске қосудың өте жоғары жылдамдығы және жадты аз тұтыну уәде етілген. Мұнда әзірлеушінің веб-сайтындағы деректер:

Басынан бірінші жауапқа дейінгі уақыт:

Конфигурация
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Дәстүрлі бұлттық жергілікті стек*
4.3
9.5

Жадты тұтыну (Мб):

Конфигурация
REST
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

Кәдімгі қолданбадан айырмашылығы - қолданбалар класы жоқ! 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 нысандарды кэштеуді, бір-көп қатынасы үшін жинақтарды және сұрауларды қолдайды. Бір қарағанда керемет көрінеді, бірақ солай жергілікті кэштеу, бір Кубернетес түйіні үшін. Анау. Әртүрлі түйіндердің кэштері бір-бірімен синхрондалмаған. Бұл уақытша деп үміттенемін.

Асинхронды кодты орындау

Жоғарыда айтылғандай, 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 көмегімен пайдалануға болады. Gradle-ден айырмашылығы Maven толықтай қолдау көрсетеді. Өкінішке орай, қазіргі уақытта Gradle бос жобаны құруды қолдамайды; веб-сайтта толық ақпарат бар оқулық.

Кеңейтімдер

Кваркус - кеңейтілетін рамка. Қазіргі уақытта тапсырыс бар 40 расширейний, ол әртүрлі функционалдылықты қосады - қолдаудан Көктемгі DI контейнері и Апачи түйе іске қосылған қызметтерге арналған көрсеткіштерді тіркеу және жариялау алдында. Java-дан басқа Котлинде қосымшаларды жазуды қолдайтын кеңейтім қазірдің өзінде бар.

қорытынды

Менің ойымша, Кваркус сол кездегі тенденцияларға әбден сай келеді. Backend кодын әзірлеу оңайырақ және оңай болып келеді және бұл құрылым Docker және Kubernetes үшін жергілікті қолдауды қосу арқылы қызметті дамытуды одан әрі жеңілдетеді және жылдамдатады. Үлкен плюс - бұл GraalVM үшін кіріктірілген қолдау және платформаға тәуелді кескіндерді жасау, бұл қызметтерді шынымен тез бастауға және жадта аз орын алуға мүмкіндік береді. Бұл микросервистерге және серверсіз архитектураға жаппай құштарлық заманымызда өте маңызды.

Ресми сайт - quarkus.io. Жылдам бастауға арналған жобалардың мысалдары қазірдің өзінде қол жетімді GitHub.

Ақпарат көзі: www.habr.com

пікір қалдыру