2009-08-26 18 views
9

मैं वर्तमान में एक एप्लिकेशन तैयार कर रहा हूं जिसे मैं अंत में विंडोज़ एज़ूर में ले जाना चाहता हूं। संक्षेप में, हालांकि, यह एक सर्वर पर चल रहा है जिसे मैं स्वयं होस्ट करूंगा।संदेश कतार के लिए अच्छी रणनीति?

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

मैं इसके लिए एक decoupled वास्तुकला का उपयोग करने के लिए बहुत उत्सुक हूँ। आदर्श रूप से मैं घटकों (यानी वेब ऐप्स और कार्यकर्ता सेवा) को एक-दूसरे के बारे में जितना संभव हो उतना कम जानना चाहता हूं। ऐसा लगता है कि एक संदेश कतार का उपयोग करने का सबसे अच्छा समाधान होगा - वेब ऐप्स कतार में कार्य इकाइयों के साथ संदेशों को एनक्यू कर सकते हैं और कार्यकर्ता सेवा उन्हें चुन सकती है और आवश्यकतानुसार उन्हें संसाधित कर सकती है।

हालांकि, मैं ऐसा करने के लिए प्रौद्योगिकियों का एक अच्छा सेट तैयार करना चाहता हूं, इस बात को ध्यान में रखते हुए कि मैं अंततः अज़ूर में जा रहा हूं और फिर से काम करने की मात्रा को कम करना चाहता हूं, जब मुझे बादल में माइग्रेट करें। Azure में एक कतार घटक बनाया गया है जिसमें मेरी आवश्यकताओं के लिए आदर्श लग रहा है। मैं जो करना चाहता हूं वह कुछ ऐसा है जो इसे जितना संभव हो सके नकल करेगा।

ऐसा लगता है कि वहाँ कई विकल्प (मैं विंडोज पर नेट का उपयोग कर रहा है, एक SQL सर्वर 2005 वापस अंत के साथ) की तरह - लोगों मैं अब तक मिल गया है कर रहे हैं:

  • MSMQ
  • एसक्यूएल सर्वर सेवा ब्रोकर
  • एक डेटाबेस तालिका और कुछ संग्रहीत procs

मैं सोच रहा था कि अगर किसी को भी इस लिए कोई सुझाव है का उपयोग करते हुए अपने खुद के रोलिंग - या किसी को भी कुछ भी समान नहीं किया है, तो और चीजों के बारे में सलाह है से बचने के लिए/करते हैं। मुझे एहसास है कि हर स्थिति अलग है, लेकिन इस मामले में मुझे लगता है कि मेरी कतार की आवश्यकताएं बहुत सामान्य हैं इसलिए मुझे ऐसा करने के सर्वोत्तम तरीके के बारे में किसी और के विचार सुनना अच्छा लगेगा।

अग्रिम धन्यवाद,

जॉन

उत्तर

18

आप मन में Azure है, तो शायद आप Azure पर सीधे शुरू कर देना चाहिए के रूप में एपीआई और semnatics Azure कतारों और MSMQ या एसएसबी के किसी भी के बीच काफी अलग हैं।

बनाम एसएसबी MSMQ का एक त्वरित 3048 मीटर तुलना (मैं तुलना के बाहर एक कस्टम तालिका के रूप में कतार छोड़ देंगे के रूप में यह वास्तव में निर्भर करता है कि कैसे आप इसे लागू ...)

  • तैनाती : एमएसएमक्यू एक विंडोज घटक है, एसएसबी एक एसक्यूएल घटक है। किसी भी संदेश को स्टोर करने के लिए एसएसबी को एक एसक्यूएल इंस्टेंस की आवश्यकता होती है, इसलिए विघटित ग्राहकों को एक उदाहरण तक पहुंच की आवश्यकता होती है (एक्सप्रेस हो सकती है)। एमएसएमक्यू को क्लाइंट पर एमएसएमक्यू की तैनाती की आवश्यकता है (ओएस का हिस्सा, लेकिन वैकल्पिक इंस्टॉल)।
  • प्रोग्राम योग्यता: एमएसएमक्यू पूरी तरह से विकसित, समर्थित, डब्ल्यूसीएफ चैनल प्रदान करता है। एसएसबी http://ssbwcf.codeplex.com
  • प्रदर्शन पर प्रदर्शन एक प्रयोगात्मक डब्ल्यूसीएफ चैनल प्रदान करता है: एसएसबी ट्रांसएक्ट मोड में एमएसएमक्यू से काफी तेज होगा।MSMQ तेजी से करता है, तो चलो untransacted मोड में संचालित (सबसे अच्छा प्रयास, अव्यवस्थित, वितरण) हो जाएगा
  • Queriability: एसएसबी कतारों चुने गए एड uppon (किसी भी संदेश, पूर्ण एसक्यूएल शामिल हों देखने/कहां/आदेश/ग्रुप शक्ति) हो सकता है, एसएसबी कतारों डेटाबेस में एकीकृत कर रहे हैं ताकि वे बैकअप लिया जाता है और डेटाबेस के साथ बहाल, आवेदन राज्य के साथ एक consitent राज्य रखते हुए: MSMQ कतारों (केवल अगले संदेश)
  • वसूल न peeked जा सकता है। MSMQ कतारों तो सिंक (सुसंगत) कतार और डेटाबेस है में बैकअप रखने के लिए निलंबित किया जाना है, NT फ़ाइल बैकअप subsytem में ऊपर का समर्थन कर रहे हैं।
  • लेनदेन (के बाद से हर को कतारबद्ध/विपंक्ति हमेशा एक डेटाबेस अद्यतन के साथ है): एसएसबी पूरी तरह से एसक्यूएल में एकीकृत है तो dequeueing और enqueueing स्थानीय लेनदेन के संचालन कर रहे हैं। MSMQ एक अलग टीएम (लेन-देन प्रबंधक) है, इसलिए कतार/विपंक्ति दोनों एसक्यूएल और लेन-देन में MSMQ नामांकन के लिए एक वितरित लेनदेन आपरेशन हो गया है।
  • प्रबंधन और निगरानी: दोनों equaly बुरा। कोई उपकरण नहीं।
  • सहसंबंधित संदेश प्रसंस्करण: एसएसबी अंतर्निहित Conversation Group Locking के माध्यम से concurent धागे द्वारा सहसंबंधित संदेश की प्रसंस्करण को अवरुद्ध कर सकता है।
  • इवेंट संचालित: संग्रहीत प्रक्रियाओं को लॉन्च करने के लिए एसएसबी में Activation है, एमएसएमक्यू Windows Activation सेवा का उपयोग करता है। समान। एसएसबी हालांकि WAITFOR (रिसीव) और MAX_QUEUE_READERS बातचीत के कारण स्वयं लोड संतुलन क्षमताएं हैं।
  • उपलब्धता: SQL सर्वर उच्च उपलब्धता की कहानी पर एसएसबी पिगबैक, यह क्लस्टर या डेटाबेस मिररिंग वातावरण में काम कर सकता है। एमएसएमक्यू केवल विंडोज क्लस्टरिंग कहानी की सवारी करता है। एचए समाधान के रूप में क्लस्टरिंग से डाटाबेस मिररिंग बहुत सस्ता है।

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

+0

धन्यवाद! यह बहुत उपयोगी है। ऐसा लगता है कि एमएसएमक्यू हमारे उद्देश्यों के लिए एक बेहतर विकल्प हो सकता है - मुझे लगता है कि एमएसएमक्यू की तुलना एज़ूर क्यूइंग से तुलना करने के लिए एक बड़ा अगला कदम होगा। मुझे पता है, उदाहरण के लिए, Azure गारंटी नहीं देता है कि संदेश क्रम में (या केवल एक बार) वितरित किए जाएंगे, इसलिए मुझे यह देखने के लिए एमएसएमक्यू के खिलाफ यह जांचना होगा कि संबंधित व्यवहार क्या है। लेकिन इसके लिए फिर से धन्यवाद - यह एक बहुत ही जानकारीपूर्ण तुलना है। – John

10

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

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

आप अपने अनुप्रयोगों से लगातार उपयोग करने योग्य एपीआई देने के लिए कतार के साथ कैसे बातचीत करना चाहते हैं, इस अर्थशास्त्र को नियंत्रित करना चाहते हैं।

एक किसी न किसी विचार हो सकता है:

interface IQueuedTransport 
{ 
    void SendMessage(XmlDocument); 
    XmlDocument ReceiveMessage(); 
} 

public class MSMQTransport : IQueuedTransport {} 
public class AzureQueueTransport : IQueuedTransport {} 

आप-सब कतार परिवहन निर्माण नहीं किया जा सकता है, बस क्या आपकी आवश्यकताओं को पूरा। यदि आप एक्सएमएल के साथ काम करते हैं, तो एक्सएमएल पास करें। यदि आप बाइट एरे में काम करते हैं, बाइट एरे पास करते हैं।:)

शुभकामनाएं!
जेड

0

Win32 Mailslots का उपयोग करें। वे एक सर्वर पर भरोसेमंद होंगे, लागू करने में आसान हैं, और किसी भी अतिरिक्त सॉफ्टवेयर की आवश्यकता नहीं है।

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