2012-10-20 21 views
6

एरलैंग के साथ विकसित मेरे वेबस्केट सर्वर में, मैं प्रत्येक कनेक्शन के लिए, टाइमर (start_timer/3) का उपयोग करना चाहता हूं, कनेक्शन को समाप्त करने के लिए यदि टाइमआउट क्लाइंट से "पिंग" प्राप्त किए बिना समाप्त हो जाता है।एरलांग टाइमर स्केल करें?

क्या एरलांग टाइमर अच्छी तरह से स्केल करते हैं, मानते हैं कि मेरे पास बड़ी संख्या में ग्राहक सम्मेलन होंगे?

उत्तर

8

बड़ी संख्या में कनेक्शन क्या हैं? Erlangs VM टाइमर को संभालने के लिए आंतरिक रूप से टाइमर व्हील का उपयोग करता है, इसलिए यह कुछ हज़ार कनेक्शन तक बहुत अच्छी तरह से स्केल करता है। फिर आप परेशानी में भाग सकते हैं।

आमतौर पर चाल टाइमर पर एक साथ समूह को जोड़ना है। यह भी कर्नेल क्या करता है। उदाहरण के लिए यदि आपके पास एक टाइमर है जिसे 200ms में जागना है तो आप अगली बार समय पर आगे नहीं, बल्कि अगले 200ms टाइमर को आगे बढ़ाएं। इसका मतलब है कि आप कम से कम 200ms और शायद 400ms, 300ms सामान्य होने की प्रतीक्षा करेंगे। इस तरह के टाइमर अनुमानित करके, आप कई और रन चलाने में सक्षम हैं क्योंकि आप एक ही टाइमर को एक ही समय में बड़ी संख्या में प्रक्रियाओं को जगा सकते हैं। लेकिन टाइमर आवृत्ति और टाइमर की मात्रा के आधार पर मानक send_after/3 पर्याप्त हो सकता है।

किसी भी मामले में, मैं यह मानकर शुरू कर दूंगा कि यह स्केल कर सकता है और फिर समस्या को संभाल सकता है अगर यह उपरोक्त अनुमानित समय के साथ अनुमानित समय नहीं कर सकता है।

0

इस प्रकार के सर्वर के लिए एक सामान्य पैटर्न हल्के वजन Erlang प्रक्रियाओं का लाभ उठाने और प्रति कनेक्शन एक सर्वर बनाने के लिए है।

आप एक gen_server व्यवहार कि आप दोनों

  • अलग राज्य कनेक्शन (एक कनेक्शन के लिए प्रतीक्षारत, लॉगिन, ...) राज्य चर के साथ प्रबंधन करने के लिए,
  • प्रदान का उपयोग कर अपने सर्वर उदाहरण के लिए निर्माण कर सकते हैं
  • प्रत्येक कनेक्शन और प्रत्येक राज्य के लिए व्यक्तिगत टाइमआउट, वीएम और ओटीपी व्यवहार द्वारा प्रबंधित।

अच्छी बात यह है कि प्रत्येक सर्वर को एक ग्राहक का ख्याल रखना पड़ता है, इसलिए लिखना वाकई आसान है।

init चरण एक सर्वर कनेक्शन के लिए प्रतीक्षारत लॉन्च की जानी चाहिए,

फिर कनेक्शन पर सर्वर लॉन्च की जानी चाहिए एक नया अगले ग्राहक (आदर्श एक पर्यवेक्षक की शुरूआत simple_one_for_one बच्चे के माध्यम से) के लिए तैयार और कदम या आप जो कुछ भी प्रवेश करने के लिए जाना करना चाहता हूँ।

आपको साइट पर बहुत ही रोचक जानकारी मिल जाएगी LearnYouSomeErlang, विशेष रूप से अध्याय http://learnyousomeerlang.com/supervisors और निम्न में।