Apache Thrift
थ्रिफ्ट एक इंटरफेस परिभाषा भाषा और द्विआधारी संचार प्रोटोकॉल है जिसका उपयोग कई प्रोग्रामिंग भाषाओं के लिए सेवाओं को परिभाषित करने और बनाने के लिए किया जाता है। इसे फेसबुक में "स्केलेबल क्रॉस-लैंग्वेज सर्विसेज डेवलपमेंट" के लिए विकसित किया गया था और 2020 तक यह अपाचे सॉफ्टवेयर फाउंडेशन में एक ओपन सोर्स परियोजना है। एक रिमोट प्रोसीजर कॉल (आर. पी. सी.) फ्रेमवर्क के साथ यह क्रॉस-प्लेटफ़ॉर्म सेवाओं का निर्माण करने के लिए एक कोड जनरेशन इंजन के साथ एक सॉफ़्टवेयर स्टैक को जोड़ता है जो एक्शनस्क्रिप्ट, सी, सी + +, सी #, कैपुचिनो, कोको, डेल्फी, एर्लांग, गो, हास्केल, जावा, जावास्क्रिप्ट, ऑब्जेक्टिव-सी, ओ. सी. ए. एम. एल., पर्ल, पी. एच. पी., पायथन, रूबी, एलिक्सिर, रस्ट, स्केला, स्मॉलटॉक और स्विफ्ट सहित विभिन्न भाषाओं और फ्रेमवर्क में लिखे गए अनुप्रयोगों को जोड़ सकता है। फेसबुक द्वारा जारी अप्रैल 2007 के एक तकनीकी पत्र में कार्यान्वयन का वर्णन किया गया था, जिसे अब अपाचे पर होस्ट किया गया है। आर्किटेक्चर थ्रिफ्ट में क्लाइंट और सर्वर बनाने के लिए एक पूरा ढेर शामिल है। शीर्ष भाग थ्रिफ्ट परिभाषा से उत्पन्न कोड है। इस फाइल से, सेवाएँ क्लाइंट और प्रोसेसर कोड उत्पन्न करती हैं। अंतर्निहित प्रकारों के विपरीत, निर्मित डेटा संरचनाओं को उत्पन्न कोड के परिणामस्वरूप भेजा जाता है। प्रोटोकॉल और परिवहन परत रनटाइम लाइब्रेरी का हिस्सा हैं। थ्रिफ्ट के साथ, कोड को फिर से संकलित किए बिना एक सेवा को परिभाषित करना और प्रोटोकॉल और परिवहन को बदलना संभव है। क्लाइंट भाग के अलावा, थ्रिफ्ट में प्रोटोकॉल और परिवहन को एक साथ बांधने के लिए सर्वर बुनियादी ढांचा शामिल है, जैसे ब्लॉकिंग, नॉन-ब्लॉकिंग और मल्टी-थ्रेडेड सर्वर। स्टैक के अंतर्निहित आई/ओ भाग को विभिन्न भाषाओं के लिए अलग-अलग तरीके से लागू किया जाता है। थ्रिफ्ट कई प्रोटोकॉल का समर्थन करता हैः टीबीनरी प्रोटोकॉल-एक सीधा द्विआधारी प्रारूप, सरल, लेकिन अंतरिक्ष दक्षता के लिए अनुकूलित नहीं है। टेक्स्ट प्रोटोकॉल की तुलना में प्रक्रिया करने में तेज लेकिन डीबग करने के लिए अधिक चुनौतीपूर्ण। टी. सी. कॉम्पैक्टप्रोटोकॉल-अधिक कॉम्पैक्ट द्विआधारी प्रारूप; आमतौर पर प्रक्रिया के लिए अधिक कुशल होने के साथ-साथ टी. जे. एस. ओ. एन. प्रोटोकॉल-डेटा के एन्कोडिंग के लिए जे. एस. ओ. एन. का उपयोग करता है। टी. एस. सिम्पल. जे. एस. ओ. एन. प्रोटोकोल-एक केवल लिखने वाला प्रोटोकॉल जिसे थ्रिफ्ट द्वारा पार्स नहीं किया जा सकता क्योंकि यह जे. एस. ओ. एन. का उपयोग करके मेटाडेटा छोड़ देता है। स्क्रिप्टिंग भाषाओं द्वारा पार्सिंग के लिए उपयुक्त। समर्थित परिवहन हैंः टीसिम्पलफाइलट्रांसपोर्ट-यह परिवहन एक फाइल में लिखा जाता है। टीफ्रेम्डट्रांसपोर्ट-नॉन-ब्लॉकिंग सर्वर का उपयोग करते समय इस परिवहन की आवश्यकता होती है। यह फ्रेम में डेटा भेजता है, प्रत्येक लंबाई की जानकारी से पहले। टी. एम. मेमोरीट्रांसपोर्ट-आई/ओ के लिए स्मृति का उपयोग करता है। जावा कार्यान्वयन आंतरिक रूप से एक सरल विधि का उपयोग करता है। टी-साॅकेट-परिवहन के लिए अवरोधित करने वाले साॅकेट आई/ओ का उपयोग करता है। टीज़लिबट्रांसपोर्ट-ज़लिब का उपयोग करके संपीड़न करता है। एक अन्य परिवहन के साथ संयोजन में उपयोग किया जाता है। थ्रिफ्ट कई सर्वर भी प्रदान करता है, जो टीएनऑनब्लॉकिंगसर्वर हैं-गैर-ब्लॉकिंग आई/ओ (जावा कार्यान्वयन एनआईओ चैनलों का उपयोग करता है) का उपयोग करने वाला एक बहु-थ्रेडेड सर्वर। टीफ्रेम्डट्रांसपोर्ट का उपयोग इस सर्वर के साथ किया जाना चाहिए। टीसिम्पलसर्वर-मानक अवरोधक आई/ओ का उपयोग करने वाला एकल-थ्रेडेड सर्वर। परीक्षण के लिए उपयोगी। टी. थ्रेडेड सर्वर-एक बहु-थ्रेडेड सर्वर जो प्रति कनेक्शन मॉडल और मानक अवरुद्ध आई/ओ का उपयोग करता है। TThredPoolServer-एक बहु-थ्रेडेड सर्वर जो एक थ्रेड पूल और मानक ब्लॉकिंग I/O का उपयोग करता है। लाभ बचत के कुछ बताए गए लाभों में शामिल हैंः द्विआधारी प्रारूप के उपयोग के कारण एस. ओ. ए. पी. जैसे विकल्पों की तुलना में कम ओवरहेड के साथ क्रॉस-लैंग्वेज सीरियलाइजेशन। कोई एक्स. एम. एल. विन्यास फाइल नहीं है। भाषा बंधन स्वाभाविक प्रतीत होते हैं। उदाहरण के लिए, जावा उपयोग करता है। सी + + एसटीडीःः वेक्टर <एसटीडीः: स्ट्रिंग> का उपयोग करता है। अनुप्रयोग-स्तरीय तार प्रारूप और क्रमिककरण-स्तरीय तार प्रारूप को साफ-सुथरे तरीके से अलग किया गया है। इन्हें स्वतंत्र रूप से संशोधित किया जा सकता है। पूर्वनिर्धारित क्रमबद्धीकरण शैलियों में शामिल हैंः द्विआधारी, एचटीटीपी-अनुकूल और कॉम्पैक्ट द्विआधारी। क्रॉस-लैंग्वेज फ़ाइल क्रमबद्धीकरण के रूप में डबल्स। प्रोटोकॉल का। थ्रिफ्ट के लिए प्रमुख संस्करण/लघु संस्करण जैसे केंद्रीकृत और स्पष्ट तंत्र की आवश्यकता नहीं होती है। ढीली जोड़ी वाली टीमें स्वतंत्र रूप से आर. पी. सी. कॉल विकसित कर सकती हैं। कोई निर्माण निर्भरता या गैर-मानक सॉफ्टवेयर नहीं। असंगत सॉफ्टवेयर लाइसेंसों का कोई मिश्रण नहीं है। थ्रिफ्ट सर्विस थ्रिफ्ट बनाना सी + + में लिखा जाता है, लेकिन कई भाषाओं के लिए कोड बना सकता है। थ्रिफ्ट सेवा बनाने के लिए, किसी को थ्रिफ्ट फाइलें लिखनी होती हैं जो इसका वर्णन करती हैं, गंतव्य भाषा में कोड उत्पन्न करती हैं, सर्वर शुरू करने के लिए कुछ कोड लिखती हैं, और इसे क्लाइंट से कॉल करती हैं। इस तरह की विवरण फ़ाइल का एक कोड उदाहरण यहां दिया गया हैः एनम फोनटाइप {होम, वर्क, मोबाइल, अन्य} संरचना फोन {1: आई32 आईडी, 2: स्ट्रिंग नंबर, 3: फोनटाइप प्रकार} सेवा फोनसर्विस {फोन फाइंडबायड (1: आई32 आईडी), सूची <फोन> फाइंडऑल ()} थ्रिफ्ट इस वर्णनात्मक जानकारी से कोड उत्पन्न करेगा। उदाहरण के लिए, जावा में, फोन टाइप फोन वर्ग के अंदर एक सरल एनम होगा। डेटा क्रमिककरण प्रारूपों की तुलना भी देखें अपाचे एवरो एब्स्ट्रैक्ट सिंटैक्स नोटेशन वन (ASN.1) हेसियन प्रोटोकॉल बफर्स एक्सटर्नल डेटा रिप्रेजेंटेशन (XDR) इंटरनेट कम्युनिकेशंस इंजन (बर्फ) gRPC SDXF संदर्भ बाहरी लिंक बचत अनुप्रयोग परत प्रोटोकॉल डेटा क्रमिककरण प्रारूप अंतर-प्रक्रिया संचार रिमोट प्रक्रिया कॉल बचत