एक छाया नेटवर्क के खिलाफ यातायात कैसे खेलें?


12

क्षमा करें यदि यह एक नया सवाल है ...

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

मुझे पूरा यकीन है कि इसका वर्णन करने के लिए एक शब्द है, लेकिन 'ब्रिज' सही नहीं लगता, न ही 'रिप्ले'।

किसी को भी इस तकनीक कहा जाता है और / या यह पूरा करने के लिए इस्तेमाल किया जा सकता है क्या उपकरण के साथ मेरी मदद कर सकते हैं?

मुझे लगता है कि मुझे उन तकनीकों के बारे में सुनना चाहिए जो प्रभावी रूप से 'लॉग को फिर से खेलना' वाली तकनीकों के बारे में सुना है, लेकिन वास्तविक गति या वितरण में वास्तव में मुश्किल है।

और, हम आउटपुट की 'शुद्धता' को सत्यापित करने की कोशिश नहीं कर रहे हैं, लेकिन यह सुनिश्चित कर लें कि हम नए बुनियादी ढांचे में त्रुटियों / स्टैकट्रैक्स / आदि को न देखें।


ऐसा करने का स्पष्ट तरीका है (इनबाउंड ट्रैफ़िक को डुप्लिकेट करने के लिए मिरर पोर्ट के साथ स्विच का उपयोग करना) ऐसा लगता है कि यह उन समस्याओं का कारण होगा जब "छाया" सर्वर जवाब देने की कोशिश करते हैं। अब आप मुझे अभद्र तरीके से दिलचस्पी ले रहे हैं।
डेरफक

@DerfK: यदि आप रिमोट क्लाइंट के टीसीपी / आईपी स्टैक का अनुकरण करने के लिए कोड लिखने के लिए नहीं जा रहे हैं तो सरल परत 2 या 3 कैप्चर को फिर से लिखना समस्याग्रस्त होगा। जब तक आप बहुत सारे कोड नहीं लिखना चाहते, तब तक लेयर 7 पर कब्जा करना अधिक रास्ता है।
इवान एंडरसन

मुझे नहीं लगता कि पैकेट-स्तर पर इसे लागू करना कठिन है। कृपया tcpcopy ( github.com/wangbin579/tcpcopy ) का संदर्भ लें

जवाबों:


7

मैं इसे व्यक्तिगत रूप से "रीप्ले सेशन के माध्यम से लोड परीक्षण" कहूंगा। मैं इस तरह की परीक्षण तकनीक के लिए किसी भी सरल कैच-ऑल टर्म को नहीं जानता।

इस तरह की लोड टेस्टिंग के लिए मैंने जो बेसिक स्ट्रैटिजी देखी है, वह प्रोडक्शन सिस्टम से लॉग फाइल को निगलना और एक टेस्ट सिस्टम पर फिर से खेलना है।

लॉग फ़ाइलों से अनुरोधों को पुन: चलाने के लिए आप JMeter या Apache Bench जैसे टूल का उपयोग कर सकते हैं । यदि आप बहुत ही जटिल क्लाइंट / सर्वर इंटरैक्शन (मूल लॉग स्ट्रीम पर आधारित विशिष्ट टाइमिंग विवरण के साथ) को पुन: देखने की उम्मीद में हैं, तो आप अपने आवेदन के लिए (दौड़ की स्थिति, समय से संबंधित बग आदि की तलाश में) व्यायाम कर सकते हैं। अनुप्रयोग-विशिष्ट परीक्षण उपकरण लिखने पर ध्यान दें जो ग्राहकों को बड़े पैमाने पर अनुकरण करते हैं।

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

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


1

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

ApacheBench, जैसा कि एक अन्य उपयोगकर्ता ने उल्लेख किया है, वास्तव में इन दिनों ज्यादा इस्तेमाल नहीं किया गया है। यह 10 साल पहले अधिक मददगार था, जब आपको यह पता लगाना था कि एक भारी लोड के तहत एक स्थिर HTML दस्तावेज़ या JPEG को कितनी जल्दी काम किया जा सकता है। यह पुनः लोड, पुनः लोड करने, फिर से लोड करने और अपने वेब ब्राउज़र पर बार-बार क्लिक करने वाले लोगों के समूह से बहुत अधिक भिन्न नहीं है। अधिक जटिल वर्कफ़्लो वाले वेब ऐप का परीक्षण करते समय आपको कुछ अधिक स्मार्ट होने की आवश्यकता होती है।


1

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

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


1

मैं नेटफ्लिक्स मीटअप में इस बारे में @adrianco से पूछ सकता था ।

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

लाभ हैं:

  • आपके परीक्षण ("अंधेरे") बुनियादी ढांचे के खिलाफ 'वास्तविक दुनिया' यातायात पैटर्न
  • रिकॉर्ड करने की जरूरत नहीं है और फिर से खेलना है

दोष:

  • होगा आपके उत्पादन बक्से पर छोड़ करने के लिए धागे / सीपीयू चक्र है
  • आपके परीक्षण के बुनियादी ढांचे पर निर्भरता आपके उत्पादन बक्से को प्रभावित कर सकती है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.