8

हमारे पास एक बड़ी उच्च-प्रदर्शन सॉफ्टवेयर प्रणाली है जिसमें कई इंटरैक्टिंग जावा प्रक्रियाएं शामिल हैं (ईजेबी नहीं)। प्रत्येक प्रक्रिया एक ही मशीन या एक अलग मशीन पर हो सकती है।जावा के लिए ऑफ-द-शेल्फ घड़ी सिंक्रनाइज़ेशन समाधान है?

कुछ घटनाएं एक प्रक्रिया में उत्पन्न होती हैं, और फिर आगे की प्रक्रिया के लिए अन्य प्रक्रियाओं के विभिन्न तरीकों से प्रचारित की जाती हैं।

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

समस्या, निश्चित रूप से घड़ी घड़ी सिंक्रनाइज़ेशन है। तो यहां मेरे प्रश्न हैं:

1) यदि सभी प्रक्रियाएं एक ही मशीन पर हैं, तो क्या यह गारंटी है कि वर्तमान समय माइमिस कॉल के समय सटीक होगा? क्या आईटीपी की त्रुटियों पर कुछ बाध्य है?

2) यदि कुछ प्रक्रियाएं अलग-अलग मशीनों पर हो सकती हैं, तो क्या घड़ी सिंक्रनाइज़ेशन के लिए एक ऑफ-द-शेल्फ समाधान (जो भी मुक्त या खुला स्रोत है) है? मैं अधिमानतः ऐसे समाधान की तलाश में हूं जो ऑपरेटिंग सिस्टम (विंडोज या लिनक्स) को बाईपास कर सकता है और सीधे जावा से काम कर सकता है। मैं आदर्श रूप से ऐसा कुछ ढूंढ रहा हूं जो माइक्रोसेकंड सटीकता पर काम कर सके। मैंने एनटीपी के बारे में सोचा है, लेकिन मुझे यकीन नहीं है कि यह ओएस के बजाए जावा के माध्यम से उपलब्ध है, और मुझे इसकी जटिलता के बारे में निश्चित नहीं है।

3) क्या किसी विशेष कॉन्फ़िगरेशन (या किसी भी समाधान का उपयोग करने वाले अंत में) में एनटीपी का उपयोग करने में त्रुटि का मार्जिन निर्धारित करने का कोई तरीका है ताकि मैं विलंबता की हमारी गणना पर त्रुटि का मार्जिन दे सकूं?

धन्यवाद!

उत्तर

4

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

घड़ियों को समन्वयित किया जाता है ताकि समवर्ती घटनाएं सही अनुक्रमिक क्रम में रखी जा सकें। सिस्टम घड़ी को सिंक्रनाइज़ करने के बजाय ऐसा करने के अन्य तरीके हैं ... जब तक कि वे एक सामान्य भौतिक घड़ी साझा नहीं करते ... काफी मुश्किल है।

मेरी सिफारिश:

पढ़ें: वितरित कम्प्यूटिंग: सिद्धांतों, एल्गोरिदम और सिस्टम

विशेष रूप से: अध्याय 3, तार्किक समय

एनटीपी त्रुटि मार्जिन के संदर्भ में, वहाँ समाधान कर रहे हैं

संपादित करें

इसके अलावा Cheeso के पद पर, मैं

http://www.uniforum.org/publications/ufm/apr96/opengroup.html

http://sourceforge.net/projects/freedce

वहाँ शायद वहाँ DCE जावा बाइंडिंग पाया।

+0

मुझे कॉलेज से पुस्तक याद है। हमारी परियोजना अभी कुछ त्वरित और उचित रूप से सटीक की तलाश में है, हम इस तरह की किसी चीज़ की आवश्यकता वाले पहले व्यक्ति नहीं हो सकते हैं। मैं सोच रहा था कि शेल्फ कार्यान्वयन बंद है या नहीं। – Uri

+0

मुझे पता नहीं है, लेकिन JVM के साथ विलंबता बहुत अधिक होगी। कार्यक्रम पर्यावरण अत्यधिक युग्मित नहीं है और रोक सकता है (जीसी पर और इसी तरह)। हालांकि मैं जावा विशेषज्ञ नहीं हूं। –

0

पुराने DCE ("Distributed Computing Environment") में उन सभी क्षमताओं के साथ एक वितरित समय सिंच समाधान होता था। इसे डीटीएस कहा जाता था। व्यवस्थापक सिंक करने के लिए मशीनों के सेट को कॉन्फ़िगर कर सकता है, और विलंबता या अनिश्चितता की गणना और उपलब्ध था। अगर कोई मशीन सिंक से बाहर हो जाती है, तो घड़ी को धीरे-धीरे समायोजित किया जाता है जब तक कि यह दोबारा सिंक न हो जाए। एक गारंटी थी कि किसी भी मशीन पर समय पिछड़ा नहीं किया जाएगा (बुनियादी भौतिकी के उल्लंघन में)। "वास्तविक दुनिया" के साथ समन्वयित रहने के लिए नेटवर्क को कम से कम एक एनटीपी इनपुट की आवश्यकता थी।

मुझे नहीं पता कि उस समय सिंक सामान, या सामान्य रूप से डीसीई कोड क्या हुआ।

मुझे लगता है कि आपको "जावा में" समाधान की आवश्यकता नहीं है। आपको वितरित मशीनों के सेट के घड़ियों को सिंक करने की आवश्यकता है। जावा ऐप सिर्फ वह चीज है जो मशीनों पर चलती है।

+0

मेरी समझ यह थी कि अधिकांश ओएस त्रुटियों के उच्च मार्जिन (लगभग 10-100ms) के साथ एक सिंक्रनाइज़ेशन विधि का उपयोग करते हैं, जो अधिकांश प्रथाओं के लिए स्वीकार्य है। मैं जावा के माध्यम से ऐसा करने के बारे में सोच रहा था क्योंकि मैं उच्च सटीकता वाली सेवा का उपयोग करने में सक्षम हो सकता हूं। – Uri

+0

@ चेसियो - डीसीई अपने समय से आगे था :) –

+0

@Uri - हाँ मुझे लगता है कि आप एक उच्च सटीकता समाधान चाहते हैं। मेरा कहना है कि किसी भी जावा कोड से स्वतंत्र रूप से सिंक करना संभव हो सकता है। जावा एप्लिकेशन से समय सिंक भाग को पूरी तरह से कारक करना संभव हो सकता है, ताकि जावा ऐप में एक डिज़ाइन धारणा यह हो कि "समय सिंक्रनाइज़ किया गया है"। लेकिन वह डिज़ाइन पसंद आपके लिए है! बी – Cheeso

2

मैं वास्तव में केवल एनटीपी का उपयोग करता हूं। यह इंटरनेट पर भी बहुत सटीक है, और एक लैन पर यह भी बेहतर होना चाहिए। विकिपीडिया के अनुसार [1],

एनटीपीवी 4 आम तौर पर सार्वजनिक इंटरनेट पर 10 मिलीसेकंड (1/100 एस) के भीतर समय बनाए रख सकता है, और स्थानीय क्षेत्र नेटवर्क में 200 माइक्रोसॉन्ड (1/5000 एस) या बेहतर की प्राप्तियां प्राप्त कर सकता है आदर्श परिस्थितियों में।

इसलिए आपकी स्थितियों के लिए यह पर्याप्त हो सकता है यदि आपकी स्थितियां "आदर्श" हैं। एनटीपी इतने लंबे समय से पर्याप्त रहा है कि इसके साथ सबकुछ काम करता है। मुझे ओएस के बजाय जावा के माध्यम से ऐसा करने का कोई कारण नहीं दिखता है। यदि ओएस सिंक हो गया है, तो जावा भी होगा।

[1] Wikipedia: Network Time Protocol

1

मैं अपने दम पर कुछ प्रयास करने के बाद इस सूत्र का सामना करना पड़ा (पहली खोज की है चाहिए!) http://snippets.dzone.com/posts/show/11345 - जो है एक अच्छा तरीका हो सकता है, बुरा हो सकता है, लेकिन यह वितरित (serverless) अच्छा।

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