2010-10-01 15 views
48

मैंने कभी भी किसी को भी कॉरबा के बारे में कुछ भी नहीं सुना है, लेकिन अजीब बात यह है कि 10+ साल पहले यह मधुमक्खी का घुटनों था। कॉरबा कृपा से क्यों गिर गया? क्या यह पूरी तरह से था कि कार्यान्वयन खराब थे या क्या कुछ और मौलिक था?कोर्बा ने लोकप्रियता क्यों खो दी है?

+1

देखें http://stackoverflow.com/questions/1226050/is-corba-legacy –

+0

आईएस-कॉर्बा-विरासत प्रश्न इस कारण को संबोधित नहीं करता है कि यह विरासत क्यों बन गया है – MrEvil

+0

जैसा कि सैम का उल्लेख है कि आप डीसीओएम और कोर्बा एक साथ और देखें कि वे SOAP के साथ प्रतिस्पर्धा क्यों नहीं कर सके। –

उत्तर

124

यह सिर्फ कॉर्बा नहीं है, यह सामान्य रूप से आरपीसी है। इसमें डीसीओएम, जावा-आरएमआई, .NET रिमोटिंग और अन्य सभी चीजें शामिल हैं।

समस्या मूल रूप से वितरित कंप्यूटिंग मूल रूप से स्थानीय कंप्यूटिंग से अलग है। आरपीसी इन मतभेदों का नाटक करने का प्रयास नहीं करता है, और रिमोट कॉल स्थानीय कॉल की तरह दिखता है। लेकिन, एक अच्छी वितरित प्रणाली बनाने के लिए, आपको उन मतभेदों से निपटने की जरूरत है।

बिल जॉय, टॉम ल्यों, एल पीटर Deutsch और जेम्स गोसलिंग पहचान वितरित कम्प्यूटिंग, यानी 8 भ्रम चीजें हैं जो वितरित प्रोग्रामिंग करने के लिए नए चेहरे सच मानते हैं, लेकिन वास्तव में जो आम तौर पर विफलता में परिणाम झूठे हैं, परियोजना या लागत और प्रयास में उल्लेखनीय वृद्धि। आरपीसी उन शरणार्थियों का एक आदर्श अवतार है, क्योंकि यह उन गलत धारणाओं पर बनाया गया है:

  1. नेटवर्क विश्वसनीय है।
  2. लेटेंसी शून्य है।
  3. बैंडविड्थ अनंत है।
  4. नेटवर्क सुरक्षित है।
  5. टोपोलॉजी बदल नहीं है।
  6. एक व्यवस्थापक है।
  7. परिवहन लागत शून्य है।
  8. नेटवर्क एकरूप है।

यह सब स्थानीय कंप्यूटिंग के लिए सच है।

विश्वसनीयता लें, उदाहरण के लिए: यदि आप स्थानीय रूप से एक विधि कॉल करते हैं, तो कॉल स्वयं हमेशा suceeds। निश्चित रूप से, बुलाए गए विधि में एक त्रुटि हो सकती है, लेकिन वास्तविक विधि के पर कॉलिंग हमेशा सफल हो जाएगी। और परिणाम हमेशा वापस आ जाएगा, या, यदि विधि विफल हो जाती है, तो एक त्रुटि संकेतित की जाएगी।

एक वितरित प्रणाली में, यह सच नहीं है: का कार्य बुला विधि ही विफल हो सकता है। अर्थात। आपके अंत से ऐसा लगता है कि आपने विधि को बुलाया था, लेकिन वास्तव में नेटवर्क पर कॉल खो गया और विधि तक कभी नहीं पहुंचा। या, विधि सफलतापूर्वक कॉल प्राप्त हुई और ऑपरेशन का प्रदर्शन किया, लेकिन परिणाम आपके रास्ते पर खो गया। या विधि विफल रही, लेकिन त्रुटि खो गई।

विलंबता के समान: स्थानीय रूप से, एक विधि को कॉल करना अनिवार्य रूप से मुफ़्त है।विधि स्वयंगणना पर मनमाने ढंग से समय ले सकता है, लेकिन पर कॉल करें निःशुल्क है। एक नेटवर्क पर, एक कॉल सैकड़ों मिलीसेकंड ले सकता है।

यही कारण है कि कॉरबा समेत सभी आरपीसी परियोजनाएं काफी विफल रहीं।

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

Erlang में, प्रक्रियाओं हमेशा, अलग ढेर और अलग कचरा कलेक्टरों है जैसे अगर वे, अलग-अलग महाद्वीपों पर विभिन्न मशीनों पर चल रहे थे, भले ही उन प्रक्रियाओं ही पता स्थान में एक ही CPU पर एक ही वी एम पर चलने । यदि आप एक प्रक्रिया से दूसरे प्रक्रिया में डेटा पास करते हैं, तो वह डेटा हमेशा कॉपी किया गया है, जैसे प्रक्रियाएं अलग-अलग मशीनों पर थीं, जैसे ही यह होना चाहिए। कॉल हमेशा एसिंक्रोनस संदेश भेजता है।

तो, स्थानीय और दूरस्थ कॉल को देखें समस्या नहीं है। उन्हें स्थानीय कॉल की तरह दिखाना है।

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

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

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

+3

+1 अच्छा जवाब; अब मैं देख सकता हूं कि कुछ डेवलपर्स .NET Remoting के इतने मंद दृश्य क्यों लेते हैं। हालांकि, अगर आप अंतर्निहित सीमाओं को स्वीकार करने के इच्छुक हैं, तो .NET Remoting कुछ समस्याओं के लिए एक सभ्य बिंदु समाधान हो सकता है। मुझे यकीन नहीं है कि इसे कॉर्बो और डीसीओएम के साथ लंपना उचित है। –

+4

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

+0

मैं समस्याओं को समझता हूं, लेकिन हमारे पास क्या विकल्प है? यदि आप नहीं चाहते हैं कि विशाल एक्सएमएल-ओवरहेड आपको एसओएपी या एक्सएमएलआरपीसी के साथ मिलता है और यदि आप सी (सी ++ नहीं) में प्रोग्राम करना चाहते हैं, तो आप किस तकनीक का उपयोग करते हैं? – Alex

7

वितरित CORBA और DCOM की तरह वस्तु प्रौद्योगिकियों विस्तृत रूप से समस्या नहीं थी - कार्यान्वयन एक नेटवर्क पर अच्छा प्रदर्शन करने की भी 'बातूनी' होने की प्रवृत्ति - और आमतौर पर कार्यान्वयन विवरण लीक किया गया जिससे समाधान नाजुक हो गया।

सेवा उन्मुखता उन चिंताओं पर प्रतिक्रिया के रूप में प्रमुखता प्राप्त की।

+0

क्या आप सेवा ओरिएंटेशन बनाम कोर्बा के फायदों के बारे में अपना उत्तर विस्तारित कर सकते हैं? – Thufir

+0

एक एसओए मॉडल में नेटवर्क सीमाओं में आपकी कॉल अधिक स्पष्ट होती है, और आम तौर पर एक ही सेवा कॉल के भीतर काम की पूरी इकाई को समाहित कर देती है। सेवा इंटरफेस अंतर्निहित कार्यान्वयन से अमूर्त करना भी आसान है ताकि ग्राहकों को तोड़ने के बिना कार्यान्वयन में बदलाव की अनुमति मिल सके। – Sam

+0

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

संबंधित मुद्दे