тааныштыруу
XNUMX-мартта, RedHat (жакында IBM)
Максаты - Java'ны Kubernetes жайылтуу жана серверсиз тиркемелерди иштеп чыгуу үчүн алдыңкы платформа кылуу, иштеп чыгуучуларга реактивдүү жана императивдик стилдерде иштеп чыгууга бирдиктүү мамиле кылуу.
Эгер карасаң
Тиркемени ишке киргизүүнүн абдан жогорку ылдамдыгы жана эстутум керектөөнүн аздыгы убада кылынган. Бул жерде иштеп чыгуучунун веб-сайтынан алынган маалыматтар:
Башталгандан биринчи жоопко чейинки убакыт:
тарам
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 бош долбоорду түзүүнү колдобойт; веб-сайтта толук маалымат бар
кеңейүү
Кваркус - кеңейтилүүчү алкак. Учурда буйрук бар
жыйынтыктоо
Менин оюмча, Кваркус мезгилдин тенденцияларына абдан шайкеш келет. Backend кодун иштеп чыгуу оңой жана оңой болуп баратат жана бул алкак Docker жана Kubernetes үчүн жергиликтүү колдоону кошуу менен кызматтын өнүгүшүн дагы да жөнөкөйлөтөт жана тездетет. Эң чоң плюс - бул GraalVM үчүн орнотулган колдоо жана платформага көз каранды сүрөттөрдүн жаралышы, бул кызматтар чындап эле тез баштоого жана эстутумда аз орунду ээлейт. Жана бул биздин микросервистерге жана серверсиз архитектурага болгон массалык кумарлануу убагында абдан маанилүү.
Расмий сайт -
Source: www.habr.com