क्वार्कस इम्पीरियल और रिएक्टिव प्रोग्रामिंग को कैसे जोड़ता है

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



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

अल्ट्राफास्ट सबटामिक जावा एक नए स्तर पर पहुंच गया है!


42 रिलीज, 8 महीने का सामुदायिक काम और 177 अद्भुत डेवलपर्स - सभी का नतीजा क्वार्कस 1.0 के नवंबर 2019 में जारी किया गया था , एक रिलीज जो परियोजना के विकास में एक महत्वपूर्ण मील का पत्थर है और बहुत सारी शांत सुविधाओं और क्षमताओं की पेशकश करता है (उन्हें घोषणा में पाया जा सकता है ) ।

आज हम बताएंगे कि क्वार्कस कैसे प्रतिक्रियाशील कोर के आधार पर अनिवार्य और प्रतिक्रियाशील प्रोग्रामिंग मॉडल को जोड़ता है। हम इतिहास में एक संक्षिप्त विषयांतर के साथ शुरू करेंगे, और फिर क्वार्कस के दोहरे कोर के बारे में क्या प्रतिक्रिया देते हैं और जावा डेवलपर्स इनका लाभ कैसे उठा सकते हैं , इस पर करीब से नज़र डालें

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

सबसे पहले, कहानी की ओर मुड़ते हैं।


धाराओं और कंटेनरों


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

स्मृति से बाहर चल रहा है


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

कोटा और सीमा


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

और इस सबका क्या करना है?


यदि एक सरल तरीके से, तो अतुल्यकालिक और गैर-अवरुद्ध I / O पुस्तकालयों और फ्रेमवर्क जैसे कि Netty, Vert.x या Akka का उपयोग करें। वे अपनी प्रतिक्रियाशील प्रकृति के कारण कंटेनरों में काम करने के लिए अधिक उपयुक्त हैं। गैर-अवरोधक I / O के लिए धन्यवाद, एक ही धागा एक साथ कई अनुरोधों को संसाधित कर सकता है। जबकि एक अनुरोध I / O परिणामों की प्रतीक्षा कर रहा है, इसके प्रसंस्करण धागे को मुक्त कर दिया गया है और दूसरे अनुरोध के लिए लिया गया है। और जब I / O परिणाम अंत में आते हैं, तो पहले अनुरोध की प्रक्रिया जारी रहती है। एक ही स्ट्रीम में अनुरोध प्रसंस्करण को वैकल्पिक करके, आप थ्रेड्स की कुल संख्या को कम कर सकते हैं और प्रसंस्करण अनुरोधों के लिए संसाधन की खपत को कम कर सकते हैं।

गैर-अवरुद्ध I / O के साथ, कोर की संख्या एक प्रमुख पैरामीटर बन जाती है, क्योंकि यह I / O थ्रेड्स की संख्या निर्धारित करता है जो समानांतर में चल सकते हैं। जब सही ढंग से उपयोग किया जाता है, तो यह आपको कोर के बीच लोड को प्रभावी ढंग से वितरित करने और कम संसाधनों के साथ उच्च भार का सामना करने की अनुमति देता है।

कैसे, और वह सब है?


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

सबसे पहले, आपको सीखना होगा कि कोड कैसे लिखना है जो अतुल्यकालिक रूप से चलता है। जैसे ही आप गैर-अवरोधक I / O का उपयोग करना शुरू करते हैं, आपको अनुरोध के जवाब मिलने पर स्पष्ट रूप से निर्धारित करना होगा कि क्या होना चाहिए। बस ब्लॉक करना और इंतजार करना विफल हो जाएगा। बदले में, आप कॉलबैक पास कर सकते हैं, प्रतिक्रियाशील प्रोग्रामिंग या निरंतरता का उपयोग कर सकते हैं। लेकिन यह सब नहीं है: गैर-अवरुद्ध I / O का उपयोग करने के लिए, आपको गैर-अवरुद्ध सर्वर और क्लाइंट दोनों की आवश्यकता होती है, और अधिमानतः हर जगह। HTTP के मामले में, सब कुछ सरल है, लेकिन एक डेटाबेस, और फ़ाइल सिस्टम और भी बहुत कुछ है।

हालांकि कुल अंत-से-अंत प्रतिक्रियात्मकता अधिकतम दक्षता देती है, इस तरह की पारी व्यवहार में पचाने में मुश्किल हो सकती है। इसलिए, प्रतिक्रियाशील और अनिवार्य कोड को संयोजित करने की क्षमता एक आवश्यक शर्त बन जाती है:

  1. सॉफ़्टवेयर सिस्टम के सबसे लोड क्षेत्रों में प्रभावी रूप से संसाधनों का उपयोग करें;
  2. इसके अन्य भागों में एक सरल शैली कोड का उपयोग करें।

पेश है क्वार्कस


दरअसल, यह क्वर्कस का सार है - एक रनटाइम वातावरण के भीतर प्रतिक्रियाशील और अनिवार्य मॉडल को संयोजित करना।

क्वार्कस वर्ट.एक्स और नेट्टी पर आधारित है, जिसके शीर्ष पर डेवलपर की मदद करने के लिए कई प्रतिक्रियात्मक ढांचे और एक्सटेंशन का उपयोग किया जाता है। क्वार्कस को न केवल HTTP माइक्रोसर्विसेज, बल्कि ईवेंट-चालित आर्किटेक्चर बनाने के लिए डिज़ाइन किया गया है। अपनी प्रतिक्रियाशील प्रकृति के कारण, यह मैसेजिंग सिस्टम (Apache Kafka, AMQP, आदि) के साथ बहुत कुशलता से काम करता है।

ट्रिक यह है कि कैसे समान जेट इंजन का उपयोग अनिवार्य और प्रतिक्रियाशील कोड दोनों के लिए किया जाता है।



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



मैसेजिंग सिस्टम के कनेक्टर के लिए वर्ट.एक्स इंजन के शीर्ष पर काम करने वाले गैर-ब्लॉकिंग क्लाइंट का उपयोग किया जाता है। इसलिए, आप मैसेजिंग मिडलवेयर क्लास सिस्टम से संदेशों को कुशलता से भेज सकते हैं, प्राप्त कर सकते हैं और संसाधित कर सकते हैं।

साइट क्वार्कस .io ने क्वार्कस के साथ आरंभ करने में आपकी मदद करने के लिए कुछ अच्छे दिशानिर्देश एकत्र किए:


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

उपयोगी संसाधन




विषय के साथ सहज होने के लिए 10 क्वार्कस वीडियो ट्यूटोरियल


Quarkus.io वेबसाइट के अनुसार , क्वार्कस एक कुबेरनेट्स- उन्मुख जावा स्टैक है, जिसे ग्रैल्वीएम और ओपनजेडके हॉटस्पॉट के लिए तैयार किया गया है और इसे सर्वश्रेष्ठ जावा पुस्तकालयों और मानकों से संकलित किया गया है।

विषय को समझने में आपकी मदद करने के लिए, हमने 10 वीडियो ट्यूटोरियल चुने हैं जो क्वार्कस के विभिन्न पहलुओं और इसके उपयोग के उदाहरणों को कवर करते हैं:

1. क्वार्कस का परिचय: कुबेरनेट्स के लिए अगली पीढ़ी का जावा फ्रेमवर्क


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



2. क्वार्कस: अल्ट्राफास्ट सबमेटोमिक जावा


लेखक: Burr Sutter
DevNation Live ऑनलाइन व्याख्यान से एक वीडियो ट्यूटोरियल दर्शाता है कि क्वार्कस का उपयोग एंटरप्राइज़ जावा अनुप्रयोगों, एपीआई, माइक्रोसर्विसेज, और सर्वरलेस फीचर्स को कुबेरनेट्स / ओपनशीफ़्ट में ऑप्टिमाइज़ करने के लिए किया जाता है, जो बहुत छोटा, तेज़ और अधिक स्केलेबल बनाता है।



3. क्वार्कस और ग्रेवालवीएम: हम हाइबरनेट को सुपर गति तक बढ़ाते हैं और उप-परमाणु आकारों को निचोड़ते हैं


लेखक: साने ग्रिनओवरो
प्रस्तुति से आप सीखेंगे कि क्वार्कस कैसे दिखाई दिए, यह कैसे काम करता है और यह आपको हाइबरनेट ORM जैसे जटिल पुस्तकालयों को ग्रेवालम देशी-छवियों के साथ संगत करने की अनुमति देता है।



4. सर्वर रहित एप्लिकेशन विकसित करना सीखना


मार्थेन लूथर द्वारा पोस्ट किया गया
वीडियो नीचे दिखाया गया है कि क्वार्कस का उपयोग करके एक सरल जावा एप्लिकेशन कैसे बनाया जाए और इसे नेटिव के साथ सर्वर रहित एप्लिकेशन के रूप में तैनात किया जाए।



5. क्वार्कस: आनंद के साथ कोड


एडसन यानगा
वाइडगाइड ने यह समझने के लिए अपना पहला क्वार्कस प्रोजेक्ट बनाया कि क्वार्कस डेवलपर्स का दिल क्यों जीत रहा है।



6. जावा और कंटेनर - उनका सामान्य भविष्य क्या होगा


मार्क लिटिल द्वारा प्रकाशित
यह प्रस्तुति जावा के इतिहास का परिचय देती है और बताती है कि क्वार्कस जावा का भविष्य क्यों है।



7. क्वार्कस: अल्ट्राफैस्ट सबमेटोमिक जावा


दिमित्रिस एंड्रेडिस द्वारा पोस्ट किया गया
क्वार्कस के प्रशंसित डेवलपर्स का अवलोकन: सादगी, अल्ट्रा-फास्ट गति, सर्वश्रेष्ठ पुस्तकालय और मानक।



8. क्वार्कस और सबटामिक रिएक्टिव सिस्टम


क्लेमेंट
एस्कॉफियर द्वारा ग्रैल् वीएम के साथ एकीकरण के माध्यम से पोस्ट किया गया , क्वार्कस सुपर-फास्ट डेवलपमेंट अनुभव और एक सबमेटोमिक रनटाइम प्रदान करता है। लेखक क्वार्कस के प्रतिक्रियात्मक पक्ष और प्रतिक्रियात्मक अनुप्रयोगों और स्ट्रीमिंग अनुप्रयोगों को बनाते समय इसका उपयोग करने के तरीके के बारे में बात करता है।



9. क्वार्कस और रैपिड एप्लीकेशन डेवलपमेंट एट एक्लिप्स माइक्रोप्रोफाइल


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



10. जावा, टर्बो संस्करण


लेखक: मार्कस बील
लेखक दिखाता है कि सुपर-छोटे और सुपर-फास्ट जावा कंटेनरों को बनाने के लिए क्वार्कस का उपयोग कैसे किया जाता है जो आपको वास्तविक सफलता बनाने की अनुमति देता है, खासकर सर्वर रहित वातावरण में।


All Articles