मेरी चुनौती
हमारे पास विभिन्न साइटों पर एक्सचेंज सर्वर हैं, लेकिन जहाजों पर भी। समुद्र में जब उपग्रह लिंक के माध्यम से जहाज हमारे नेटवर्क से जुड़े होते हैं, लेकिन बंदरगाह में वाईफाई पुलों पर स्विच करते हैं।
उच्च विलंबता (500+ एमएस) और न-अननोन ड्रॉप-आउट (जैसे जब जहाज मुड़ रहे हों) के कारण, समुद्र में रहते हुए कुछ मेगाबाइट के ऊपर किसी भी ई-मेल को भेजने का प्रयास विफल होने की संभावना है और सीमा तक पीछे हटने की संभावना है पहुँच गया। परिणाम: ईमेल डिलीवर नहीं होता है और प्रत्येक कोशिश सतत् लिंक पर मूल्यवान बैंडविड्थ की खपत करती है।
एक "समाधान" 5 एमबी कहने के लिए अधिकतम ई-मेल आकार को सीमित करना है, लेकिन यह पोर्ट में रहते हुए उपयोगकर्ता के अनुकूल और अनावश्यक प्रतिबंध है।
अपूर्ण विचार
मैं क्या करूंगा, सभी ई-मेल को तुरंत भेजने के दौरान समुद्र में जब बाद में वितरण के लिए एक निर्धारित सीमा से बड़ा है, तो सभी ई-मेल को कतारबद्ध करना है। मैं तब सोच रहा था कि हम नियमित रूप से हमारे डेटासेंटर में हब ट्रांसपोर्ट सर्वर को पिंग करेंगे, जब लेटेंसी ~ 400 एमएस के नीचे गिरती है, मैं बड़ी ई-मेल कतार का प्रसंस्करण शुरू करूंगा। जब विलंबता 400 एमएस से अधिक हो जाती है, तो मैं छेद को प्लग करूँगा और ई-मेल को फिर से कतार में आने दूंगा।
अब, मैंने अपने हाथों को 2003 के बाद से एक्सचेंज के साथ वास्तव में गंदा नहीं किया है। इसके बाद, आप बाद में डिलीवरी के लिए बड़े ई-मेल शेड्यूल कर सकते हैं, इसलिए मेरा विचार एक्सचेंज 2010 में कुछ ऐसा ही था, फिर डिलीवरी स्विच करने का एक तरीका स्क्रिप्ट। 'हमेशा' और 'कभी नहीं' के बीच बड़े ई-मेल के लिए अनुसूची।
बाधा
इसे स्क्रिप्ट बनाने के लिए बहुत जटिल नहीं होना चाहिए, लेकिन फिर मैंने पढ़ा कि जिस फीचर पर मैं भरोसा करता हूं वह एक्सचेंज 2007 के साथ हटा दिया गया था:
यह Exchange 2003 में मौजूद एक सुविधा थी, लेकिन इसे Exchange 2007 के लिए हटा दिया गया था। इसे SMTP कनेक्टर पर 'ओवरसाइज़ मैसेज के लिए अलग-अलग डिलीवरी समय का उपयोग करें' के साथ सेट किया गया था।
TechCenter: क्या एक्सचेंज में आकार के आधार पर ईमेल डिलीवरी को शेड्यूल करना संभव है?
प्रशन
क्या यह सच है? - क्या यह सुविधा अब एक्सचेंज 2010 में मौजूद नहीं है, या यह केवल कुछ इसी तरह से बदल गया है, मैं अपने लक्ष्य को पूरा करने के लिए उपयोग कर सकता हूं? यदि ऐसा है तो क्या?
क्या कुछ एक्सचेंज सर्वर पर बड़ी ई-मेल की डिलीवरी को स्थगित करने का एक और तरीका है? यह एक शेड्यूल पर आधारित हो सकता है या शायद विशिष्ट कार्रवाई की आवश्यकता हो सकती है - मुझे पूरा यकीन है कि स्क्रिप्ट के माध्यम से डिलीवरी को ट्रिगर करने का कोई रास्ता होगा, मुझे बस जहाजों पर एक अलग कतार में बड़े ई-मेल की आवश्यकता है।
इस पर आपके विचारों की बहुत प्रशंसा होगी! :-)
# 1 संपादित करें: परिष्कृत किसी न किसी विचार
मैं दो PowerShell CmdLets पर सोचता हूं कि मुझे अपने लक्ष्य के बहुत करीब ला सकता है:
मैंने थोड़ी देर के लिए गेट-संदेश के साथ खिलवाड़ किया, यह देखने के लिए कि ऊपर दिए गए कमांड किस तरह के संदेशों से निपटेंगे।
सबसे महत्वपूर्ण बात, ये कमांड एक संदेश आकार फिल्टर को स्वीकार करते हैं। यह आदेश पंक्तिबद्ध संदेशों को सूचीबद्ध करेगा, वर्तमान सर्वर पर, 5 एमबी (5,242,880 बाइट्स) से बड़ा:
get-message -Filter {Size -gt 5242880}
ऐसा लगता है Get-Message
केवल विभिन्न दूरस्थ वितरण कतारों से संदेश देता है। लेकिन क्या सर्वर के भीतर बहने वाले संदेश, संक्षेप में, एक कतार में दिखाई देते हैं जो गेट / सस्पेंड / रिज्यूमे-मैसेज के साथ गड़बड़ करेगा?
यदि नहीं, तो समाधान कुछ ही मिनटों में एक निर्धारित स्क्रिप्ट के रूप में सरल हो सकता है, (छद्म कोड में) की तर्ज पर:
if ping_rtt > 400 Then
Suspend-Message -Filter {Size -gt 5242880}
Else
Resume-Message
EndIf
चिंताएँ / अनुवर्ती प्रश्न:
अब ज्यादातर असंबद्ध - संपादित # 2 देखें।
क्या Get-Message
केवल दूरस्थ वितरण कतारों से संदेश वापस आएगा - इंट्रा-सर्वर वितरण के लिए संदेश कभी नहीं? यदि नहीं, तो दूरस्थ वितरण कतारों का पहचान नाम एक निश्चित पैटर्न का पालन करता है, जिसे मैं फ़िल्टर करने के लिए उपयोग कर सकता हूं?
क्या यह एक कस्टम ट्रांसपोर्ट एजेंट (जैसे @ लोंगनेक द्वारा सुझाया गया) या एक इवेंट सिंक (यदि यह अवधारणा अभी भी एक्सचेंज 2010 में मौजूद है) के माध्यम से किया जा सकता है?
मान लें कि मैं हर 5 मिनट में स्क्रिप्ट चलाता हूं, इसका मतलब है कि अभी भी बड़े संदेश भेजे जा रहे हैं, संभावित रूप से निलंबित होने से पहले 5 मिनट तक समस्या पैदा कर सकते हैं। हम अभी भी हम से बेहतर हैं, लेकिन यह इष्टतम नहीं है। मैं हर मिनट की आवृत्ति बढ़ा सकता था, लेकिन यह सबसे सुंदर समाधान नहीं होगा।
यहां तक कि अगर मैं हर 5 मिनट में (केवल ट्रैफिक को बचाने के लिए) राउंड-ट्रिप समय की जांच करता हूं, तो अंतिम रिकॉर्ड किए गए आरटीटी के खिलाफ जांच करने के लिए मुझे किस एक्सचेंज तंत्र को सेटअप करने की आवश्यकता होगी, हर बार एक संदेश सबमिट किया जाता है जो किसी दूरस्थ डिलीवरी पर जाता है कतार, और उसके बाद कार्रवाई करें?
# 2 संपादित करें: प्रस्तावित समाधान
मुझे प्रस्तावित समाधानों, और उनके पेशेवरों और विपक्षों को सारांशित करने की अनुमति दें, जैसा कि मैं देख रहा हूं:
कस्टम परिवहन एजेंट
संकल्पना
- समय-समय पर निगरानी विलंबता, उच्च या निम्न (दहलीज: 400 एमएस?) के रूप में वर्गीकृत करें।
- एक कस्टम ट्रांसपोर्ट एजेंट के माध्यम से, विलंबता वर्गीकरण में परिवर्तन होने पर, एक निर्धारित सीमा से बड़ा सभी ई-मेल निलंबित / फिर से शुरू करें
- कस्टम टीए के माध्यम से, तुरंत बाद में "सस्पेंड" मोड में बड़े संदेश प्रस्तुत किए गए, यदि विलंबता अधिक है
ताकत
- विलंबता अधिक होने पर बड़े ई-मेल का कभी भी वितरण नहीं किया जाता है
कमजोरियों
- इसे घर में बनाने के लिए कोई विकास कौशल नहीं है (स्वयं पर ध्यान दें: स्रोत कोड बाहरी डेवलपर के साथ अनुबंध के हिस्से के रूप में मेरी कंपनी का होना चाहिए)
- 3 पार्टी सॉफ्टवेयर जो एक्सचेंज में संबंध बनाता है जब पैचिंग या अपडेट करने में समस्या हो सकती है
- यदि कुछ गलत हो जाता है, तो कुछ प्रकार का समर्थन समझौता आवश्यक है (ऊपर देखें)
मध्यम बड़े संदेश
संकल्पना
- समय-समय पर निगरानी विलंबता, उच्च या निम्न (दहलीज: 400 एमएस?) के रूप में वर्गीकृत करें।
- विलंबता वर्गीकरण के आधार पर, स्क्रिप्टिंग के माध्यम से एक्सचेंज ट्रांसपोर्ट नियमों को कॉन्फ़िगर करें, या तो सभी संदेशों को प्रवाहित करें या बड़े संदेशों को मॉडरेटर को अग्रेषित करें
- संभवत: एक मानव द्वारा जहाज में पोर्ट के दौरान मॉडरेटर कतार में संदेशों को स्वीकार करें
ताकत
- विलंबता अधिक होने पर बड़े ई-मेल का कभी भी वितरण नहीं किया जाता है
- संदेशों को मूल निवासी एक्सचेंज ट्रांसपोर्ट नियमों का उपयोग करके निलंबित कर दिया जाता है
कमजोरियों
- इसके द्वारा, विलंबता कम होने पर संदेशों को प्रोग्रामेटिक रूप से अनुमोदित नहीं किया जा सकता है, इसलिए पोर्ट में हर बार मानव हस्तक्षेप की आवश्यकता होती है
- संभवतः गोपनीयता के मुद्दे, अगर मॉडरेशन को प्रोग्रामेटिक रूप से नियंत्रित नहीं किया जाता है
प्रशन
- क्या संदेश को मध्यस्थ मेलबॉक्स से प्रोग्रामिक रूप से अनुमोदित किया जा सकता है? कैसे?
शेड्यूल किए गए पॉवरशेल कमांड
संकल्पना
- समय-समय पर निगरानी विलंबता, उच्च या निम्न (दहलीज: 400 एमएस?) के रूप में वर्गीकृत करें।
- जब तक विलंबता अधिक होती है, तब तक (हर मिनट?) किसी भी बड़े संदेश को निलंबित कर दें (
Suspend-Message -Filter {Size -gt 5242880}
) - जब विलंबता कम हो जाती है, तो सभी संदेश फिर से शुरू करें (
Resume-Message
)
ताकत
- लागू करने के लिए बहुत सरल है
कमजोरियों
- सबसे सुरुचिपूर्ण समाधान नहीं
- प्रत्येक नए बड़े संदेश की डिलीवरी के लिए
Suspend-Message
आदेशों के बीच अंतराल के रूप में लंबे समय तक प्रयास किया जा सकता है , संभवतः अभी भी कुछ बैंडविड्थ बर्बाद कर रहा है और भीड़ पैदा करता है (हालांकि कुछ भी नहीं करने की तुलना में बहुत संक्षेप में)
प्रशन
- बड़े संदेशों को वितरित करने के प्रयासों को रोकने के बारे में कोई विचार, इन-
Suspend-Message
कमांड के बीच ? - क्या
Get-Message
केवल दूरस्थ वितरण कतारों से संदेश वापस आएगा - इंट्रा-सर्वर वितरण के लिए संदेश कभी नहीं? यदि नहीं, तो दूरस्थ वितरण कतारों का पहचान नाम एक निश्चित पैटर्न का पालन करता है, जिसे मैं फ़िल्टर करने के लिए उपयोग कर सकता हूं?
# 3 संपादित करें: रास्ता आगे
मेरी टीम में प्रस्तावित समाधान (एसएमटीपी प्रॉक्सी सहित, जिसे मैं # 2 संपादित करने में शामिल करने में विफल रहा) को लाने के बाद, और अपने स्वयं के आंत की भावना के आधार पर, हमने एक कस्टम एक्सचेंज ट्रांसपोर्ट एजेंट के लिए जाने का फैसला किया।
मैं कंसल्टेंसी कंपनियों के एक जोड़े के संपर्क में हूं, जो मेरे साथ वापस आ जाएगा कि कैसे समस्या पर हमला करेगा और इसकी लागत क्या होगी।
यदि आपके पास प्रोग्रामिंग कार्यों को आउटसोर्स करने का कोई अनुभव है, तो स्टैक ओवरफ्लो पर मेरे संबंधित प्रश्न पर प्रतिक्रिया छोड़ने के लिए स्वतंत्र महसूस करें , क्योंकि मैं नहीं करता।