Кіріспе
XNUMX наурызда RedHat (жақында IBM)
Мақсат - Java-ны Kubernetes-ті орналастыру және серверсіз қолданбаларды әзірлеу үшін жетекші платформаға айналдыру, әзірлеушілерге реактивті және императивті стильдерде әзірлеуге бірыңғай көзқарасты қамтамасыз ету.
Қарасаңыз
Бағдарламаны іске қосудың өте жоғары жылдамдығы және жадты аз тұтыну уәде етілген. Мұнда әзірлеушінің веб-сайтындағы деректер:
Басынан бірінші жауапқа дейінгі уақыт:
Конфигурация
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 бос жобаны құруды қолдамайды; веб-сайтта толық ақпарат бар
Кеңейтімдер
Кваркус - кеңейтілетін рамка. Қазіргі уақытта тапсырыс бар
қорытынды
Менің ойымша, Кваркус сол кездегі тенденцияларға әбден сай келеді. Backend кодын әзірлеу оңайырақ және оңай болып келеді және бұл құрылым Docker және Kubernetes үшін жергілікті қолдауды қосу арқылы қызметті дамытуды одан әрі жеңілдетеді және жылдамдатады. Үлкен плюс - бұл GraalVM үшін кіріктірілген қолдау және платформаға тәуелді кескіндерді жасау, бұл қызметтерді шынымен тез бастауға және жадта аз орын алуға мүмкіндік береді. Бұл микросервистерге және серверсіз архитектураға жаппай құштарлық заманымызда өте маңызды.
Ресми сайт -
Ақпарат көзі: www.habr.com