2011-08-25 9 views
20

मैं जावा में एक एसएमएस अनुप्रयोग विकसित कर रहा हूं। मेरे ग्राहक एसएमएस के माध्यम से प्रश्न भेजते हैं जो एसएमएस गेटवे के माध्यम से http अनुरोधों के रूप में मेरे सर्वर को अग्रेषित किए जाएंगे। अब मेरा ऐप अनुरोधों को संसाधित करता है और एसएमएस गेटवे के माध्यम से फिर से ग्राहकों को प्रतिक्रिया भेजता है। प्रतिक्रिया के रूप में अधिकतम 300 वर्ण भेजे जाते हैं। मुझे बहुत अधिक यातायात (2000 अनुरोध/सेकंड) की उम्मीद है। मैं कुछ वेबहोस्टिंग कंपनी (मोचाहोस्ट पर विचार करने) के साथ अपना आवेदन होस्ट करना चाहता था। होस्टिंग (रैम, सीपीयू, आदि के अंतर) से पहले मुझे किन कारकों पर विचार करना चाहिए और यह भी प्रमुख बाधाओं का क्या होगा? अगर टॉमकैट सर्वर को उचित रूप से ट्यून किया गया तो समर्पित उच्च ट्रैफिक को संभाल सकता है? आपके सुझाव क्या हैं?टोमकैट पर 2000+ अनुरोध/सेकंड को कैसे संभालें?

कोई डेटाबेस इंटरैक्शन नहीं है (मैं केवल जावा हीप मेमोरी का उपयोग कर रहा हूं)। मैंने जेएमटर (100 अनुरोध/सेकंड) के साथ एक परीक्षण चलाया। मेरा ढेर मेमोरी उपयोग 35 एमबी था और औसत प्रतिक्रिया समय 532 एमएमएस था। और मैं भी किसी भी सत्र चर का उपयोग नहीं कर रहा हूं।

+0

प्रत्येक अनुरोध पर आपको किस तरह की प्रसंस्करण करने की आवश्यकता है? कोई डेटाबेस इंटरैक्शन? –

+0

@ माइक बिल्कुल कोई डेटाबेस इंटरैक्शन शामिल नहीं है। मैं केवल जावा मेमोरी का उपयोग कर रहा हूं। – ravi

+0

मैंने जेएमटर (100 अनुरोध/सेकंड) के साथ एक परीक्षण चलाया। मेरी ढेर मेमोरी उपयोग 35 एमबी थी और औसत responce समय 532ms था। – ravi

उत्तर

23

यह जानने के बिना कि आप पर अपने सर्वलेट में क्या कर रहे हैं, अपने प्रश्न का उत्तर देना मुश्किल है। लेकिन संक्षिप्त जवाब यह है कि वास्तव में टॉमकैट के साथ कुछ भी नहीं है।

हम वर्तमान में हमारे टोमकैट सर्वर के लिए डेल आर 410 (दोहरी क्वाड कोर, 32 जी रैम) का उपयोग करते हैं। एक आरईएसटी सेवा के लिए जो बैक एंड पर मेम्बबेस क्लस्टर से बात करता है, हम एक सर्वर पर ~ 15k req/second को आसानी से संसाधित कर सकते हैं (यह जर्सी जेएक्स-आरएस कार्यान्वयन का उपयोग कर रहा है)। वर्तमान में हमारे पास एफ 5 लोड बैलेंसर के पीछे इनमें से 4 हैं। इनमें से प्रत्येक अनुरोध औसत पर लगभग 10ms में सर्विस किया जाता है।

यह वास्तव में संक्षेप में क्या आता है; अनुरोध के साथ क्या करने की आवश्यकता है, इसे करने के लिए अपने सर्वलेट को कितना समय लगता है। आपके पास प्रत्येक समवर्ती अनुरोध के लिए एक धागा चल रहा है, इसलिए यदि आप 2000 req/sec की कोशिश कर रहे हैं और एक अनुरोध में प्रक्रिया के लिए 500ms लगते हैं ... आपको कुछ हार्डवेयर की आवश्यकता होगी। मुद्दा tomcat नहीं है, लेकिन आपके सर्वलेट के लिए उपलब्ध संसाधनों में से एक है।

+1

मैंने आपकी पोस्ट के बारे में यह धागा शुरू किया: http://stackoverflow.com/questions/7970803/tomcat-doing-15k-req-second-on-a-single-server-using-jersey-jax-rs उम्मीद करते हैं कि आप चीम कर सकते हैं – codecompleting

+0

क्या आपने TIME_WAIT के लिए ओएस स्तर पर कुछ भी ट्विक किया था? टोमकैट कॉन्फ़िगरेशन सेटिंग्स के बारे में क्या: कनेक्शनटाइमआउट, keepAliveTimeout, maxKeepAliveRequests। प्रति सेकेंड 2 के अनुरोधों के साथ एक समान ऐप रखें लेकिन थोड़ी देर के बाद टॉमकैट सुस्त है। – codecompleting

+0

मुझे यह जवाब पसंद है – thonnor

1

ऐसा लगता है कि आपको क्लस्टर/लोड संतुलन दृष्टिकोण को लागू करना पड़ सकता है। उदाहरण के लिए this पर एक नज़र डालें।

6

मामूली हार्डवेयर पर डिफ़ॉल्ट सेटिंग्स वाले एक एकल टोमकैट सर्वर को आसानी से 2k अनुरोध/सेकेंड को संभालना चाहिए, मानते हुए कि प्रति अनुरोध करने के लिए बहुत अधिक काम नहीं है। यदि एक अनुरोध को संसाधित करने में 500+ एमएस लगते हैं, तो आपको शायद थ्रेड पूल में धागे की संख्या को टक्कर देने की आवश्यकता होगी, और आप सीमाओं को धक्का शुरू कर सकते हैं। वैकल्पिक रूप से, यदि आप उस काम में से कुछ को किसी अन्य थ्रेड पर ऑफ़लोड कर सकते हैं, तो यह प्रतिक्रिया समय को तेज करेगा, और आप डिफ़ॉल्ट 200 धागे रख सकते हैं। फिर यह सिर्फ एक सवाल है कि क्या आपका कार्यकर्ता धागा आने वाले अनुरोधों के साथ जारी रख सकता है। यह इस बात पर निर्भर करेगा कि आपका भार निरंतर या विस्फोटक है और आप प्रसंस्करण में कितना देरी स्वीकार कर सकते हैं। यह एचए, डीआर, और आपके स्वीकार्य डाउनटाइम को भी संबोधित नहीं करता है। यह सब एक बड़ा संतुलन अधिनियम है, और केवल एक कट-एंड-सूखे जवाब देने के लिए बहुत अधिक चर हैं।

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