"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्वार्कस और ग्रेलवीएम नेटिव इमेज के साथ टर्बोचार्ज जावा माइक्रोसर्विसेज

क्वार्कस और ग्रेलवीएम नेटिव इमेज के साथ टर्बोचार्ज जावा माइक्रोसर्विसेज

2024-11-08 को प्रकाशित
ब्राउज़ करें:386

आधुनिक सॉफ्टवेयर विकास के गतिशील परिदृश्य में, माइक्रोसर्विसेज पसंदीदा वास्तुशिल्प दृष्टिकोण बन गए हैं। हालाँकि यह पद्धति कई लाभ प्रदान करती है, लेकिन इसमें चुनौतियाँ भी शामिल हैं। बड़ी मेमोरी फ़ुटप्रिंट, विस्तारित प्रारंभ समय और उच्च CPU उपयोग जैसे मुद्दे अक्सर पारंपरिक JVM-आधारित सेवाओं के साथ आते हैं। ये चुनौतियाँ न केवल तकनीकी पहलुओं को प्रभावित करती हैं बल्कि वित्तीय निहितार्थ भी रखती हैं जो सॉफ़्टवेयर समाधानों को चलाने और बनाए रखने की समग्र लागत को महत्वपूर्ण रूप से प्रभावित कर सकती हैं।

GraalVM नेटिव इमेज क्या है?

GraalVM नेटिव इमेज GraalVM की एक प्रमुख विशेषता है, जो एक उच्च-प्रदर्शन रनटाइम है जो विभिन्न प्रोग्रामिंग भाषाओं और निष्पादन मोड के लिए समर्थन प्रदान करता है। विशेष रूप से, GraalVM नेटिव इमेज आपको रनटाइम के दौरान जावा वर्चुअल मशीन (JVM) की आवश्यकता को दरकिनार करते हुए, जावा अनुप्रयोगों को समय से पहले स्टैंडअलोन देशी निष्पादन योग्य में संकलित करने की अनुमति देता है। यह अभिनव दृष्टिकोण निष्पादन योग्य फ़ाइलें उत्पन्न करता है जो लगभग तात्कालिक स्टार्टअप समय प्रदर्शित करता है और उनके पारंपरिक जेवीएम समकक्षों की तुलना में मेमोरी खपत को काफी कम करता है। इन मूल निष्पादनयोग्यों को सावधानीपूर्वक तैयार किया गया है, जिनमें केवल एप्लिकेशन की कार्यक्षमता के लिए अपरिहार्य आवश्यक कक्षाएं, विधियां और आश्रित पुस्तकालय शामिल हैं। अपनी तकनीकी क्षमता से परे, GraalVM नेटिव इमेज दूरगामी प्रभावों के साथ एक रणनीतिक समाधान के रूप में उभरती है। यह न केवल तकनीकी चुनौतियों पर विजय प्राप्त करता है बल्कि एक आकर्षक वित्तीय मामला भी पेश करता है। कुशल, सुरक्षित और तुरंत स्केलेबल क्लाउड नेटिव जावा अनुप्रयोगों के विकास की सुविधा प्रदान करके, GraalVM संसाधन उपयोग को अनुकूलित करने और लागत-प्रभावशीलता को बढ़ावा देने में सहायक बन जाता है। संक्षेप में, यह समकालीन, गतिशील वातावरण में सॉफ्टवेयर समाधानों के प्रदर्शन और वित्तीय दक्षता को बढ़ाने में महत्वपूर्ण भूमिका निभाता है।

तकनीकी चुनौतियाँ और वित्तीय निहितार्थ

1. बड़ी मेमोरी फ़ुटप्रिंट्स

तकनीकी प्रभाव
पारंपरिक जेवीएम-आधारित सेवाएं अक्सर क्लासलोडिंग और लोडेड कक्षाओं के लिए मेटाडेटा के कारण पर्याप्त मेमोरी ओवरहेड खर्च करती हैं।


वित्तीय मामला
उच्च मेमोरी खपत से बुनियादी ढांचे की लागत में वृद्धि होती है। GraalVM द्वारा लोड की गई कक्षाओं और अन्य अनुकूलन के लिए मेटाडेटा को समाप्त करने से संसाधनों का अधिक कुशल उपयोग होता है, जिसके परिणामस्वरूप संभावित लागत बचत होती है।

2. विस्तारित प्रारंभ समय

तकनीकी प्रभाव
माइक्रोसर्विसेज में कोल्ड स्टार्ट से प्रतिक्रिया समय बढ़ सकता है, उपयोगकर्ता अनुभव प्रभावित हो सकता है और संभावित रूप से सेवा में गिरावट हो सकती है।


वित्तीय मामला
विस्तारित प्रारंभ समय न केवल उपयोगकर्ता की संतुष्टि को प्रभावित करता है बल्कि उच्च परिचालन लागत में भी योगदान देता है। GraalVM के अनुकूलन, जैसे कि निर्माण के दौरान क्लासलोडिंग ओवरहेड और प्री-जनरेटिंग इमेज हीप को खत्म करना, स्टार्टअप समय को काफी कम कर देता है, संभावित रूप से परिचालन खर्च को कम कर देता है।

3. उच्च CPU उपयोग

तकनीकी प्रभाव
पारंपरिक जेवीएम अक्सर स्टार्टअप के दौरान प्रोफाइलिंग और जस्ट-इन-टाइम (जेआईटी) संकलन के लिए सीपीयू चक्र जलाते हैं।


वित्तीय मामला
अत्यधिक सीपीयू उपयोग के परिणामस्वरूप क्लाउड इंफ्रास्ट्रक्चर लागत में वृद्धि होती है। GraalVM द्वारा प्रोफाइलिंग और JIT-ing ओवरहेड से परहेज सीधे तौर पर CPU खपत को कम करने में योगदान देता है, जिससे क्लाउड उपयोग में संभावित लागत बचत होती है।

कोल्ड स्टार्ट समस्या से निपटना

माइक्रोसर्विसेज, विशेष रूप से सर्वर रहित या कंटेनरीकृत वातावरण में, अक्सर कोल्ड स्टार्ट समस्या का सामना करते हैं, जिससे प्रतिक्रिया समय और उपयोगकर्ता अनुभव प्रभावित होता है। GraalVM कई अनुकूलन लागू करके इस चुनौती का समाधान करता है:

1. कोई क्लासलोडिंग ओवरहेड नहीं

पारंपरिक जावा एप्लिकेशन कक्षाओं को गतिशील रूप से लोड करने और लिंक करने के लिए रनटाइम पर क्लासलोडिंग पर निर्भर करते हैं। यह प्रक्रिया विशेष रूप से स्टार्टअप चरण के दौरान ओवरहेड का परिचय देती है। GraalVM स्थैतिक या समय से पहले (एओटी) संकलन नामक प्रक्रिया के माध्यम से इस ओवरहेड को कम करता है। इसमें एप्लिकेशन के लिए आवश्यक सभी कक्षाओं को प्री-लोड करना, लिंक करना और आंशिक रूप से आरंभ करना शामिल है। परिणामस्वरूप, एप्लिकेशन स्टार्टअप के दौरान रनटाइम क्लासलोडिंग की कोई आवश्यकता नहीं है।

2. व्याख्या किए गए कोड का उन्मूलन

पारंपरिक जावा वर्चुअल मशीनें जस्ट-इन-टाइम (JIT) संकलन लागू करने से पहले एक व्याख्या किए गए निष्पादन मोड पर भरोसा करती हैं। यह स्टार्टअप में देरी और CPU उपयोग में वृद्धि में योगदान कर सकता है। मूल निष्पादन योग्य में कोई व्याख्या किया गया कोड नहीं होता है, जो तेजी से स्टार्टअप समय में योगदान देता है।

3. कोई प्रोफ़ाइलिंग और जेआईटी-आईएनजी ओवरहेड नहीं

GraalVM जस्ट-इन-टाइम (JIT) कंपाइलर को शुरू करने की आवश्यकता को दरकिनार कर देता है, जिससे स्टार्टअप के दौरान सीपीयू का उपयोग कम हो जाता है।

4. बिल्ड टाइम पर इमेज हीप जेनरेशन

GraalVM की मूल छवि उपयोगिता निर्माण प्रक्रिया के दौरान विशिष्ट कक्षाओं के लिए आरंभीकरण प्रक्रियाओं के निष्पादन को सक्षम बनाती है। इसके परिणामस्वरूप एक छवि ढेर का निर्माण होता है जिसमें पूर्व-प्रारंभिक भाग शामिल होते हैं, जिससे एप्लिकेशन के स्टार्टअप की गति तेज हो जाती है।

Oracle GraalVM की मूल छवि उपयोगिता ने पारंपरिक JVM-आधारित अनुप्रयोगों की तुलना में लगभग 100 गुना तेजी से स्टार्टअप समय का प्रदर्शन किया है। नीचे दिया गया ग्राफ रनटाइम मेमोरी आवश्यकताओं में पर्याप्त कमी को दर्शाता है, जो हॉटस्पॉट की तुलना में GraalVM की दक्षता को प्रदर्शित करता है(चित्र 1)।

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

चित्रा 1 - मूल निष्पादनयोग्य लगभग तुरंत प्रारंभ होते हैं(oracle.com)


एक दुबली मेमोरी फ़ुटप्रिंट प्राप्त करना

GraalVM निम्नलिखित अनुकूलन के माध्यम से मेमोरी फ़ुटप्रिंट को कम करने में योगदान देता है:

1. लोड की गई कक्षाओं के लिए कोई मेटाडेटा नहीं

GraalVM गैर-हीप मेमोरी में गतिशील रूप से लोड की गई कक्षाओं के लिए मेटाडेटा संग्रहीत करने से बचता है। निर्माण प्रक्रिया के दौरान, आवश्यक वर्ग की जानकारी पहले से लोड और लिंक की जाती है, जिससे रनटाइम पर अतिरिक्त मेटाडेटा की आवश्यकता कम हो जाती है।

2. कोई प्रोफ़ाइलिंग डेटा या JIT अनुकूलन नहीं

चूंकि बाइटकोड पहले से ही मूल कोड में है, GraalVM जेआईटी अनुकूलन के लिए प्रोफाइलिंग डेटा एकत्र करने की आवश्यकता को समाप्त कर देता है, जिससे मेमोरी ओवरहेड कम हो जाता है।

3. अलगाव प्रौद्योगिकी

GraalVM आइसोलेट्स पेश करता है, एक ऐसी तकनीक जो ढेर को छोटे, स्वतंत्र "ढेर" में विभाजित करती है, दक्षता बढ़ाती है, विशेष रूप से अनुरोध प्रसंस्करण परिदृश्यों में।

आम तौर पर, यह JVM पर चलने की तुलना में x5 गुना कम मेमोरी की खपत करता है(चित्र 2)

Turbocharge Java Microservices with Quarkus and GraalVM Native Image

चित्र 2 - गो या जावा हॉटस्पॉट(oracle.com) की तुलना में मूल निष्पादनयोग्य मेमोरी


निष्कर्ष में, GraalVM की मूल छवि उपयोगिता स्टार्टअप समय, मेमोरी फ़ुटप्रिंट और सीपीयू उपयोग संबंधी चिंताओं को संबोधित करते हुए, माइक्रोसर्विसेज द्वारा उत्पन्न चुनौतियों का एक परिवर्तनकारी समाधान प्रदान करती है। GraalVM को अपनाकर, डेवलपर्स क्लाउड-नेटिव जावा एप्लिकेशन बना सकते हैं जो न केवल कुशल और सुरक्षित हैं बल्कि एक बेहतर उपयोगकर्ता अनुभव भी प्रदान करते हैं।

क्वार्कस के साथ मूल जावा

आपकी क्वार्कस सेवा को मूल छवि में संकलित करने के लिए, विभिन्न विधियाँ उपलब्ध हैं। हालाँकि यह आलेख क्वार्कस मूल निर्माण प्रक्रिया में गहराई से नहीं जाएगा, यह आवश्यक चरणों का एक सिंहावलोकन प्रदान करता है।

मूल छवि बनाने के लिए किसी भी दृष्टिकोण के साथ आगे बढ़ने से पहले, अपनी pom.xml फ़ाइल में उचित मूल प्रोफ़ाइल सेट करना महत्वपूर्ण है। निम्नलिखित प्रोफ़ाइल जोड़ें:


  
    native
    
      native
    
  

स्थापित GraalVM के साथ एक मूल निष्पादन योग्य का निर्माण

निम्न आदेश का उपयोग करके अपना GraalVM संस्करण जांचें:

./gu info native-image

यह आदेश स्थापित GraalVM संस्करण प्रदर्शित करेगा:

Downloading: Component catalog from www.graalvm.org
Filename : https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.0/native-image-installable-svm-java19-linux-amd64-22.3.0.jar
Name     : Native Image
ID       : native-image
Version  : 22.3.0
GraalVM  : 22.3.0
Stability: Experimental
Component bundle native-image cannot be installed
        - The same component Native Image (org.graalvm.native-image[22.3.0.0/55b341ca1bca5219aafa8ed7c8a2273b81d184dd600d8261c837fc32d2dedae5]) is already installed in version 22.3.0

और एक मूल निष्पादन योग्य बनाने के लिए, उपयोग करें:

./mvnw install -Dnative

ये कमांड लक्ष्य निर्देशिका में एक *-रनर बाइनरी उत्पन्न करते हैं, जो आपको मूल निष्पादन योग्य चलाने की अनुमति देता है:

./target/*-runner

GraalVM स्थापित किए बिना एक मूल निष्पादन योग्य बनाना

यदि GraalVM को स्थानीय रूप से स्थापित करने में चुनौतियाँ आती हैं, तो इन-कंटेनर बिल्ड का उपयोग किया जा सकता है:

./mvnw install -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=graalvm

यह कमांड डॉकर कंटेनर के भीतर निर्माण शुरू करता है और आवश्यक छवि फ़ाइल प्रदान करता है। फिर आप एप्लिकेशन को इसके साथ प्रारंभ कर सकते हैं:

./target/*-runner

ऐसे मामलों में जहां मूल छवि बनाना चुनौतीपूर्ण साबित होता है, रेडहैट टीम क्वार्कस फ्रेमवर्क के लिए डिज़ाइन किए गए ग्रेलवीएम का एक विशेष वितरण प्रदान करती है जिसे मैंड्रेल कहा जाता है। मैंड्रेल सुव्यवस्थित
GraalVM, केवल क्वार्कस अनुप्रयोगों के लिए आवश्यक मूल-छवि क्षमताओं पर ध्यान केंद्रित कर रहा है। मैंड्रेल का उपयोग करने के लिए, इन चरणों का पालन करें:

  1. उचित मैंड्रेल संस्करण मैंड्रेल रिपॉजिटरी की पहचान करें

  2. अपनी एप्लिकेशन.प्रॉपर्टी फ़ाइल में मैंड्रेल संस्करण सेट करें:

quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17

3.मावेन बिल्ड कमांड चलाएँ:

./mvnw clean install -Pnative

मैन्युअल रूप से एक कंटेनर बनाना

उन लोगों के लिए जो कंटेनर निर्माण पर मैन्युअल नियंत्रण पसंद करते हैं, एक मल्टी-स्टेज डॉकर बिल्ड को नियोजित किया जा सकता है।

FROM quay.io/quarkus/ubi-quarkus-mandrel-builder-image:23.0.1.2-Final-java17 AS build
COPY --chown=quarkus:quarkus mvnw /app/mvnw
COPY --chown=quarkus:quarkus .mvn /app/.mvn
COPY --chown=quarkus:quarkus pom.xml /app/
USER quarkus
WORKDIR /app
RUN ./mvnw -B org.apache.maven.plugins:maven-dependency-plugin:3.6.1:go-offline
COPY src /app/src
RUN ./mvnw package -Dnative

FROM quay.io/quarkus/quarkus-micro-image:2.0
WORKDIR /app/
COPY --from=build /app/target/*-runner /app/application

RUN chmod 775 /app /app/application \
  && chown -R 1001 /app \
  && chmod -R "g rwX" /app \
  && chown -R 1001:root /app

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

यह डॉकरफ़ाइल एक मल्टी-स्टेज बिल्ड को व्यवस्थित करता है, जिसके परिणामस्वरूप आपके क्वार्कस एप्लिकेशन के साथ एक डॉकर छवि बनती है। अपने क्वार्कस एप्लिकेशन को चलाने के लिए तैयार डॉकर छवि तैयार करने के लिए इस डॉकरफ़ाइल को निष्पादित करें।

सारांश

GraalVM नेटिव इमेज एक शक्तिशाली तकनीक है जो आपके जावा माइक्रोसर्विसेज को विकसित करने और तैनात करने के तरीके में क्रांतिकारी बदलाव ला सकती है। GraalVM नेटिव इमेज को अपनाकर, आप माइक्रोसर्विसेज बना सकते हैं जो हैं:

  • और तेज
  • अधिक स्केलेबल
  • तैनाती करना आसान
  • अधिक लागत प्रभावी

GraalVM नेटिव इमेज क्लाउड-नेटिव जावा विकास का एक प्रमुख प्रवर्तक है और यह आपके व्यवसाय की मांग के अनुसार प्रदर्शन, स्केलेबिलिटी और लागत बचत प्राप्त करने में आपकी सहायता कर सकता है।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/yanev/turbocharge-java-microservices-with-quarkus-and-graalvm-native-image-2cb4?1 यदि कोई उल्लंघन है, तो कृपया [email protected] पर संपर्क करें इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3