2008-09-09 11 views
8

मेरे पास एक ऐसा एप्लिकेशन है जो सॉलारिस पर जावा और सी ++ का मिश्रण है। कोड के जावा पहलू वेब यूआई चलाते हैं और उन डिवाइसों पर राज्य स्थापित करते हैं जिनके साथ हम बात कर रहे हैं, और सी ++ कोड डिवाइस से वापस आने वाले डेटा की रीयल-टाइम क्रंचिंग करता है। साझा स्मृति का उपयोग जावा कोड से सी ++ कोड तक डिवाइस स्थिति और संदर्भ जानकारी को पास करने के लिए किया जाता है। जावा कोड अपने राज्य को जारी रखने के लिए PostgreSQL डेटाबेस का उपयोग करता है।सॉलारिस पर जावा/सी ++ के लिए उच्च उपलब्धता और स्केलेबल प्लेटफ़ॉर्म

हम कुछ बहुत ही गंभीर प्रदर्शन बाधाओं में भाग ले रहे हैं, और अभी हम स्केल कर सकते हैं एकमात्र तरीका स्मृति और सीपीयू मायने रखता है। साझा स्मृति डिजाइन के कारण हम एक भौतिक बॉक्स पर फंस गए हैं।


सी ++ कोड द्वारा यहां वास्तव में बड़ी हिट ली जा रही है। वेब इंटरफ़ेस को डिवाइस को कॉन्फ़िगर करने के लिए काफी हल्के ढंग से उपयोग किया जाता है; जहां हम वास्तव में संघर्ष कर रहे हैं डेटा वॉल्यूम्स को संभालने के लिए है जो डिवाइस कॉन्फ़िगर किए जाने पर वितरित करते हैं।

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

मुझे ध्यान रखना चाहिए कि हमारे पास डिवाइस द्वारा उपयोग किए जाने वाले प्रोटोकॉल पर कोई नियंत्रण नहीं है, और स्थिति में कोई संभावित मौका नहीं है।


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

अभी मैं टेराकोटा को जावा कोड को स्केल करने के तरीके के रूप में देख रहा हूं, लेकिन मुझे यह पता लगाने के लिए नहीं मिला है कि सी ++ मिलान करने के लिए कैसे स्केल करें।

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

यदि आपको वह कार्य करना है जो मुझे दिया गया है, तो आप क्या करेंगे?

संपादित करें: @ जॉन चैनिंग द्वारा उपलब्ध कराए गए आंकड़ों के आधार पर, मैं दोनों GigaSpaces और रत्न को देख रहा हूँ। ओरेकल कोहेरेंस और आईबीएम ऑब्जेक्टग्रिड केवल जावा ही दिखते हैं।

उत्तर

5

पहली बात यह है कि मैं डेटा प्रवाह को मैप करने के लिए सिस्टम का एक मॉडल तैयार करता हूं और यह समझने की कोशिश करता हूं कि बाधा झूठ कहां है। यदि आप pipeline के रूप में अपने सिस्टम को मॉडल कर सकते हैं, तो आप लगातार बाधाओं के सिद्धांत का उपयोग करने में सक्षम होना चाहिए (अधिकांश साहित्य व्यावसायिक प्रक्रियाओं को अनुकूलित करने के बारे में है लेकिन यह सॉफ्टवेयर में समान रूप से लागू होता है) लगातार प्रदर्शन में सुधार और बाधा को खत्म करने के लिए।

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

फिर मैं Pareto Principle (80/20 rule) का उपयोग उन छोटी सी चीजों को चुनने के लिए करूंगा जो सबसे बड़ी लाभ अर्जित करेंगे और केवल उन पर ध्यान केंद्रित करेंगे।

क्षैतिज जावा अनुप्रयोग को स्केल करने के लिए, मैंने Oracle Coherence बड़े पैमाने पर उपयोग किया है। हालांकि कुछ इसे बहुत महंगे distributed hashtable के रूप में खारिज करते हैं, कार्यक्षमता उससे कहीं अधिक समृद्ध है और उदाहरण के लिए, आप सीधे C++ code से कैश में डेटा तक पहुंच सकते हैं।

क्षैतिज रूप से आपके जावा कोड को स्केल करने के लिए अन्य विकल्प Giga Spaces, IBM Object Grid या Gemstone Gemfire होगा।

यदि आपका सी ++ कोड स्टेटलेस है और पूरी तरह से संख्या क्रंचिंग के लिए उपयोग किया जाता है, तो आप ICE Grid का उपयोग करके प्रक्रिया को वितरित करने पर विचार कर सकते हैं जिसमें आपके द्वारा उपयोग की जा रही सभी भाषाओं के लिए बाइंडिंग है।

+0

यहां कुछ उत्कृष्ट लिंक हैं, जॉन। धन्यवाद। मुझे कुछ पढ़ने के लिए मिला है। – Andrew

1

आपको किनारे और बाहर स्केल करने की आवश्यकता है। हो सकता है कि message queue की तरह कुछ सामने और क्रंचिंग के बीच बैकएंड हो सकता है।

1

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

डेटाबेस कोड के लिए, यह कितनी बार बदल रहा है? क्या आप इस समय कैशिंग देख रहे हैं? मुझे लगता है कि आपने डीबी को तेज करने के लिए डेटा पर इंडेक्स आदि को देखा है?

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

क्या डेटाबेस व्यवसाय डेटा संग्रहीत कर रहा है, या इसका उपयोग जावा और सी ++ के बीच डेटा पास करने के लिए भी किया जा रहा है? आप कहते हैं कि आप जेएनआई साझा नहीं कर रहे हैं? एपीपी में वर्तमान में बहु-थ्रेडिंग का स्तर क्या है? क्या आप प्रकृति या एसिंक में सिंक्रोनस होने के रूप में कोड का वर्णन करेंगे?

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

एचए आवश्यकताएं क्या हैं? अर्थात। बस राज्य की जानकारी? क्या सत्र डेटा को क्लस्टर करके वेब स्तर पर एचए किया जा सकता है?

डीबी एक और मशीन पर चल रहा है?

डीबी कितना बड़ा है? क्या आपने अपने प्रश्नों को अनुकूलित किया है यानी। स्पष्ट आंतरिक/बाहरी जुड़ने का उपयोग करने की कोशिश की कभी-कभी घोंसला वाले उप प्रश्नों (कुछ समय) बनाम मदद करता है। (फिर एसक्यूएल आंकड़े देखें)।