Soru Exchange 2010'da zamanlama / sıra büyük e-postalar, gecikme süresine kadar ertele


Benim meydan okuma

Çeşitli sitelerde Exchange sunucularımız var, aynı zamanda gemilerde de var. Gemiler, denizde uydu bağlantıları aracılığıyla ağımıza bağlanır, ancak bağlantı noktasında WiFi köprülerine geçer.

Yüksek gecikme (500+ ms) ve nadir olmayan çıkışlar (örneğin gemiler dönerken) nedeniyle, denizde bir kaç megabayttan fazla e-posta göndermeye çalışmak büyük olasılıkla başarısız olur ve sınıra kadar tekrar denenebilir. ulaşıldı. Sonuç: E-posta teslim edilmez ve her bir deneme, sat bağlantısında değerli bant genişliği tüketir.

Bir "çözüm", maksimum e-posta boyutunu 5 MB olarak sınırlamaktır, ancak bu, limanda iken neredeyse hiç kullanıcı dostu ve gereksiz bir kısıtlamadır.

Kaba fikir

Ne yapmak isterim ki, tüm e-postaları hemen gönderirken, denizde daha sonraki teslimat için belirlenmiş bir sınırdan daha büyük olan tüm e-postaları sıraya koymak. Sonra veri merkezimizde hub aktarım sunucusuna düzenli olarak ping yapacağımı düşünüyordum, gecikme süresi 400 ms'nin altına düştüğünde, büyük e-postalar kuyruğunu işlemeye başlarım. Gecikme 400 ms'nin üzerine çıktığında, deliği tıkadım ve e-postaların tekrar sıraya girmesini sağlarım.

Şimdi, sürüm 2003'ten beri Exchange'le ellerimi gerçekten kirletmedim. O zamanlar, daha sonra teslimat için büyük e-postalar planlayabilirsiniz, bu yüzden benim fikrim, Exchange 2010'da benzer bir şey yaptık, daha sonra teslimatı değiştirmenin bir yolunu yazdı. 'her zaman' ve 'asla' arasında büyük e-postalar için zamanlama.

Engel

Böyle bir betik oluşturmak çok karmaşık olmamalı, ama sonra güvendiğim özelliğin Exchange 2007 ile kaldırıldığını okudum:

Bu, Exchange 2003'te bulunan bir özellikti, ancak   Exchange 2007. 'Farklı kullanımlı bir SMTP Bağlayıcısı'nda kuruldu   büyük boy mesajlar için teslimat süreleri.

TechCenter: Exchange'de e-posta teslimatını boyutlandırmak mümkün mü?

Sorular

Bu doğru mu? - Bu özellik artık Exchange 2010'da artık mevcut değil mi, yoksa sadece benzer bir şeye dönüştürülmüş mü, hedefimi gerçekleştirmek için kullanabilir miyim? Öyleyse ne olmuş?

Büyük e-postaların belirli Exchange sunucularında dağıtımını ertelemenin başka bir yolu var mı? Bir programa dayandırılabilir ya da belki de belirli bir eylemi gerektiriyor olabilir - Bence senaryo aracılığıyla teslimatı tetiklemenin bir yolu olacak, gemilerde ayrı bir kuyrukta büyük e-postalara ihtiyacım var.

Bu konudaki düşünceleriniz çok takdir edilecek! :-)

Düzenleme # 1: İyileştirilmiş Kaba Fikir

Ben iki PowerShell CmdLets üzerine güldüm sanırım beni hedefime oldukça yakın getirebilir:

Bir süredir Get-Message ile uğraştım, yukarıdaki komutların nasıl ele alınacağını görmek için.

En önemlisi, bu komutlar bir ileti boyutu filtresini kabul eder. Bu komut, geçerli sunucuda, 5 MB'tan (5,242,880 bayt) daha büyük, sıraya alınmış iletileri listeler:

get-message -Filter {Size -gt 5242880}

Görünüyor Get-Message yalnızca çeşitli uzak dağıtım kuyruklarından gelen mesajları döndürür. Ancak, sunucu içinde akan mesajlar kısa bir süre sonra, Get / Suspend / Resume-Message'in karışacağı bir sıraya mı çıkıyor?

Değilse, çözüm her birkaç dakikada bir programlı betik kadar basit olabilir (sözde kodda):

if ping_rtt > 400 Then
    Suspend-Message -Filter {Size -gt 5242880}
Else
    Resume-Message
EndIf

Endişeler / takip soruları:

Çoğunlukla ilgisizlik - düzenleme # 2'ye bakın.

İrade Get-Message Yalnızca uzak dağıtım kuyruklarından gelen iletileri döndürme - sunucu içi dağıtım için hiç ileti yok mu? Değilse, uzak dağıtım sıralarının kimlik adı filtreleme için kullanabileceğim belirli bir kalıbı takip ediyor mu?

Bu, özel bir Nakliye Aracı (@longneck tarafından önerildiği gibi) veya bir Etkinlik Lavabosu (bu kavram hala Exchange 2010'da mevcutsa) ile yapılabilir mi?

Script'i her 5 dakikada bir çalıştırdığımı söyleyeyim, bu hala büyük mesajların gönderilmesi anlamına geliyor, potansiyel olarak 5 dakikaya kadar sorun yaratabilir. Şu an olduğundan daha iyi oluruz, ama bu optimal değildir. Sıklığı her dakikaya kadar artırabilirdim, ama en zarif çözüm olmazdı.

Her 5 dakikada bir (sadece trafiği kaydetmek için) gidiş-dönüş süresini kontrol etsem bile, en son kaydedilmiş RTT'ye karşı kontrol etmek için hangi Exchange mekanizmasının kurulmasını gerektirmekteyim ki, her seferinde bir uzak gönderime gönderilen bir mesaj gönderilir sıra ve sonra uygun eylemi?

# 2 Düzenle: Önerilen Çözümler

Önerilen çözümleri ve onların göründüğü gibi artılarını ve eksilerini özetlememe izin verin:

Özel Nakliye Aracı

kavram

  • Gecikme süresini düzenli olarak izleyin, yüksek veya düşük olarak sınıflandırın (eşik: 400 ms?)
  • Özel bir Aktarım Aracısı aracılığıyla, gecikme sınıflandırması değiştiğinde, ayarlanmış bir eşikten daha büyük olan tüm e-postaları askıya al / tekrar başlat
  • Özel TA yoluyla, gecikme yüksekse hemen sonradan "askıya alma" modunda büyük iletiler gönderilir.

Güçlü

  • Gecikme yüksek olduğunda, büyük e-postalar asla teslim edilmez

Zayıf Yönler

  • Bu in-house yapmak için geliştirme becerisi yok (kendime not: kaynak kodu şirketime harici geliştiriciyle yapılan sözleşmenin bir parçası olarak ait olmalıdır)
  • Exchange'e bağlanan 3. taraf yazılımlar, yama veya güncelleştirme sırasında sorunlara neden olabilir
  • Bir şeyler ters giderse, bir çeşit destek sözleşmesi gereklidir (yukarıya bakınız).

Büyük Mesajları Yönet

kavram

  • Gecikme süresini düzenli olarak izleyin, yüksek veya düşük olarak sınıflandırın (eşik: 400 ms?)
  • Gecikme sınıflandırmasına dayalı olarak, tüm iletilerin akışını veya büyük iletileri denetleyiciye iletmesine izin vermek için Exchange Aktarım Kuralları'nı komut dosyası aracılığıyla yapılandırın
  • Geminin limanda, muhtemelen bir insan tarafından alındığında, moderatör kuyruğunda iletileri onaylayın

Güçlü

  • Gecikme yüksek olduğunda, büyük e-postalar asla teslim edilmez
  • Yerel yerel Exchange Aktarım Kuralları kullanılarak iletiler askıya alındı

Zayıf Yönler

  • Görünüşe göre, mesajlar gecikme süresi düşük olduğunda programatik olarak onaylanamaz, dolayısıyla geminin limanda her seferinde insan müdahalesi gerekir.
  • Muhtemelen gizlilik sorunları, moderasyon programlı olarak ele alınmazsa

Sorular

  • kutu mesajlar moderatör posta kutusundan programlı olarak onaylanmalı mı? Nasıl?

Zamanlanmış PowerShell komutları

kavram

  • Gecikme süresini düzenli olarak izleyin, yüksek veya düşük olarak sınıflandırın (eşik: 400 ms?)
  • Gecikme yüksek olduğu sürece, sık sık (her dakika?) Büyük iletileri askıya alır (Suspend-Message -Filter {Size -gt 5242880})
  • Gecikme azaldığında, tüm iletilere devam et (Resume-Message)

Güçlü

  • Uygulamak çok basit

Zayıf Yönler

  • En zarif çözüm değil
  • Her yeni büyük mesajın iletilmesi, aradaki süre kadar devam edebilir. Suspend-Message komutları, muhtemelen bazı bant genişliklerini boşa harcıyor ve tıkanıklıklar yaratıyor (bir şey yapmamakla karşılaştırıldığında çok kısa bir süre olsa da)

Sorular

  • Aralarında büyük mesajlar sunma girişimlerini nasıl önleyeceğinizle ilgili herhangi bir fikir Suspend-Message komutlar?
  • İrade Get-Message Yalnızca uzak dağıtım kuyruklarından gelen iletileri döndürme - sunucu içi dağıtım için hiç ileti yok mu? Değilse, uzak dağıtım sıralarının kimlik adı filtreleme için kullanabileceğim belirli bir kalıbı takip ediyor mu?

Düzenleme # 3: Yolun Geleceği

Önerilen çözümlerimi (# 2 düzenlemesine dahil edemediğim SMTP proxy'si dahil) ekibimde hazırladıktan sonra ve kendi içgüdüm hissine dayanarak, özel bir Exchange Transport Agent'a gitmeye karar verdik.

Soruna nasıl saldıracağı ve neye mal olacağı ile ilgili olarak bana geri dönecek olan birkaç danışmanlık şirketi ile irtibat halinde olacağım.

Dış kaynak programlama görevleriyle ilgili herhangi bir deneyiminiz varsa, geri bildirimde bulunmaktan çekinmeyin. Stack Overflow ile ilgili soruçünkü yapmıyorum.


14
2018-01-25 09:12


Menşei


Geç gördüğüm daha iyi sorulardan biri için +1. - John Gardeniers
Gemilerdeki Exchange sunucuları hangi rolleri kullanıyor? - August
Gemilerdeki Exchange sunucuları Hub Aktarımı, Posta Kutusu ve İstemci Erişimi rollerini tutar. - abstrask
Uydu bağlantılarında herhangi bir QoS veya WAN optimizer çalıştırıyor musunuz? - longneck
Posta kutusu rolüyle Hmm, harici posta posta alıcısının Exchange sunucusundaki bir posta kutusuna gönderildiğinde, bağlantının doymuş olmasını da sağlayabilirsiniz ... - August


Cevaplar:


Sorunu istediğiniz şekilde çözmek için, kendi Taşıma Aracınızı kullanarak Microsoft Exchange Aktarım Aracısı SDK'sı. Aktarım Aracıları olaya dayalı olduğundan, bir ileti alındığında Exchange, kitaplığınızda bir işlevi çağırır. Kütüphaneniz daha sonra mesajı tutmak gibi bir şey yapabilir. Bunu yapmak için becerilere sahip değilseniz, bunu sizin için yazmak için bir geliştirici kiraladığınızdan emin olabilirsiniz.

Ama bunun harika bir çözüm olduğunu düşünmüyorum. Araştırmanız için bir alternatif olarak, düşük kaliteli bağlantılar için bir SMTP proxy'si gibi bir şeye bakmak isteyebilirsiniz. Bulduğunuz gibi, SMTP düşük kaliteli bağlantılar için korkunç bir protokoldür çünkü kesintili bir bağlantı, mesaj iletiminin, kaldığı yerden devam etmek yerine baştan başlayarak yeniden başlatılmasına neden olur. Bir şey için bir geliştirici kiralayacaksanız, gelen SMTP bağlantılarını kabul eden bir sunucu programı yazmayı ve mesajı, aynı bağlantının uzak bir örneğine uydu bağlantısının diğer ucunda yeniden gönderilebilir bir şekilde gönderirim. WAN hızlandırıcınız tarafından QoS işlemine izin vermek için büyük mesajları küçük iletilerden TCP bağlantı noktası üzerinden ayırmak). Uzak örnek, tam mesajın alınması üzerine, mesajın SMTP yoluyla iletilmesini tamamlayabilir.


2
2018-01-25 14:52



Giriş için teşekkürler! Umduğumdan çok daha az kutudan daha iyi olduğunu söylemeliyim. KISS prensibinin büyük bir hayranıyım. Taşımacılık acenteleri hakkında pek bir şey bilmemekle birlikte, işlemlerin Exchange içinde kalmasını sağlamak benim için biraz zorlayıcı. Exchange 2010'da, talep üzerine kuyruklar oluşturuldu ve yok edildi. Belki de acente büyük postaları ayrı bir sıraya zorlayabilir ve bir senaryo 'askıya alma' ve 'devam etme' arasında geçiş yapabilir. Herhangi bir fikir, Exchange 2010'daki TA'larla yapabilecekleriniz mi? - abstrask
SMTP proxy / smarthost önerisine gelince, aynı zamanda aktif bir şekilde korunan bir çözüm bulabilirsem, bir OK çözümü olarak da geliyor. Borsadaki akışı değiştiren bir Exchange taşıma aracından daha karmaşık bir programlama görevi gibi görünüyor (yanlış olabilir miyim?). Bir SMTP proxy'si hayal ettiğim gibi karmaşık, özel yapım çözümlerin uzun vadede desteklenmesi pahalı olduğu yönündeki deneyimim. - abstrask
yeniden: sıraları ayır, ben kuyruğun böyle çalışıp çalışmadığını ya da en iyi yol olup olmadığını öğrenmek için Exchange'in içersinde yeterince tanıdık değilim. Litera Metadact-e ile olan deneyimlerime dayanarak bireysel işlemlerin bir TA tarafından tutulabileceğini biliyorum, bu da tam olarak bunu yapar: işlenene kadar bir mesaj tutun (bu işlem birkaç dakika sürebilir). onları süresiz tutmak mümkün olup olmadığını bilmiyorum. - longneck
benim cevabımın genel noktası, muhtemelen sizin için bir kutu dışı çözüm olmadığı için bir geliştiriciye danışmanız gerektiğidir. Ancak, bu oldukça basit bir sorundur ve sizin için bu sorunu çözmek için bir geliştirici işe alma muhtemelen maliyet engelleyici değildir. - longneck
Suspend-Message PowerShell CmdLet'in varlığı, iletilerin teslim durumunun da program aracılığıyla değiştirilebileceğine inanmaktadır. Tüm mesaj takibini, yönetici hakları vb. Değişimlerini Exchange altında tutabileceğimiz için, iletinin iletim durumunu yalnızca ayrı bir SMTP proxy'si üzerinden değiştiren özel bir aktarım aracısı fikrini seviyorum. Giriş için teşekkürler! - abstrask


Mesaj Denetimi

Muhtemelen ideal olmayan bir çözüm, belirli bir boyuttaki mesajların göndericinin yöneticisine ya da belirli bir posta kutusuna (geminin Exchange sunucusundaki) ılımlılık için iletilmesi için bir aktarım kuralı kullanmaktır. Bu şekilde, eğer denizdeyseniz, büyük mesajlar aslında başka bir posta kutusunda sıraya alınabilir. Gemi limana ulaştığında, yönetici veya belirlenen moderatör bunları teslimat için onaylayabilir.

Downsides şunlardır:

  • el ile devre dışı bırakmadığınız sürece bu kural her zaman açıktır (ancak bir komut dosyası aracılığıyla yapılabilir), böylece büyük bir iletide bile büyük iletiler moderatör posta kutusuna yönlendirilir
  • Tüm büyük iletiler gönderilmeden önce bir kullanıcı tarafından manuel incelemeye ihtiyaç duyar ancak belirli şeylerde kural için istisnalar ekleyebilirsiniz.
  • Başka bir kişi gizlilik endişeleri nedeniyle ideal olmayabilir, giden posta okuyor olurdu, ancak bu sizin org bağlıdır

Biri, bir kullanıcının, bir nedenden ötürü bağlantıyı sadece batabilecek bir grup iş ile ilgili olmayan bir şey göndermeye çalışıyor olsaydı bile, bir mesajın gönderilip gönderilmeyeceğine dair kararlar vermeniz olurdu. Bir politikaya işaret etmek ve bileklerine tokat atmak gibi idari kontroller tarafından düzeltilebilir, böylece tekrar yapmazlar.

Exchange 2010 Taşımacılık Kuralları

Özel Komut Dosyası

RE: Büyük e-postaları yönetmek için özel bir komut dosyası. Exchange sunucusunda Gönderme Bağlantınızı etkinleştirecek / devre dışı bırakacak aşağıdaki gibi bir şey görebiliyordum. Bir dezavantaj tüm postalar sadece büyük mesajlar yerine sıraya göre düzenlenir, ancak bu satırlardaki bazı mantıkların çalışması gerekir:

  1. Gecikmeyi kontrol edin. Düşük ise, Gönderme Bağlantısını etkinleştirin, büyük mesajları askıya alın ve 5 dakika bekleyin (veya diğer isteğe bağlı süreleri). Yüksekse, Bağlama Bağlantısını devre dışı bırakın.
  2. 5 dakika bekle.
  3. 5 dakika sonra büyük mesajları kontrol edin ve askıya alın. Gönderme Bağlantısını yeniden etkinleştirmek için, sıraya girilene kadar küçük, sıraya alınmış iletiler serbest bırakılır (Gönderme bağlayıcısını yeniden etkinleştirdikten sonra sıra / WAN bağlantısını tıkamayacak şekilde bir kerede 1 mesajdan geçebilirsiniz)
  4. Gönderme Bağlantısını Devre Dışı Bırak ve # 1'e git

Bu mantık tam anlamıyla% 100 mantıklı değil, fakat tüm fikirleri sıralayın, gecikme olup olmadığını kontrol edin, yüksek iletileri, sıra dışı postaları, tüm postaları sıralayın, vb. Böyle bir senaryo hiç çöker veya durursa, gemide BT personeli olmadan yeniden sıfırlamayı nasıl başardınız? Potansiyel olarak tüm giden postayı süresiz olarak durdurabilir (Gönderme Bağlantısını devre dışı bıraktıktan sonra durursa) veya Gönderici Bağlayıcısı etkinleştirilmişse ve komut dosyası artık çalışmıyorsa büyük mesaj kontrolünü kaybedebilirsiniz.

SMTP Proxy'si

Exchange'in dışında herhangi bir mesajın işlemesine karşı olduğunu belirtmiş olsanız bile, bunun hakkında biraz düşündükten sonra, bir tür SMTP proxy çözümünün kullanılmasıyla @longneck'e karar verdim. IIS SMTP bile Exchange 2010'un görünmeyeceği bir ertelenmiş dağıtım mekanizmasına sahiptir. Büyük iletileri IIS diskine depolayabilen IIS SMTP sunucusuna yeniden yönlendirebilir ve ilk önce gecikme olup olmadığını kontrol ederek, IIS SMTP sunucusunun gecikme süresi düşük olduğunda bir komut dosyası aracılığıyla gönderilmesini sağlayabilirsiniz. En kötü durumda, eğer zamanlama mekanizmanız sıkışmış veya durdurulmuşsa, büyük mesajlar diske yapışmış olur, ancak küçük mesajlar gönderilmeye devam eder. IIS SMTP'den daha iyi çözümler var ve hiç kullanmadım, ama bu sadece bir örnektir.

IIS 7'de SMTP E-Postasını Yapılandırma


3
2018-01-25 16:28



Giriş için teşekkürler! Doğrudan belirtilmemiş olsa da, ertelenmiş e-postaların sonunda hedeflerine ulaşılamaması için benim için bir gerekliliktir. Bu, ilk önce onları bir moderatör posta kutusuna yönlendirirken mi, yoksa işaretleri mi yoksa gizli mi mi görünecek? Onları manuel onaylama sürecine gelince, bunun bir şekilde yazılabileceğini düşünürdüm? - abstrask
İyi soru, ve bunu hiç uygulayamadığımdan, Borsa organımızda hızlı bir test kuralı oluşturdum ve bir test e-postası gönderdim. Moderatör mesajı 'Onayla' veya 'Reddet' seçeneği ile aldı. İletiyi onayladıktan sonra, mesaj başlığı veya e-posta gövdesinin herhangi bir yerinde, moderatör posta kutusunun hiçbir belirtisi olmadan değiştirilmemiş ve hedefe gönderilmemiş olan hedefe gönderilmiştir. Bununla birlikte, onay sürecini betimlemekte herhangi bir şey bulamıyorum, bu nedenle, bu görev için bir insanı gerçekten belirtmeniz gerekebilir. - August
Fikir için çok teşekkür ederim. Kuralın komut dosyası aracılığıyla kolayca değiştirilebileceğini düşünürdüm, ancak insan müdahalesi kısmı, gemide özel BT personeli olmadığından bizim için büyük bir dezavantajdır. Mesajların programatik olarak nasıl onaylanabileceğini bilen var mı? - abstrask


Exchange 2010 SP1 ile sunulan "Message Throttling" in yeni özelliklerine bir göz atmaya çalışın. Kullanım durumunuz için çok yararlı olabilir.

http://technet.microsoft.com/en-us/library/bb232205(v=exchg.141).aspx


2
2018-01-25 11:50



Bu yüzden bu senaryoda Message Throttling'in yardımcı olacağından emin değilim. Makale üzerinden okumak, bir Ulaştırma veya Kenar sunucusunun bir ton mesajla boğulmasını önlemeye daha uygun görünmektedir, bu yüzden QoS tipi mesaj iletimi seviyesini vermek için maliyetlendirmeyi uygular. Bu durumda, 10 MB'lık bir mesaj gönderen tek bir kullanıcı, tüm WAN linkini doyurabilir, bu da diğer hizmetleri kullanılamaz hale getirebilir. Ertelenmiş bir dağıtım mekanizması daha uygun olurdu diye düşünüyorum. - August
Üzgünüm, ama okuduğumda, "Mesaj Azaltma" sadece iyilik küçük mesajlar göndermek (Varsayılan olarak, normalden-düşük mesaj oranı 20: 1'dir.), değil önlemek daha büyük mesajlar göndermek. Amacımı nasıl gerçekleştireceğimize dair daha spesifik bir öneriniz var mı? Teşekkürler. - abstrask