वेब सेवा का उपयोग करने वाले डेस्कटॉप आधारित क्लाइंट के ऑफ़लाइन विफलता का सबसे अच्छा तरीका क्या है?


13

मेरे पास तीन आने वाली परियोजनाएं हैं जो एक आम समस्या साझा करती हैं:

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

मेरा समाधान

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

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

डेस्कटॉप क्लाइंट (अधिमानतः पतले) को जावा (अधिक विशेष रूप से नेटबीन) और सिम्फनी 2 के साथ वेब सिस्टम के साथ लागू किया जाएगा। क्लाइंट के लिए दो प्रोजेक्ट्स में हार्डवेयर इंटीग्रेशन की जरूरत होती है, इसलिए वेब टेक्नोलॉजी के साथ डेस्कटॉप एप्लिकेशन बनाना (जैसे Appcelerator Titanium) एक बड़ा दर्द हो सकता है।

मेरा प्रश्न

  1. एक बेहतर समाधान क्या है, जो न्यूनतम प्रयास के साथ अधिकतम दक्षता का अर्थ है (और अधिमानतः कोई अतिरिक्त लागत नहीं, जैसे स्थानीय ऑपरेशन के लिए बैकअप सर्वर खरीदना)?

  2. इससे पहले किसने और क्या निपटाया है? आपने अपनी समस्या को कैसे हल किया? आप क्या सबक साझा कर सकते हैं?

  3. आपने सिंक्रनाइज़ेशन के साथ कैसे व्यवहार किया?

संपादित करें: बिंदु # 3 में मेरे प्रश्न के लिए एक लापता हिस्सा जोड़ा गया

जवाबों:


3

मैं जानता हूँ कि अपने प्रश्न जावा है, लेकिन मैं वास्तव में की तरह इस संदेश बात के इस प्रकार के लिए बस शैली की वास्तुकला।

मूल रूप से जब संदेश भेजे जाते हैं तो उन्हें संभावित रूप से दो प्रतिक्रियाएं मिलती हैं। पहला लोकल कैश से है, दूसरा सर्वर से कनेक्ट होने के बाद आता है।

मुझे पूरा यकीन है कि आप इस वास्तुकला (राइनो बस और निब) को अपने (एमक्यू और हिब) के लिए बहुत आसानी से अनुकूलित कर सकते हैं।


हाँ, मैं उस तरह के संदेश उन्मुख वास्तुकला के लिए देख रहा था। कैश तर्क और आपके लिंक में अंतिम वाक्य ने मुझे आश्वस्त किया।
11'11

10

स्थानीय रूप से सब कुछ करें , और समय-समय पर सिंक करें

यहाँ है कि मैं क्या करूँगा अगर मैं आप थे (मुझे जावा में सिंक फ्रेमवर्क की जानकारी नहीं है जैसे कि हमारे पास .NET में है)।

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

भले ही आप फिर से कनेक्ट करें, उस टाइमस्टैम्प का उपयोग नए डेटा को बाहर निकालने के लिए किया जाएगा, फिर स्थानीय स्तर पर उत्पन्न नए ऑर्डर भेजें।

फिर आप दो टाइमस्टैम्प बनाए रखेंगे। एक जब आदेश बनाया गया है (स्थानीय या ऑनलाइन) को परिभाषित करने के लिए और एक जब यह सर्वर द्वारा दर्ज किया गया है।

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


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

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

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

@dukeofgaming: मेरे मामले में, आदेशों को वेब सहित किसी भी पीओएस (एप्लिकेशन को एक ऑर्डर लेने वाली प्रणाली और ऑर्डर प्रोसेसिंग सिस्टम नहीं) के रूप में इस्तेमाल किया जा सकता है। देश में सब कुछ वितरित किया गया। वियोग के मामले में हर डेस्कटॉप को स्वायत्त होना आवश्यक था। एमक्यू उस परिदृश्य में भी काम करेगा, इसलिए मैं इसके खिलाफ नहीं हूं। मुझे लगता है कि मास्टर सर्वर और क्लाइंट के बीच मजबूत डेटा सिंक को लागू करना अधिक आसान है। इसलिए, मास्टर सर्वर पर CRUD ऑपरेशन एक विकल्प नहीं था।

2
+1 - यह है कि मैंने इसे अतीत में कैसे देखा है। मैं यह भी कहूंगा कि प्राथमिक कुंजी के रूप में अद्वितीय पहचानकर्ता (गाइड) का उपयोग चीजों को बहुत सरल करता है। ऐसा करना उन चीजों में से एक है जो वास्तव में आपके जीवन को आसान बनाता है यदि आपको सिंक्रनाइज़ेशन की आवश्यकता है।
स्कॉट व्हिटलॉक

1

या आपको कभी-कभी कनेक्टेड सिस्टम डेटाबेस कार्यान्वयन को देखना चाहिए जो सर्वर पर दूरस्थ क्लाइंट्स को सिंक करने का काम करता है। (SQL Server में एक हद तक SQL CE के साथ यह है, Outlook ऐसा करता है)।

इस तरह, आप अपने सभी बदलाव स्थानीय स्तर पर एक छोटे पदचिह्न डेटाबेस में कर सकते हैं (यह संस्करण / तार्किक टाइमस्टैम्प आदि को बनाए रखता है ताकि आपको पीसी घड़ियों आदि के बारे में चिंता न करें) और जब भी आप ऑनलाइन जाते हैं, तो आप इसे मुख्य के साथ सिंक करते हैं। सर्वर।

जब सिस्टम अधिकांश समय ऑनलाइन नहीं हो सकता है तो मैं एक REST समाधान के लिए नहीं जाऊंगा।


क्या आप एक वितरित डेटाबेस का वर्णन कर रहे हैं ?, क्या आप उस पर विस्तार कर सकते हैं?
ड्यूकफैगिंग

नहीं - यह वास्तविक विश्व अर्थों में वितरित डीबी नहीं है। एक वितरित DB आमतौर पर लगभग सब कुछ ऑनलाइन होने की उम्मीद करता है, लेकिन साथियों के बीच प्रतिकृति का तर्क जो नीचे चला गया वह यहां भी लागू होता है। कुछ डेस्कटॉप / डिवाइस डेटाबेस हैं, जिनमें प्रतिकृति कार्य करने की सुविधा है ( blogs.msdn.com/b/stevelasker/archive/2007/03/18/… ) - तो आपको बस इतना करना है कि इस डिवाइस को db सेटअप करें, यहां अपने परिवर्तनों को लॉग इन करें और जब आप कंप्यूटर नेटवर्क से कनेक्ट करते हैं, तो सिंक कॉल करें - और यह आपके लिए मुख्य सर्वर पर डेटा ट्रांसफर करेगा।
सुबु शंकरा सुब्रमण्यन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.