2013-06-28 5 views
14

मैं एंटरप्राइज़ सॉफ़्टवेयर का एक बेहद उच्च प्रदर्शन वाला टुकड़ा बना रहा हूं, जो प्रति सेकंड 50,000 से अधिक टीसीपी अनुरोध प्राप्त, संभाल और जवाब देगा। यह कई अमेज़ॅन ईसी 2 सर्वरों पर फैल जाएगा, लेकिन मैं एक सिंगल सर्वर जितना संभव हो सके प्रति सेकंड हजारों अनुरोधों को संभालने में सक्षम हूं (5k/सेक के लिए शूटिंग)। मैं शायद अमेज़ॅन लिनक्स चलाने वाले m1.xlarge उदाहरण का उपयोग करने जा रहा हूं।अधिक कुशल उच्च-प्रदर्शन सर्वर सॉकेट/थ्रेड डिज़ाइन

मैं बूस्ट एएसआईओ के साथ सी ++ में इस सॉफ्टवेयर का निर्माण कर रहा हूं, और मैं सॉकेट हैंडलिंग को आर्किटेक्ट करने का सबसे प्रभावी तरीका जानने की कोशिश कर रहा हूं। उदाहरणों में (http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/examples.html) मैं "HTTP सर्वर 2" को अनुकरण करने की ओर झुका रहा हूं क्योंकि हमारे पास कर्मचारी को एकाधिक वीसीपीयू होंगे।

क्या कोई वास्तव में प्रत्येक HTTP सर्वर उदाहरण के पेशेवरों/विपक्ष का वर्णन कर सकता है, और इस कई कनेक्शन से निपटने में, मैं वास्तव में किसी भी अतिरिक्त अंतर्दृष्टि (बूस्ट सॉकेट, और/या उच्च-थ्रूपुट ईसी 2 कॉन्फ़िगरेशन के संबंध में) की सराहना करता हूं।

बहुत बहुत धन्यवाद!

+2

जबकि प्रति सेकेंड 50k संदेश बिल्कुल धीमा नहीं है, मैं इसे "बेहद उच्च प्रदर्शन" नहीं कहूंगा। http://www.marketdatapeaks.com/ –

+0

मेरे लिए यह बेहद उच्च प्रदर्शन है।निस्संदेह यह स्टॉक मार्केट साइज नहीं है (बेशक वहां बड़ी मात्रा में अन्य कंपनियां बड़ी मात्रा में काम कर रही हैं), लेकिन उनमें से प्रत्येक 50k अनुरोधों में बैकएंड पर काम करने की एक अच्छी मात्रा है (केवल स्थिर फाइलों की सेवा नहीं), इसलिए मैं इसे काफी गहन मानें। क्या आपको इस तरह के किसी भी अनुभव के साथ कोई अनुभव है? धन्यवाद! – Harry

+0

मैं करता हूं, लेकिन दुर्भाग्य से मुझे आपके द्वारा उद्धृत उदाहरणों का कोई ज्ञान नहीं है। –

उत्तर

0

आप नॉकब्लॉकिंग सॉकेट में देखना चाहते हैं और इनपुट/आउटपुट/प्रोसेसिंग को अलग थ्रेड में फैला सकते हैं। प्रति हजार कनेक्शन 3 नए इनपुट/आउटपुट/प्रसंस्करण धागे बना सकते हैं?

उम्मीद है कि मदद करता है।

3

कुछ सुझाव:

आप क्या आपके सर्वर कर किया जा रहा है का उल्लेख नहीं था। क्या यह प्रति सेकंड 50 के नए अनुरोधों को स्वीकार और बंद करने जा रहा है, या सिर्फ स्थापित टीसीपी कनेक्शन से संदेश (अनुरोध) की सेवा कर रहा है। तो मेरी सलाह थोड़ा सा सामान्य होना पड़ सकता है। ASIO के बजाय सॉकेट अधिसूचना समाधान के रूप में epoll का उपयोग करने में http://www.kegel.com/c10k.html

  • निवेश:

    1. C10K समस्या पढ़ें। एपोल मुश्किल नहीं है।

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

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

  • +0

    बूस्ट एएसओओ का उपयोग करना चाहिए, http://stackoverflow.com/questions/3106304/boost-asio-on-linux-not-using-epoll – mark

    +0

    मेरे ऑप्टिनेशन में अब कोई सी 10 के समस्या नहीं है, यह लिंक भी है अतिरंजित .. हाल ही में मैंने एएसआईओ को स्वयं लिखित एपोल रिएक्टर से हमारी परियोजना को स्थानांतरित कर दिया। अब यह 10 टाइम्स अधिक कनेक्शन प्रबंधित कर सकता है और प्रत्येक बग्गी क्लाइंट पर अंतराल नहीं लगा सकता है; टीएलएस मैनुअल लाइब्रेरी उपयोग के लिए उत्पीड़न में भी बहुत अच्छी तरह से काम कर रहा है; अब सभी सर्वर टाइमर एपोल-संस्करण के विरोध में एसिंक हैं (जिनमें टाइमर के बारे में कुछ भी नहीं है)। एक एसिंक ऐप न केवल एपोल है; यह टाइमर, बग्गी क्लाइंट और कई अन्य चीजें हैं जो आप केवल उत्पादन में सीखेंगे – PSIAlt

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