2008-08-17 12 views
16

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

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

दो नेटवर्क एक हार्डवेयर वीपीएन समाधान से जुड़े हुए हैं, जो सभ्य है, लेकिन स्पष्ट रूप से दुनिया में सबसे तेज़ चीज नहीं है।

दो डेटाबेस समान हैं, और एक ही सारणी साझा करते हैं, लेकिन वे 100% समान नहीं हैं। दोनों तरफ से कई टेबल आंतरिक या बाहरी अनुप्रयोग के लिए बहुत विशिष्ट हैं।

तो सवाल यह है कि: जब कोई उपयोगकर्ता अपनी जानकारी अपडेट करता है या सार्वजनिक वेबसाइट पर एक रिकॉर्ड जमा करता है, तो आप उस डेटा को आंतरिक एप्लिकेशन के डेटाबेस में कैसे स्थानांतरित करते हैं ताकि इसे आंतरिक कर्मचारियों द्वारा प्रबंधित किया जा सके? और इसके विपरीत ... आप कर्मचारियों द्वारा वेबसाइट पर किए गए अपडेट को कैसे दबाते हैं?

यह उल्लेखनीय है कि इन अद्यतनों के अधिक "वास्तविक समय" बेहतर होते हैं। ऐसा नहीं है कि यह तुरंत होना चाहिए, बस उचित रूप से जल्दी।

अब तक, मैं दृष्टिकोण के निम्नलिखित प्रकार के उपयोग के बारे में सोचा है:

  1. द्वि-दिशात्मक प्रतिकृति
  2. परिवर्तन के रूप में वे बना रहे हैं सिंक करने के लिए कोड के साथ दोनों पक्षों पर
  3. वेब सेवा इंटरफेस (वास्तविक में पहर)।
  4. असीमित रूप से परिवर्तनों को सिंक करने के लिए कोड के साथ दोनों पक्षों पर वेब सेवा इंटरफेस (क्यूइंग तंत्र का उपयोग करके)।

कोई सलाह? क्या कोई इस समस्या में पहले भाग गया है? क्या आप ऐसे समाधान के साथ आए जो आपके लिए अच्छा काम करता है?

+0

हाय, मुझे इसकी पुरानी पोस्ट पता है, लेकिन मैं बस एक बहुत ही समान परिदृश्य को देख रहा हूं। क्या आप मुझसे पूछते हैं कि अंत में आप किस विकल्प के लिए गए थे? धन्यवाद – Sean

उत्तर

19

यह एक बहुत ही आम एकीकरण परिदृश्य है, मेरा मानना ​​है। व्यक्तिगत रूप से, मुझे लगता है कि एक कतार का उपयोग कर एक एसिंक्रोनस मैसेजिंग समाधान आदर्श है।

आपको प्रतिकृति जैसे किसी चीज के ऊपर या जटिलता के बिना निकट वास्तविक समय सिंक्रनाइज़ेशन प्राप्त करने में सक्षम होना चाहिए।

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

कुछ खुले स्रोत उपकरण हैं जो वास्तव में आपके लिए आसान बना सकते हैं यदि आप .NET का उपयोग कर रहे हैं (विशेष रूप से यदि आप एमएसएमक्यू का उपयोग करना चाहते हैं)।

  1. nServiceBus उदी दहन द्वारा
  2. Mass Transit Dru सेलर्स और क्रिस पैटरसन द्वारा

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

यदि आप जावा का उपयोग कर रहे हैं, तो खुली स्रोत सेवा बस कार्यान्वयन की कोई संख्या है जो इस प्रकार की द्वि-दिशात्मक, एसिंक्रोनस मैसेजिंग को एक स्नैप, जैसे कि मुले या शायद केवल सक्रिय एमक्यू बनाती है।

आप अपने कुछ पॉडकास्ट सुनकर Udi Dahan' ब्लॉग पढ़ने पर भी विचार करना चाहेंगे। शुरू करने के लिए यहां some more good resources हैं।

0

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

1

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

1

में सिंक्रनाइज़ हाल ही में मैं, जो विश्वसनीय प्रदान करता है SQL सर्वर सेवा ब्रोकर के साथ सफलता का एक बहुत पड़ा है बहुत कम कार्यान्वयन दर्द के साथ बॉक्स से बाहर अतुल्यकालिक संदेश भेजने कायम हो सकता है।

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

है यह एसक्यूएल सर्वर के एक बेहद तहत प्रचार हिस्सा है और अच्छी तरह से एक नज़र लायक है।

3

मैं एक समान परियोजना के माध्यम से मध्य-मार्ग हूं, सिवाय इसके कि मेरे पास धीमी कनेक्शन (कुछ मामलों में डायल-अप) पर समन्वयित रखने की आवश्यकता है।

सबसे पहले आपको परिवर्तनों को ट्रैक करने की आवश्यकता है, यदि आप SQL 2008 का उपयोग कर सकते हैं (यहां तक ​​कि एक्सप्रेस संस्करण भी पर्याप्त है यदि 2 जीबी सीमा कोई समस्या नहीं है) इससे दर्द बहुत कम हो जाएगा, बस डेटाबेस पर चेंज ट्रैकिंग चालू करें और प्रत्येक टेबल हम डेटा सर्वर और सीमित स्कीमा के साथ प्रत्येक साइट पर विस्तारित स्कीमा और एसक्यूएल एक्सप्रेस 2008 के साथ हेड ऑफिस पर SQL सर्वर 2008 का उपयोग कर रहे हैं।

दूसरी बात आपको अपने परिवर्तनों को ट्रैक करने की आवश्यकता है, Sync Services मुख्य चाल में डब्ल्यूसीएफ गेटवे का उपयोग करके अच्छी तरह से चाल का समर्थन करता है और समर्थन करता है। इस उदाहरण में आपको Sync using SQL Express Client नमूना को शुरुआती बिंदु के रूप में उपयोग करने की आवश्यकता होगी, ध्यान दें कि यह SQL 2005 पर आधारित है, इसलिए आपको 2008 में चेंज ट्रैकिंग सुविधाओं का लाभ उठाने के लिए इसे अपडेट करना होगा। डिफ़ॉल्ट रूप से सिंक सेवा SQL CE का उपयोग करती है ग्राहकों पर, जो मुझे यकीन है कि आपके मामले में पर्याप्त नहीं है। आपको एक ऐसे सेवा की आवश्यकता होगी जो आपके वेब सर्वर पर चलती है जो समय-समय पर (जितनी बार चाहें उतनी बार 10 सेकंड हो सकती है) सिंक्रनाइज़() विधि चलाती है। यह आपके मुख्य डेटाबेस को स्थानीय रूप से किए गए परिवर्तनों के बारे में बताएगा और फिर वहां किए गए सभी परिवर्तनों के लिए सर्वर से पूछेगा। आप संग्रहीत प्रक्रियाओं को कॉल करने के लिए प्राप्त करने और SQL कोड लागू कर सकते हैं और आप विवादों को संभालने के लिए ईवेंट हैंडलर जोड़ सकते हैं (उदा। क्लाइंट अपडेट बनाम सर्वर अपडेट) और उन्हें प्रत्येक छोर पर तदनुसार हल करें।

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

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