ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π‘Π΅Π΄ΡΠΌΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ RedHat (Π²ΡΠΊΠΎΡΠ΅ β IBM)
Π¦Π΅Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ β ΡΠ΄Π΅Π»Π°ΡΡ Java Π»ΠΈΠ΄ΠΈΡΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π² Kubernetes ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ serverless ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠ°ΠΊ Π² ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
ΠΡΠ»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π°
ΠΠ±Π΅ΡΠ°Π½Π° ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°ΡΡ ΠΎΠ΄ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°ΠΉΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°:
ΠΡΠ΅ΠΌΡ ΠΎΡ ΡΡΠ°ΡΡΠ° Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° (Ρ):
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
REST
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Traditional Cloud Native Stack*
4.3
9.5
ΠΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ (Mb):
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
REST
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Traditional Cloud Native Stack*
140
218
ΠΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠ΅, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
*ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΡΡΠΎΠΌ ΡΡΠ΅ΠΊΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ Π½Π΅ Π½Π°ΡΠ΅Π», ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Spring Boot Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΎΠ±Π²Π΅ΡΠΎΠΌ.
Hello World!
Π‘Π°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π½Π° 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! Quarkus ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ hot reload, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Ρ Π΅Π³ΠΎ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΅ΡΡ Π±ΡΡΡΡΠ΅Π΅.
Π§ΡΠΎ Π΄Π°Π»ΡΡΠ΅? ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ
@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 ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ JPA Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ REST ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ, ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Entity
ΠΈ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ datasource Π² 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. ΠΠΈΠΆΠ΅ Π΄Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΡΡΠ° Π΄Π»Ρ endpoint, ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ 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 Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½Π° ΡΠ°ΠΉΡΠ΅ Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ
Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΡ
Quarkus β ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ. ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ°
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Quarkus Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π±Π΅ Π² ΡΡΠ΅Π½Π΄Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° backend ΠΊΠΎΠ΄Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅, ΠΈ ΡΡΠΎΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈ ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»ΡΡ βΡΠΎΠ΄Π½ΡΡβ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Docker ΠΈ Kubernetes. ΠΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΠ»ΡΡ β Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° GraalVM ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ², ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ Π±ΡΡΡΡΠΎ ΡΡΠ°ΡΡΡΡΡΠΈΠΌΠΈ ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΠΈΠΌΠΈ ΠΌΠ°Π»ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ Π² Π½Π°ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΠΈ serverless Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ.
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΡ β
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com