ක්වාර්කස් යනු සුපර්සොනික් උප පරමාණුක ජාවා ය. රාමුව පිළිබඳ කෙටි දළ විශ්ලේෂණය

ක්වාර්කස් යනු සුපර්සොනික් උප පරමාණුක ජාවා ය. රාමුව පිළිබඳ කෙටි දළ විශ්ලේෂණය

හැඳින්වීම

මාර්තු XNUMX වෙනිදා, RedHat (ඉක්මනින් IBM) ඉදිරිපත් කරන ලදී නව රාමුව - ක්වාර්කස්. සංවර්ධකයින්ට අනුව, මෙම රාමුව GraalVM සහ OpenJDK HotSpot මත පදනම් වන අතර එය Kubernetes සඳහා නිර්මාණය කර ඇත. Quarkus තොගයට ඇතුළත් වන්නේ: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus සහ වෙනත් අය.

ප්‍රතික්‍රියාශීලී සහ අත්‍යවශ්‍ය ශෛලීන් දෙකෙන්ම සංවර්ධනය සඳහා සංවර්ධකයින්ට ඒකාබද්ධ ප්‍රවේශයක් ලබා දෙමින්, Kubernetes යෙදවීම සහ සේවාදායක රහිත යෙදුම් සංවර්ධනය සඳහා Java ප්‍රමුඛ වේදිකාව බවට පත් කිරීම මෙහි අරමුණයි.

බැලුවොත් මේ රාමු වර්ගීකරණය, එවිට Quarkus යනු "Aggregators/Code Generators" සහ "High-level fullstack Frameworks" අතර කොතැනක හෝ වේ. මෙය දැනටමත් එකතු කරන්නෙකුට වඩා වැඩි ය, නමුත් එය සම්පූර්ණ තොගයට පවා නොපැමිණේ, මන්ද... පසුබිම සංවර්ධනය සඳහා සකස් කර ඇත.

යෙදුම් දියත් කිරීමේ ඉතා ඉහළ වේගයක් සහ අඩු මතක පරිභෝජනයක් පොරොන්දු වේ. සංවර්ධකයාගේ වෙබ් අඩවියෙන් දත්ත මෙන්න:

ආරම්භයේ සිට පළමු ප්‍රතිචාර දක්වා කාලය (ය):

වින්‍යාසය
රෙස්ට්
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

සම්ප්‍රදායික වලාකුළු ස්වදේශීය තොගය*
4.3
9.5

මතක පරිභෝජනය (Mb):

වින්‍යාසය
රෙස්ට්
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

සම්ප්‍රදායික වලාකුළු ස්වදේශීය තොගය*
140
218

ආකර්ෂණීයයි නේද?

*මම මෙම තාක්‍ෂණ තොගය පිළිබඳ කිසිදු තොරතුරක් සොයා ගත්තේ නැත, මෙය අමතර ශරීර කට්ටලයක් සහිත යම් ආකාරයක 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

සාමාන්‍ය යෙදුමක වෙනස නම් යෙදුම් පන්තියක් නොමැති වීමයි! 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!

ක්වාර්කස් හුරුපුරුදු රාමු වලින් සම්මත අනුසටහන් භාවිතා කරන බව සලකන්න - CDI සහ JAX-RS. ඔබ මීට පෙර CDI සහ JAX-RS සමඟ වැඩ කර ඇත්නම් අලුත් දෙයක් ඉගෙන ගැනීමට අවශ්‍ය නැත.

දත්ත සමුදාය සමඟ වැඩ කිරීම

ආයතන සඳහා ශිශිර සහ සම්මත JPA අනුසටහන් භාවිතා වේ. REST පාලකයන් මෙන්, ඔබ අවම කේතයක් ලිවිය යුතුය. එකලස් කිරීමේ ගොනුවේ පරායත්තතා දැක්වීම, විවරණ එකතු කිරීම ප්රමාණවත්ය @Entity සහ application.properties හි දත්ත මූලාශ්‍රය වින්‍යාස කරන්න.

සෑම. sessionFactory, persistence.xml හෝ වෙනත් සේවා ගොනු නොමැත. අපි ලියන්නේ අවශ්‍ය කේතය පමණයි. කෙසේ වෙතත්, අවශ්‍ය නම්, ඔබට persistence.xml ගොනුවක් සාදා ORM ස්තරය වඩාත් සියුම් ලෙස වින්‍යාසගත කළ හැක.

Quarkus ආයතනවල හැඹිලිගත කිරීම, එක සිට බොහෝ සම්බන්ධතා සඳහා එකතු කිරීම් සහ විමසුම් සඳහා සහය දක්වයි. මුලින්ම බැලූ බැල්මට එය විශිෂ්ටයි, නමුත් එය දේශීය එක් Kubernetes node එකක් සඳහා caching. එම. විවිධ නෝඩ් වල හැඹිලි එකිනෙක සමමුහුර්ත නොවේ. මෙය තාවකාලික යැයි මම බලාපොරොත්තු වෙමි.

අසමමුහුර්ත කේත ක්රියාත්මක කිරීම

ඉහත සඳහන් කළ පරිදි, 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 හි ධාවනය කළ හැක, විස්තරාත්මකව විස්තර කර ඇත උපදෙස්.

මෙවලම්

ක්වාර්කස් රාමුව Maven සහ Gradle සමඟ භාවිතා කළ හැක. Gradle මෙන් නොව Maven සම්පූර්ණයෙන්ම සහාය දක්වයි. අවාසනාවකට, මේ මොහොතේ Gradle හිස් ව්‍යාපෘතියක් ජනනය කිරීමට සහාය නොදක්වයි; වෙබ් අඩවියේ සවිස්තරාත්මක තොරතුරු තිබේ පෙළ පොත.

දිගු

Quarkus යනු විස්තීරණ රාමුවකි. දැනට ඇණවුමක් ඇත 40 දිගු, විවිධ ක්‍රියාකාරීත්වයන් එකතු කරන - සහායෙන් වසන්ත DI කන්ටේනරය и Apache Camel ධාවන සේවා සඳහා ලොග් වීමට සහ ප්‍රමිතික ප්‍රකාශ කිරීමට පෙර. තවද Java වලට අමතරව Kotlin හි ලිවීමේ යෙදුම් සඳහා සහය දැක්වීම සඳහා දිගුවක් දැනටමත් ඇත.

නිගමනය

මගේ මතය අනුව, ක්වාර්කස් එකල ප්‍රවණතා සමඟ බෙහෙවින් ගැලපේ. පසුපෙළ කේත සංවර්ධනය පහසු සහ පහසු වෙමින් පවතින අතර, මෙම රාමුව Docker සහ Kubernetes සඳහා දේශීය සහය එක් කිරීමෙන් සේවා සංවර්ධනය තවදුරටත් සරල කර වේගවත් කරයි. විශාල ප්ලස් එකක් වන්නේ GraalVM සඳහා ගොඩනඟන ලද සහය සහ වේදිකා මත යැපෙන රූප උත්පාදනය කිරීම, සේවාවන් ඉතා ඉක්මනින් ආරම්භ කිරීමට සහ කුඩා මතක ඉඩක් ලබා ගැනීමට ඉඩ සලසයි. ක්ෂුද්‍ර සේවා සහ සේවාදායක රහිත ගෘහ නිර්මාණ ශිල්පය සඳහා අපගේ විශාල ආශාවේ කාලය තුළ මෙය ඉතා වැදගත් වේ.

නිල වෙබ් අඩවිය - quarkus.io. ඉක්මන් ආරම්භයක් සඳහා වන ව්‍යාපෘති සඳහා උදාහරණ දැනටමත් ලබා ගත හැක GitHub.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න