குவார்கஸ் ஒரு சூப்பர்சோனிக் துணை அணு ஜாவா ஆகும். கட்டமைப்பின் சுருக்கமான கண்ணோட்டம்

குவார்கஸ் ஒரு சூப்பர்சோனிக் துணை அணு ஜாவா ஆகும். கட்டமைப்பின் சுருக்கமான கண்ணோட்டம்

அறிமுகம்

மார்ச் XNUMX ஆம் தேதி, RedHat (விரைவில் IBM) வழங்கப்பட்டது புதிய கட்டமைப்பு - குவார்க்கஸ். டெவலப்பர்களின் கூற்றுப்படி, இந்த கட்டமைப்பு GraalVM மற்றும் OpenJDK HotSpot ஐ அடிப்படையாகக் கொண்டது மற்றும் குபெர்னெட்ஸிற்காக வடிவமைக்கப்பட்டுள்ளது. குவார்கஸ் அடுக்கில் பின்வருவன அடங்கும்: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus மற்றும் பிற.

குபெர்னெட்ஸ் வரிசைப்படுத்தல் மற்றும் சர்வர்லெஸ் அப்ளிகேஷன் மேம்பாட்டிற்கான ஜாவாவை முன்னணி தளமாக மாற்றுவதே குறிக்கோள், டெவலப்பர்களுக்கு எதிர்வினை மற்றும் கட்டாய பாணிகளில் மேம்பாட்டிற்கான ஒரு ஒருங்கிணைந்த அணுகுமுறையை வழங்குகிறது.

நீங்கள் பார்த்தால் இந்த கட்டமைப்பின் வகைப்பாடு, பின்னர் குவார்கஸ் என்பது "அக்ரிகேட்டர்கள்/கோட் ஜெனரேட்டர்கள்" மற்றும் "உயர்நிலை ஃபுல்ஸ்டாக் ஃப்ரேம்வொர்க்குகள்" ஆகியவற்றுக்கு இடையே இருக்கும். இது ஏற்கனவே ஒரு திரட்டியை விட அதிகமாக உள்ளது, ஆனால் இது முழு அடுக்கை கூட எட்டவில்லை, ஏனெனில்... பின்தள மேம்பாட்டிற்காக வடிவமைக்கப்பட்டுள்ளது.

பயன்பாட்டு துவக்கத்தின் மிக அதிக வேகம் மற்றும் குறைந்த நினைவக நுகர்வு ஆகியவை உறுதியளிக்கப்படுகின்றன. டெவலப்பரின் இணையதளத்தில் உள்ள தரவு இங்கே:

தொடக்கத்திலிருந்து முதல் பதில் வரையிலான நேரம் (கள்):

கட்டமைப்பு
நவக்கிரகங்களும்
REST+JPA

Quarkus+GraalVM
0.014
0.055

குவார்கஸ்+ஓபன்ஜேடிகே
0.75
2.5

பாரம்பரிய கிளவுட் நேட்டிவ் ஸ்டேக்*
4.3
9.5

நினைவக நுகர்வு (Mb):

கட்டமைப்பு
நவக்கிரகங்களும்
REST+JPA

Quarkus+GraalVM
13
35

குவார்கஸ்+ஓபன்ஜேடிகே
74
130

பாரம்பரிய கிளவுட் நேட்டிவ் ஸ்டேக்*
140
218

ஈர்க்கக்கூடியது, இல்லையா?

*இந்த டெக்னாலஜி ஸ்டேக் பற்றிய எந்த தகவலும் எனக்கு கிடைக்கவில்லை, இது கூடுதல் பாடி கிட் கொண்ட ஒருவித ஸ்பிரிங் பூட் என்று நாம் கருதலாம்..

வணக்கம்!

குவார்கஸில் எழுதப்பட்ட எளிய பயன்பாடு இப்படி இருக்கும்:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

இது உண்மையில் ஒரு வகுப்பு மற்றும் அது போதும்! மேவன் பயன்முறையில் மேவனைப் பயன்படுத்தி பயன்பாட்டை இயக்கலாம்:

mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello

வழக்கமான பயன்பாட்டிலிருந்து வித்தியாசம் என்னவென்றால், பயன்பாட்டு வகுப்பு இல்லை! குவார்கஸ் ஹாட் ரீலோடை ஆதரிக்கிறது, எனவே உங்கள் பயன்பாட்டை மறுதொடக்கம் செய்யாமலேயே மாற்றலாம், மேலும் மேம்பாட்டை இன்னும் வேகமாக்கும்.

அடுத்தது என்ன? சிறுகுறிப்பைப் பயன்படுத்தி, கட்டுப்படுத்திக்கு சேவையைச் சேர்க்கலாம் ஊசி. சேவை குறியீடு:

@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 லேயரை மிகவும் நேர்த்தியாக உள்ளமைக்கலாம்.

குவார்கஸ் நிறுவனங்களின் தற்காலிக சேமிப்பு, ஒன்று முதல் பல உறவுகளுக்கான சேகரிப்புகள் மற்றும் வினவல்களை ஆதரிக்கிறது. முதல் பார்வையில் அது நன்றாக இருக்கிறது, ஆனால் அது உள்ளூர் ஒரு குபெர்னெட்டஸ் முனைக்கு கேச்சிங். அந்த. வெவ்வேறு முனைகளின் தற்காலிக சேமிப்புகள் ஒன்றோடொன்று ஒத்திசைக்கப்படவில்லை. இது தற்காலிகமானது என்று நம்புகிறேன்.

ஒத்திசைவற்ற குறியீடு செயல்படுத்தல்

மேலே குறிப்பிட்டுள்ளபடி, குவார்கஸ் எதிர்வினை நிரலாக்க பாணியையும் ஆதரிக்கிறது. முந்தைய பயன்பாட்டின் குறியீட்டை வேறு வடிவத்தில் எழுதலாம்.

@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 + "!";
       });
   }
}

ஒத்திசைவற்ற குறியீட்டையும் சேவைக்கு மாற்றலாம், முடிவு ஒரே மாதிரியாக இருக்கும்.

சோதனை

குவார்கஸ் பயன்பாடுகளுக்கான சோதனைகளை 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 சிறுகுறிப்பு, சோதனைகளை இயக்கும் முன் பயன்பாட்டை இயக்குமாறு அறிவுறுத்துகிறது. மீதமுள்ளவை எல்லா டெவலப்பர்களுக்கும் தெரிந்த குறியீடு.

இயங்குதளம் சார்ந்த பயன்பாடு

குவார்கஸ் GraalVM உடன் இறுக்கமாக ஒருங்கிணைக்கப்பட்டுள்ளதால், இயங்குதளம் சார்ந்த குறியீட்டை உருவாக்குவது நிச்சயமாக சாத்தியமாகும். இதைச் செய்ய, நீங்கள் GraalVM ஐ நிறுவ வேண்டும் மற்றும் GRAALVM_HOME சூழல் மாறியைக் குறிப்பிட வேண்டும். மேலும் прописать профиль для сборки பயன்பாட்டை உருவாக்கும்போது அதைக் குறிப்பிடவும்:

mvn package -Pnative

சுவாரஸ்யமாக, உருவாக்கப்பட்ட பயன்பாட்டை சோதிக்க முடியும். மேலும் இது முக்கியமானது, ஏனெனில் நேட்டிவ் குறியீட்டின் செயலாக்கம் JVM இல் செயல்படுத்துவதில் இருந்து வேறுபடலாம். @SubstrateTest சிறுகுறிப்பு இயங்குதளம் சார்ந்த பயன்பாட்டுக் குறியீட்டை இயக்குகிறது. ஏற்கனவே உள்ள சோதனைக் குறியீட்டை மீண்டும் பயன்படுத்துவது மரபுரிமையைப் பயன்படுத்தி செய்யப்படலாம்; இதன் விளைவாக, இயங்குதளம் சார்ந்த பயன்பாட்டைச் சோதிப்பதற்கான குறியீடு இப்படி இருக்கும்:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

உருவாக்கப்பட்ட படத்தை டோக்கரில் தொகுக்கலாம் மற்றும் குபெர்னெட்ஸ் அல்லது ஓபன்ஷிப்டில் இயக்கலாம், இதில் விரிவாக விவரிக்கப்பட்டுள்ளது அறிவுறுத்தல்கள்.

கருவிகள்

குவார்கஸ் கட்டமைப்பை Maven மற்றும் Gradle உடன் பயன்படுத்தலாம். Gradle போலல்லாமல் Maven முழுமையாக ஆதரிக்கப்படுகிறது. துரதிர்ஷ்டவசமாக, தற்போது கிரேடில் ஒரு வெற்று திட்டத்தை உருவாக்குவதை ஆதரிக்கவில்லை; இணையதளத்தில் விரிவான தகவல் உள்ளது பாடநூல்.

விரிவாக்கம்

குவார்கஸ் ஒரு விரிவாக்கக்கூடிய கட்டமைப்பாகும். தற்போது உத்தரவு வந்துள்ளது 40 நீட்டிப்புகள், இது பல்வேறு செயல்பாடுகளைச் சேர்க்கிறது - ஆதரவிலிருந்து ஸ்பிரிங் டிஐ கொள்கலன் и அப்பாச்சி ஒட்டகம் இயங்கும் சேவைகளுக்கான அளவீடுகளை பதிவுசெய்து வெளியிடுவதற்கு முன். ஜாவாவைத் தவிர, கோட்லினில் எழுதும் பயன்பாடுகளை ஆதரிக்க ஏற்கனவே நீட்டிப்பு உள்ளது.

முடிவுக்கு

என் கருத்துப்படி, குவார்கஸ் அக்காலப் போக்குகளுடன் மிகவும் ஒத்துப்போகிறது. பின்தள குறியீடு மேம்பாடு எளிதாகவும் எளிதாகவும் மாறி வருகிறது, மேலும் இந்த கட்டமைப்பானது டோக்கர் மற்றும் குபெர்னெட்ஸிற்கான சொந்த ஆதரவைச் சேர்ப்பதன் மூலம் சேவை வளர்ச்சியை மேலும் எளிதாக்குகிறது மற்றும் வேகப்படுத்துகிறது. ஒரு பெரிய பிளஸ் என்பது GraalVM க்கான உள்ளமைக்கப்பட்ட ஆதரவு மற்றும் இயங்குதளம் சார்ந்த படங்களின் உருவாக்கம் ஆகும், இது சேவைகளை மிக விரைவாக தொடங்கவும், சிறிய நினைவக இடத்தை எடுத்துக்கொள்ளவும் அனுமதிக்கிறது. மைக்ரோ சர்வீஸ்கள் மற்றும் சர்வர்லெஸ் ஆர்கிடெக்ச்சர் மீதான எங்கள் வெகுஜன ஆர்வத்தில் இது மிகவும் முக்கியமானது.

அதிகாரப்பூர்வ தளம் - quarkus.io. விரைவான தொடக்கத்திற்கான திட்டங்களின் எடுத்துக்காட்டுகள் ஏற்கனவே கிடைக்கின்றன மகிழ்ச்சியா.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்