2008-09-22 17 views
7

मैं टेराकोटा का मूल्यांकन कर रहा हूं ताकि मुझे वर्तमान में रैम-बाउंड वाले एप्लिकेशन को स्केल करने में मदद मिल सके। यह एक सहयोगी फ़िल्टर है और प्रति उपयोगकर्ता के बारे में 2 किलोबाइट डेटा स्टोर करता है। मैं अमेज़ॅन के ईसी 2 का उपयोग करना चाहता हूं, जिसका मतलब है कि मैं 14 जीबी रैम तक सीमित हूं, जो मुझे लगभग 7 मिलियन उपयोगकर्ताओं के लिए एक प्रभावी प्रति-सर्वर ऊपरी सीमा प्रदान करता है। मुझे इससे आगे बढ़ने में सक्षम होना चाहिए।क्या मैं रैम-गहन अनुप्रयोग को स्केल करने के लिए टेराकोटा का उपयोग कर सकता हूं?

अब तक मेरे पढ़ने के आधार पर मैं इकट्ठा करता हूं कि टेराकोटा में प्रत्येक सर्वर पर उपलब्ध रैम की तुलना में क्लस्टर्ड ढेर हो सकता है। क्या यह 30 जीबी या उससे अधिक का प्रभावी क्लस्टर्ड ढेर होना व्यवहार्य होगा, जहां प्रत्येक सर्वर केवल 14 जीबी का समर्थन करता है?

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

+0

एक शर्मीली रेडिस क्लस्टर एक आसान दृष्टिकोण हो सकता है, क्या इस परिदृश्य में काम कर सकता है? – cobbzilla

उत्तर

4

मैं कहूंगा कि उत्तर इसके लिए एक योग्य हां है। टेराकोटा आपको एक एकल जेवीएम के आकार से बड़े क्लस्टर वाले ढेर के साथ काम करने की अनुमति देता है हालांकि यह सबसे आम उपयोग केस नहीं है।

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

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

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

एक संख्या के दृष्टिकोण से, 30 जीबी डेटा इंडेक्स करना संभव है, इसलिए यह किसी भी कठोर सीमा के करीब नहीं है।

+0

त्वरित अनुवर्ती: मैंने सुना है कि यदि आप टेराकोटा के साथ हैश मैप का उपयोग करते हैं, तो मान वितरित किए जा सकते हैं, लेकिन चाबियाँ हर जगह प्रतिबिंबित की जाएंगी। क्या ये सच है? क्या एक अलग नक्शा संग्रह अलग-अलग व्यवहार करेगा? – sanity

+0

सही। हैश मैप, ConcurrentHashMap, आदि सभी नोड्स पर एक पूर्ण कुंजी सेट बनाए रखेंगे। अगर हम ऐसा नहीं करते हैं, तो यह जानना मुश्किल है कि कुंजी की अनुपस्थिति गैर-स्थानीय कुंजी या अनुपलब्ध कुंजी के कारण है या नहीं। एक आम विकल्प मैप्स के मानचित्र बनाने के लिए है ताकि अधिक डेटा को पेज आउट किया जा सके। –

+0

मुझे यह इंगित करना चाहिए कि यह कार्यान्वयन विवरण है जो समय पर बिंदु है। एलेक्स सही है इस तरह से करना आसान है लेकिन कीसेट वर्चुअल बनाना असंभव नहीं है यह सिर्फ काम है;) –