2012-10-29 16 views
5

मैं एक मुड़ शंख SSH सर्वर है और विशिष्ट परिदृश्य यह है: OpenSSH क्लाइंट के माध्यम सेमुड़ शंख - प्रवाह नियंत्रण

Git >> --- WAN1 --- >> मुड़ शंख svr >> --- WAN2 - >> Git सर्वर

वहाँ अवसरों कि 'Git पुश' की तुलना में मैं WAN2 पर प्रॉक्सी कर सकते हैं WAN1 से अधिक तेजी से डाटा भेज रहा है हो जाएगा, तो मैं (अच्छी तरह से किसी भी टीसीपी पैकेट से पहले धीमा करने के लिए ग्राहक बताने की आवश्यकता नुकसान टिस्ड सर्वर पर बहुत अधिक बफरिंग से बचने के लिए टीसीपी विंडो आकार समायोजन का कारण बनता है। एसएसएच के लिए आरएफसी पढ़ना यह एडी विंडो के माध्यम से स्वीकार नहीं किया जाता है, इसके बाद यह गिट पुश को सिस्सेल पर ब्लॉक करने के लिए openssh द्वारा समर्थित पाइप पर लिखने का कारण बनता है।

शंख को देखते हुए/ssh/connection.py: ssh_CHANNEL_DATA (स्वयं, पैकेट) डीईएफ़ विधि में L216: मैं 0 करने के लिए localWindowSize स्थापित करने के साथ ऐसा कर सकते हैं, और इनफ्लाइट डेटा अभी भी विधेय के रूप में पहुंचेंगे पर 230 अभी भी चाहिए पास करें (स्थानीय विन्डो लिफ्ट दें)। मैं सोच रहा हूं कि यह सही दृष्टिकोण है या क्या मैं ट्विस्ट एसएसएच कंचन के साथ प्रवाह नियंत्रण के संबंध में कुछ अंधेरे से स्पष्ट हूं? *

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

उत्तर

3

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

एक सामान्य सिद्धांत के रूप में, शायद आप नेटवर्क के बीच में बहुत कम बफर करना चाहते हैं। ("बफर ब्लोट" पर जिम गेटिस के नोट्स प्रबुद्ध हैं।) तो यह स्पष्ट है कि आप एक समझदार सवाल पूछ रहे हैं।

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

एक विकल्प के रूप में, आप इस राउटर में एसएसएच की तुलना में एक अलग परत पर सुरंग कर सकते हैं। यदि आप निचले स्तर पर सुरंग करते हैं तो आपके पास एक एंड-टू-एंड टीसीपी कनेक्शन है, तो टीसीपी स्टैक को एक अच्छा विंडो आकार पता होना चाहिए।

आप एक उच्च स्तर पर सुरंग, मध्यवर्ती सर्वर के लिए एक git push कर और फिर एक post-receive हुक का उपयोग कर वस्तुओं बाकी का रास्ता पुश करने के लिए से है, तो आप अधिक से अधिक बफरिंग लेते हैं (यह सब डिस्क पर spooled है) और तेज ग्राहक के लिए प्रतिक्रिया समय, हालांकि कुल विलंबता। इसे लागू करने के लिए बहुत आसान होने का विशिष्ट लाभ है।

+0

"मुझे लगता है कि क्लाइंट से डेटा आने पर कॉन्च आपके कोड में एक फ़ंक्शन कॉल करता है। क्या यह उस कॉल से वापस नहीं लौटने के लिए पर्याप्त है जब तक कि आप बैकएंड सर्वर पर डेटा वितरित नहीं कर लेते?" यह उत्पादन में काम नहीं करेगा क्योंकि ट्विस्ट रन एक घटना लूप पर यदि हम डेटा आने पर फ़ंक्शन में अवरुद्ध करते हैं तो यह पहले स्थान पर ट्विस्ट का उपयोग करने के किसी भी लाभ को हटा देगा। जबकि मैं आगे बढ़ता रहता हूं और सोचता हूं कि मैं अंततः गोलांग में माइग्रेट करूंगा जहां क्रिप्टो लाइब्रेरी एक स्वच्छ एसएसएच कार्यान्वयन का खुलासा करती है जहां मैं इन चीजों को नियंत्रित कर सकता हूं। –