เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เปเบเบงเบฑเบเบเบต XNUMX เบกเบตเบเบฒ, RedHat (เปเบงเปเบเบตเป IBM)
เปเบเบปเปเบฒเบซเบกเบฒเบเปเบกเปเบเปเบเบทเปเบญเปเบฎเบฑเบเปเบซเป Java เบเบฒเบเปเบเบฑเบเปเบเบฅเบฐเบเบฐเบเบญเบกเบเบฑเปเบเบเปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเป Kubernetes เปเบฅเบฐเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบเปเปเบกเบตเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ, เปเบซเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบกเบตเบงเบดเบเบตเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเปเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบฑเบเปเบเปเบเบเบเบฐเบเบดเบเบดเบฅเบดเบเบฒเปเบฅเบฐเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบ.
เบเบญเบเบซเบฒเบขเบนเป
เบเบงเบฒเบกเปเบงเบชเบนเบเบซเบผเบฒเบเบเบญเบเบเบฒเบเปเบเบตเบเบเบปเบงเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบฅเบฐเบเบฒเบเบเปเบฅเบดเปเบเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเปเปเบฒเปเบกเปเบเบชเบฑเบเบเบฒ. เบเบตเปเปเบกเปเบเบเปเปเบกเบนเบเบเบฒเบเปเบงเบฑเบเปเบเบเปเบเบญเบเบเบนเปเบเบฑเบเบเบฐเบเบฒ:
เปเบงเบฅเบฒเบเบฑเปเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบเบซเบฒเบเบณเบเบญเบเบเบณเบญเบดเบ (s):
เบเบฒเบเบเบฑเปเบเบเปเบฒ
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Cloud Native Stack เปเบเบเบเบฑเปเบเปเบเบตเบก*
4.3
9.5
เบเบฒเบโเบเปโเบฅเบดโเปเบเบโเบเบงเบฒเบกโเบเปเบฒ (Mbโ)โ:
เบเบฒเบเบเบฑเปเบเบเปเบฒ
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Cloud Native Stack เปเบเบเบเบฑเปเบเปเบเบตเบก*
140
218
เบเบฐเบเบฑเบเปเบ, เบเปเปเปเบกเปเบเบเป?
*เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเปเบเปเบเบญเบเบซเบฒเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบ stack เปเบเบฑเบเปเบเปเบฅเบขเบตเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบปเบกเบกเบธเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเบฐเปเบเบเบเบญเบ Spring Boot เบเบตเปเบกเบตเบเบธเบเบฎเปเบฒเบเบเบฒเบเปเบเบตเปเบกเปเบเบตเบก..
เบชเบฐโเบเบฒเบโเบเบตโเบเบฒเบงโเปเบฅเบ!
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฝเบเปเบ 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 class! Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเปเบซเบผเบเปเบซเบกเปเบฎเปเบญเบ, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเปเบฒเบเปเบเบเบเปเปเบกเบตเบเบฒเบ restart เบกเบฑเบ, เปเบฎเบฑเบเปเบซเปเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบงเบเบถเปเบ.
เบเปเปเปเบเปเบกเปเบเบซเบเบฑเบ? เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบชเปเบเบปเบงเบเบงเบเบเบธเบกเปเบเบเปเบเปเบเปเบฒเบเบฑเบเบเบฒเบ
@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 เปเบฅเบฐ annotation JPA เบกเบฒเบเบเบฐเบเบฒเบเบชเปเบฒเบฅเบฑเบเบซเบเปเบงเบเบเบฒเบเปเบกเปเบเบเบทเบเบเปเบฒเปเบเป. เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบปเบงเบเบงเบเบเบธเบก REST, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฝเบเบฅเบฐเบซเบฑเบเบเปเบฒเปเบชเบธเบเบเบตเป. เบกเบฑเบเบเบฝเบเบเปเบเบตเปเบเบฐเบเบตเปเบเบญเบเปเบเบดเบเบเบงเบฒเบกเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเปเบเปเบญเบเบฐเบชเบฒเบเบเบฐเบเบญเบ, เปเบเบตเปเบกเบเปเบฒเบเบฑเบเบเบฒเบ @Entity
เปเบฅเบฐเบเบณเบเบปเบเบเปเบฒเปเบซเบผเปเบเบเปเปเบกเบนเบเปเบ application.properties.
เบเบฑเบเปเบปเบ. เบเปเปเบกเบต sessionFactory, persistence.xml เบซเบผเบทเปเบเบฅเปเบเปเบฅเบดเบเบฒเบเบญเบทเปเบเป. เบเบงเบเปเบฎเบปเบฒเบเบฝเบเบเบฝเบเปเบเปเบฅเบฐเบซเบฑเบเบเบตเปเบเปเบฒเปเบเบฑเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเปเบฒเปเบเบฑเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบเบฅเป persistence.xml เปเบฅเบฐเบเปเบฒเบเบปเบเบเบฑเปเบ ORM เบฅเบฐเบญเบฝเบเบเบงเปเบฒ.
Quarkus เบชเบฐโเบซเบเบฑเบโเบชเบฐโเบซเบเบนเบโเบเบฒเบโเบเบงเบฒเบกโเบเปเบฒโเบเบญเบโเบซเบเปเบงเบโเบเบฒเบโ, เบเบฒเบโเปเบเบฑเบโเบเปเบฒโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบปเบงโเบเบฑเบโเบซเบเบถเปเบโเบซเบฒโเบซเบผเบฒเบโ, เปเบฅเบฐโเบเบฒเบโเบชเบญเบโเบเบฒเบกโ. เบขเบนเป glance เบเปเบฒเบญเบดเบเบกเบฑเบเปเบเบดเปเบเบเบต, เปเบเปเบงเปเบฒเบกเบฑเบเปเบกเปเบ เบเปเบญเบเบเบดเปเบ caching, เบชเปเบฒเบฅเบฑเบเบซเบเบถเปเบ Kubernetes node. เปเบซเบผเบปเปเบฒเบเบฑเปเบ. cache เบเบญเบ nodes เบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเปเปเปเบเป synchronized เบเบฑเบเบเบฑเบเปเบฅเบฐเบเบฑเบ. เบเปเบญเบเบซเบงเบฑเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเบปเปเบงเบเบฒเบง.
เบเบฒเบเบเบฐเบเบดเบเบฑเบเบฅเบฐเบซเบฑเบ Asynchronous
เบเบฑเปเบเบเบตเปเปเบเปเบเปเบฒเบงเบกเบฒเบเปเบฒเบเปเบเบดเบ, Quarkus เบเบฑเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบฎเบนเบเปเบเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบก reactive. เบฅเบฐเบซเบฑเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบเปเบฒเบเบกเบฒเบชเบฒเบกเบฒเบเบเบฝเบเปเบเบฎเบนเบเปเบเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ.
@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 + "!";
});
}
}
เบฅเบฐเบซเบฑเบ Asynchronous เบเบฑเบเบชเบฒเบกเบฒเบเปเบญเบเปเบเบซเบฒเบเปเบฅเบดเบเบฒเบเปเบเป, เบเบปเบเปเบเปเบฎเบฑเบเบเบฐเบเบทเบเบฑเบ.
เบเบฒเบเบเบปเบเบชเบญเบ
เบเบฒเบเบเบปเบเบชเบญเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ 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 เบเปเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบชเปเบฒเบเปเบเบเบเบฒเบเบซเบงเปเบฒเบเปเบเบปเปเบฒ; เบกเบตเบเปเปเบกเบนเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบขเบนเปเปเบเปเบงเบฑเบเปเบเบเป.
Extensions
Quarkus เปเบกเปเบเบเบญเบเบเบตเปเบเบฐเบซเบเบฒเบเปเบเป. เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบตเบเปเบฒเบชเบฑเปเบ
เบชเบฐเบซเบฅเบธเบ
เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, Quarkus เปเบกเปเบเบเปเบญเบเบเปเบฒเบเบชเบญเบเบเปเบญเบเบเบฑเบเปเบเบงเปเบเปเบกเบเบญเบเปเบงเบฅเบฒ. เบเบฒเบเบเบฑเบเบเบฐเบเบฒเบฅเบฐเบซเบฑเบ Backend เปเบกเปเบเบเปเบฒเบเบเบถเปเบ เปเบฅเบฐเบเปเบฒเบเบเบถเปเบ, เปเบฅเบฐเบเบญเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบเปเบฒเบเบเบถเปเบ เปเบฅเบฐเปเบเบตเปเบกเบเบงเบฒเบกเปเบงเปเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบเบเบเบฒเบเปเบเบตเปเบกเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบปเปเบเบชเบฐเบเบฑเบเบชเปเบฒเบฅเบฑเบ Docker เปเบฅเบฐ Kubernetes. เบเบงเบเบญเบฑเบเปเบซเบเปเบซเบผเบงเบเปเบกเปเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบเบเบปเบงเบชเปเบฒเบฅเบฑเบ GraalVM เปเบฅเบฐเบเบฒเบเบชเปเบฒเบเบฎเบนเบเบเบฒเบเบเบตเปเบเบถเปเบเบเบฑเบเปเบงเบเบต, เปเบเบดเปเบเบเปเบงเบเปเบซเปเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบขเปเบฒเบเปเบงเบงเบฒเปเบฅเบฐเปเบเปเบเบทเปเบเบเบตเปเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบซเบเปเบญเบ. เปเบฅเบฐเบเบตเปเปเบเบฑเบเบชเบดเปเบเบชเปเบฒเบเบฑเบเบซเบผเบฒเบเปเบเบเปเบงเบเปเบงเบฅเบฒเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบญเบ passion เบกเบฐเบซเบฒเบเบปเบเบชเปเบฒเบฅเบฑเบ microservices เปเบฅเบฐเบชเบฐเบเบฒเบเบฑเบเบเบฐ serverless.
เปเบงเบฑเบโเปเบโเบเบตเปโเปเบเบฑเบโเบเบฒเบโเบเบฒเบ -
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com