ความท้าทายของฉัน
เรามีเซิร์ฟเวอร์ Exchange ที่เว็บไซต์ต่าง ๆ แต่ยังมีเรือ เรือเชื่อมต่อกับเครือข่ายของเราผ่านลิงก์ดาวเทียมเมื่ออยู่ในทะเล แต่เปลี่ยนเป็นสะพาน WiFi เมื่ออยู่ในพอร์ต
เนื่องจากเวลาในการตอบสนองสูง (500+ ms) และไม่ใช่เรื่องแปลก (เช่นเมื่อเรือกำลังเลี้ยว) พยายามส่งอีเมลใด ๆ ที่สูงกว่าสองสามเมกะไบต์ในขณะที่อยู่ในทะเลมีแนวโน้มที่จะล้มเหลวและลองใหม่จนกว่าจะถึงขีด จำกัด ถึงแล้ว ผลลัพธ์: อีเมลไม่ได้รับการส่งมอบและการลองแต่ละครั้งจะใช้แบนด์วิดท์ที่มีคุณค่าบนลิงก์ sat
หนึ่ง "ทางออก" คือการ จำกัด ขนาดอีเมลสูงสุดที่จะพูด 5 MB แต่ผู้ใช้ไม่ค่อยเป็นมิตรและมีข้อ จำกัด ที่ไม่จำเป็นขณะอยู่ในพอร์ต
ความคิดที่หยาบ
สิ่งที่ฉันควรทำคือจัดคิวอีเมลทั้งหมดที่ใหญ่กว่าขีด จำกัด ที่กำหนดไว้สำหรับการจัดส่งในภายหลังเมื่ออยู่ในทะเลขณะที่ส่งอีเมลขนาดเล็กทั้งหมดทันที ฉันคิดว่าฉันจะส่ง Ping ไปที่เซิร์ฟเวอร์ศูนย์กลางการขนส่งในดาต้าเซ็นเตอร์ของเราเป็นประจำเมื่อเวลาแฝงลดลงต่ำกว่า ~ 400 ms ฉันจะเริ่มดำเนินการกับคิวอีเมลขนาดใหญ่ เมื่อเวลาในการตอบสนองสูงกว่า 400 ms ฉันจะเสียบรูและปล่อยให้อีเมลเข้าคิวอีกครั้ง
ตอนนี้ฉันไม่ได้เอามือของฉันสกปรกจริงๆกับ Exchange ตั้งแต่รุ่น 2003 ย้อนกลับไปคุณสามารถกำหนดเวลาอีเมลขนาดใหญ่สำหรับการจัดส่งในภายหลังดังนั้นความคิดของฉันคือทำสิ่งที่คล้ายกันใน Exchange 2010 จากนั้นจึงเปลี่ยนวิธีการจัดส่ง กำหนดเวลาสำหรับอีเมลขนาดใหญ่ระหว่าง 'เสมอ' และ 'ไม่เคย'
อุปสรรค
ไม่ควรซับซ้อนเกินไปในการสร้างสคริปต์เช่นนั้น แต่ฉันอ่านแล้วว่าคุณลักษณะที่ฉันต้องการใช้นั้นถูกลบไปแล้วด้วย Exchange 2007:
นี่คือคุณลักษณะที่มีอยู่ใน Exchange 2003 แต่ถูกลบสำหรับ Exchange 2007 มันถูกตั้งค่าบนตัวเชื่อมต่อ SMTP พร้อมกับ 'ใช้เวลาการส่งที่แตกต่างกันสำหรับการปรับขนาดข้อความ'
TechCenter: เป็นไปได้หรือไม่ที่จะกำหนดเวลาการส่งอีเมลตามขนาดใน Exchange?
คำถาม
จริงป้ะ? - คุณลักษณะนี้ไม่มีอยู่ใน Exchange 2010 อีกต่อไปหรือเพิ่งเปลี่ยนเป็นสิ่งที่คล้ายกันฉันสามารถใช้เพื่อบรรลุเป้าหมายได้หรือไม่ ถ้าเป็นเช่นนั้นอะไร
มีวิธีอื่นในการเลื่อนการส่งอีเมลขนาดใหญ่บนเซิร์ฟเวอร์ Exchange บางตัวหรือไม่ อาจเป็นไปตามกำหนดการหรืออาจต้องมีการดำเนินการบางอย่าง - ฉันค่อนข้างแน่ใจว่าจะมีวิธีที่จะทำให้การจัดส่งผ่านสคริปต์ฉันต้องการอีเมลขนาดใหญ่ในคิวแยกต่างหากบนเรือ
ความคิดของคุณเกี่ยวกับเรื่องนี้จะได้รับการชื่นชมอย่างมาก! :-)
แก้ไข # 1: ความคิดหยาบที่ผ่านการกลั่น
ฉันเหยียบย่ำ PowerShell CmdLets สองตัวฉันคิดว่าฉันสามารถทำให้ฉันเข้าใกล้เป้าหมายได้มาก:
ฉันเล่นกับ Get-Message สักครู่เพื่อดูว่าข้อความประเภทใดที่คำสั่งด้านบนจะจัดการ
สิ่งสำคัญที่สุดคือคำสั่งเหล่านี้ยอมรับตัวกรองขนาดข้อความ คำสั่งนี้จะแสดงรายการข้อความที่อยู่ในคิวบนเซิร์ฟเวอร์ปัจจุบันใหญ่กว่า 5 MB (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
ส่งคืนข้อความจากคิวการส่งระยะไกลเท่านั้น - ไม่เคยมีข้อความสำหรับการจัดส่งภายในเซิร์ฟเวอร์หรือไม่ หากไม่ใช่ชื่อประจำตัวของคิวการจัดส่งระยะไกลจะเป็นไปตามรูปแบบบางอย่างที่ฉันสามารถใช้สำหรับการกรองได้หรือไม่
ทำได้ / ควรทำได้ผ่านตัวแทนการขนส่งที่กำหนดเอง (ตามที่แนะนำโดย @longneck) หรือ Event Sink (หากแนวคิดนี้ยังคงมีอยู่ใน Exchange 2010)
สมมติว่าฉันเรียกใช้สคริปต์ทุก 5 นาทีซึ่งยังคงหมายถึงการส่งข้อความขนาดใหญ่อาจทำให้เกิดปัญหาได้ถึง 5 นาทีก่อนที่จะถูกระงับ เรายังดีกว่าตอนนี้ แต่มันก็ไม่เหมาะสม ฉันสามารถเพิ่มความถี่เป็นทุกนาที แต่มันจะไม่ใช่ทางออกที่หรูหราที่สุด
แม้ว่าฉันจะตรวจสอบเวลาไปกลับทุก ๆ 5 นาที (เพื่อประหยัด sat sat), กลไกการแลกเปลี่ยนใดที่ฉันต้องตั้งค่าเพื่อตรวจสอบกับ RTT ที่บันทึกล่าสุดทุกครั้งที่มีการส่งข้อความที่ไปยังการส่งระยะไกล คิวแล้วดำเนินการกลัว?
แก้ไข # 2: โซลูชันที่เสนอ
ให้ฉันสรุปโซลูชั่นที่เสนอและข้อดีและข้อเสียของพวกเขาตามที่เห็น:
ตัวแทนขนส่งที่กำหนดเอง
แนวคิด
- ตรวจสอบเวลาแฝงเป็นระยะจัดเป็นสูงหรือต่ำ (ขีด จำกัด : 400 ms?)
- ผ่านตัวแทนการขนส่งที่กำหนดเองให้ระงับ / ดำเนินการกับอีเมลทั้งหมดที่มีขนาดใหญ่กว่าเกณฑ์ที่กำหนดไว้เมื่อมีการเปลี่ยนแปลงการจัดหมวดหมู่ความล่าช้า
- ผ่าน TA ที่กำหนดเองให้ส่งข้อความขนาดใหญ่ในภายหลังทันทีในโหมด "หยุด" หากความล่าช้าสูง
จุดแข็ง
- อีเมลขนาดใหญ่จะไม่พยายามส่งเมื่อเวลาแฝงอยู่ในระดับสูง
จุดอ่อน
- ไม่มีทักษะการพัฒนาเพื่อทำสิ่งนี้ภายใน บริษัท (หมายเหตุถึงตัวเอง: ซอร์สโค้ดควรเป็นของ บริษัท ของฉันเนื่องจากเป็นส่วนหนึ่งของสัญญากับผู้พัฒนาภายนอก)
- ซอฟต์แวร์บุคคลที่สามที่เชื่อมโยงกับการแลกเปลี่ยนอาจทำให้เกิดปัญหาเมื่อทำการอัพเดทหรืออัพเดท
- จำเป็นต้องมีข้อตกลงการสนับสนุนบางอย่างในกรณีที่มีข้อผิดพลาด (ดูด้านบน)
กลั่นกรองข้อความขนาดใหญ่
แนวคิด
- ตรวจสอบเวลาแฝงเป็นระยะจัดเป็นสูงหรือต่ำ (ขีด จำกัด : 400 ms?)
- ตามการจัดประเภทแฝงกำหนดค่ากฎการแลกเปลี่ยนการแลกเปลี่ยนผ่านสคริปต์เพื่อให้ข้อความทั้งหมดไหลหรือส่งต่อข้อความขนาดใหญ่ไปยังผู้ดูแล
- อนุมัติข้อความในคิวผู้ควบคุมเมื่อมีการจัดส่งในพอร์ตอาจเป็นไปได้โดยมนุษย์
จุดแข็ง
- อีเมลขนาดใหญ่จะไม่พยายามส่งเมื่อเวลาแฝงอยู่ในระดับสูง
- ข้อความถูกระงับโดยใช้กฎการส่งผ่านดั้งเดิมของ Exchange
จุดอ่อน
- จากรูปลักษณ์ของมันข้อความไม่สามารถได้รับการอนุมัติโดยทางโปรแกรมเมื่อเวลาแฝงอยู่ในระดับต่ำดังนั้นจึงจำเป็นต้องมีการแทรกแซงจากมนุษย์ทุกครั้งที่มีการจัดส่งในพอร์ต
- อาจมีปัญหาความเป็นส่วนตัวถ้าการดูแลไม่ได้รับการจัดการโดยทางโปรแกรม
คำถาม
- ข้อความสามารถได้รับการอนุมัติโดยทางโปรแกรมจากกล่องจดหมายของผู้ดูแล อย่างไร?
คำสั่ง PowerShell ตามกำหนดเวลา
แนวคิด
- ตรวจสอบเวลาแฝงเป็นระยะจัดเป็นสูงหรือต่ำ (ขีด จำกัด : 400 ms?)
- ตราบใดที่เวลาในการตอบสนองสูงบ่อยครั้ง (ทุกนาที?) จะระงับข้อความใด ๆ ที่มีขนาดใหญ่ (
Suspend-Message -Filter {Size -gt 5242880}
) - เมื่อแฝงลดลงไปต่ำดำเนินการต่อข้อความทั้งหมด (
Resume-Message
)
จุดแข็ง
- ง่ายมากที่จะใช้
จุดอ่อน
- ไม่ใช่ทางออกที่หรูหราที่สุด
- การส่งข้อความขนาดใหญ่ใหม่แต่ละข้อความสามารถทำได้ตราบใดที่ช่วงเวลาระหว่าง
Suspend-Message
คำสั่งอาจยังคงเสียแบนด์วิดท์และสร้างความแออัด (แม้ว่าจะสั้นมากเมื่อเทียบกับการไม่ทำอะไรเลย)
คำถาม
- ความคิดใด ๆ เกี่ยวกับวิธีป้องกันความพยายามในการส่งข้อความขนาดใหญ่
Suspend-Message
คำสั่งที่อยู่ระหว่าง? - จะ
Get-Message
ส่งคืนข้อความจากคิวการส่งระยะไกลเท่านั้น - ไม่เคยมีข้อความสำหรับการจัดส่งภายในเซิร์ฟเวอร์หรือไม่ หากไม่ใช่ชื่อประจำตัวของคิวการจัดส่งระยะไกลจะเป็นไปตามรูปแบบบางอย่างที่ฉันสามารถใช้สำหรับการกรองได้หรือไม่
แก้ไข # 3: ทางข้างหน้า
หลังจากนำเสนอโซลูชันในทีมของฉัน (รวมถึงพร็อกซี SMTP ซึ่งฉันไม่ได้รวมไว้ในการแก้ไข # 2) และด้วยความรู้สึกของตัวเองเราจึงตัดสินใจเลือกตัวแทนขนส่งแบบกำหนดเองของ Exchange
ฉันติดต่อกับ บริษัท ที่ปรึกษาสองแห่งที่จะติดต่อฉันกลับไปพร้อมกับวิธีที่จะโจมตีปัญหาและราคาเท่าไหร่
หากคุณมีประสบการณ์เกี่ยวกับงานการเขียนโปรแกรมเอาต์ซอร์ซอย่าลังเลที่จะแสดงความคิดเห็นกับคำถามที่เกี่ยวข้องใน Stack Overflowเพราะฉันไม่มี