Jadwalkan / antri e-mail besar di Exchange 2010, tunda hingga latensi turun

14

Tantangan saya

Kami memiliki server Exchange di berbagai situs, tetapi juga di atas kapal. Kapal-kapal terhubung ke jaringan kami melalui tautan satelit ketika di laut, tetapi beralih ke jembatan WiFi saat di pelabuhan.

Karena latensi tinggi (500+ ms) dan drop-out yang tidak biasa (misalnya ketika kapal berputar), mencoba mengirim email apa pun di atas beberapa megabyte saat berada di laut, kemungkinan akan gagal dan dicoba lagi hingga batasnya telah tercapai. Hasilnya: Email tidak terkirim dan masing-masing mencoba mengkonsumsi bandwidth berharga pada tautan sat.

Salah satu "solusi" adalah membatasi ukuran email maksimum hingga 5 MB, tapi itu tidak mudah digunakan dan tidak perlu pembatasan saat berada di port.

Ide yang kasar

Apa yang saya lebih suka lakukan, adalah mengantri semua email lebih besar dari batas yang ditentukan untuk pengiriman nanti ketika di laut, saat mengirim semua email kecil segera. Saya kemudian berpikir saya akan melakukan ping ke server transport hub di pusat data kami secara teratur, ketika latensi turun di bawah ~ 400 ms, saya akan mulai memproses antrian email yang besar. Ketika latensi naik lebih dari 400 ms, saya akan pasang lubang dan membiarkan e-mail masuk lagi.

Sekarang, saya belum benar-benar kotor dengan Exchange sejak versi 2003. Saat itu, Anda dapat menjadwalkan e-mail besar untuk pengiriman nanti, jadi ide saya melakukan sesuatu yang serupa di Exchange 2010, lalu skrip cara untuk mengalihkan pengiriman. jadwal untuk email besar antara 'selalu' dan 'tidak pernah'.

Kendala

Seharusnya tidak terlalu rumit untuk membuat skrip seperti itu, tetapi kemudian saya membaca bahwa fitur yang saya andalkan telah dihapus dengan Exchange 2007:

Ini adalah fitur yang ada di Exchange 2003 tetapi telah dihapus untuk Exchange 2007. Ini ditetapkan pada Konektor SMTP dengan 'menggunakan waktu pengiriman yang berbeda untuk pesan yang terlalu besar'.

TechCenter: Apakah mungkin untuk menjadwalkan pengiriman email berdasarkan ukuran di Exchange?

Pertanyaan

Apakah itu benar - Apakah fitur ini tidak lagi hadir di Exchange 2010, atau hanya diubah menjadi sesuatu yang serupa, yang dapat saya gunakan untuk mencapai tujuan saya? Jika ya, apa?

Apakah ada cara lain untuk menunda pengiriman email besar di server Exchange tertentu? Itu bisa didasarkan pada jadwal atau bahkan mungkin memerlukan tindakan khusus - saya cukup yakin akan ada beberapa cara untuk memicu pengiriman melalui skrip, saya hanya perlu email besar dalam antrian terpisah di kapal.

Pikiran Anda tentang ini akan sangat dihargai! :-)

Sunting # 1: Gagasan Kasar yang Disempurnakan

Saya mencoba dua PowerMell CmdLets saya pikir saya bisa membawa saya cukup dekat dengan tujuan saya:

Saya bermain-main dengan Get-Message untuk sementara waktu, untuk melihat pesan seperti apa yang akan ditangani oleh perintah di atas.

Yang terpenting, perintah ini menerima filter ukuran pesan. Perintah ini akan mencantumkan pesan yang antri, pada server saat ini, lebih besar dari 5 MB (5.242.880 byte):

get-message -Filter {Size -gt 5242880}

Tampaknya Get-Messagehanya mengembalikan pesan dari berbagai antrian pengiriman jarak jauh. Tetapi apakah pesan mengalir dalam server, namun secara singkat, muncul dalam antrian yang Get / Suspend / Resume-Message akan berantakan?

Jika tidak, solusinya bisa sesederhana skrip terjadwal setiap beberapa menit, di sepanjang baris (dalam kode pseudo):

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

Masalah / pertanyaan lanjutan:

Sebagian besar tidak relevan sekarang - lihat edit # 2.

Apakah Get-Messagehanya akan mengembalikan pesan dari antrian pengiriman jarak jauh - tidak pernah pesan untuk pengiriman intra-server? Jika tidak, apakah nama identitas antrian pengiriman jauh mengikuti pola tertentu, yang dapat saya gunakan untuk memfilter?

Bisakah / haruskah ini dilakukan melalui Agen Transport khusus (seperti yang disarankan oleh @longneck) atau Event Sink (jika konsep ini masih ada di Exchange 2010)?

Katakanlah saya menjalankan skrip setiap 5 menit, itu masih berarti pesan besar sedang dikirim, berpotensi menyebabkan masalah hingga 5 menit, sebelum ditangguhkan. Kita masih lebih baik dari kita sekarang, tetapi itu tidak optimal. Saya dapat meningkatkan frekuensinya setiap menit, tetapi itu bukan solusi yang paling elegan.

Bahkan jika saya hanya memeriksa waktu bolak-balik setiap 5 menit (untuk menghemat lalu lintas sat), mekanisme Exchange apa yang harus saya siapkan, untuk mengecek terhadap RTT yang terakhir direkam, setiap kali sebuah pesan dikirimkan yang dikirim ke pengiriman jarak jauh mengantri, dan kemudian mengambil tindakan yang sesuai?

Sunting # 2: Solusi yang Diusulkan

Izinkan saya untuk merangkum solusi yang diusulkan, dan pro dan kontra mereka seperti yang saya lihat:

Agen Transportasi Khusus

Konsep

  • Monitor latensi secara berkala, klasifikasikan sebagai tinggi atau rendah (ambang batas: 400 ms?)
  • Melalui Agen Transportasi khusus, menangguhkan / melanjutkan semua email yang lebih besar dari ambang batas yang ditetapkan, ketika klasifikasi latensi berubah
  • Melalui TA kustom, segera masukkan pesan besar selanjutnya dalam mode "tangguhkan", jika latensi tinggi

Kekuatan

  • Email besar tidak pernah dicoba dikirim ketika latensi tinggi

Kelemahan

  • Tidak ada keterampilan pengembangan untuk membuat in-house ini (catatan untuk diri sendiri: kode sumber harus menjadi milik perusahaan saya sebagai bagian dari kontrak dengan pengembang eksternal)
  • Perangkat lunak pihak ketiga yang terkait dengan Exchange dapat menyebabkan masalah saat menambal atau memperbarui
  • Diperlukan semacam perjanjian dukungan, jika terjadi kesalahan (lihat di atas)

Pesan Besar Sedang

Konsep

  • Monitor latensi secara berkala, klasifikasikan sebagai tinggi atau rendah (ambang batas: 400 ms?)
  • Berdasarkan klasifikasi latensi, konfigurasikan Exchange Transport Rules melalui scripting, untuk membiarkan semua pesan mengalir atau meneruskan pesan besar ke moderator
  • Menyetujui pesan dalam antrean moderator saat mengirim di pelabuhan, mungkin oleh manusia

Kekuatan

  • Email besar tidak pernah dicoba dikirim ketika latensi tinggi
  • Pesan ditangguhkan menggunakan Aturan Transport Exchange asli setempat

Kelemahan

  • Dengan kelihatannya, pesan tidak dapat disetujui secara program ketika latensi rendah, maka intervensi manusia diperlukan setiap kali kapal berada di pelabuhan
  • Mungkin masalah privasi, jika tidak dikelola secara terprogram

Pertanyaan

  • Bisakah pesan disetujui secara terprogram dari kotak surat moderator? Bagaimana?

Perintah PowerShell terjadwal

Konsep

  • Monitor latensi secara berkala, klasifikasikan sebagai tinggi atau rendah (ambang batas: 400 ms?)
  • Selama latensi tinggi, sering (setiap menit?) Menangguhkan pesan besar ( Suspend-Message -Filter {Size -gt 5242880})
  • Ketika latensi turun ke rendah, lanjutkan semua pesan ( Resume-Message)

Kekuatan

  • Sangat sederhana untuk diimplementasikan

Kelemahan

  • Bukan solusi yang paling elegan
  • Pengiriman setiap pesan besar baru dapat dicoba selama interval antar Suspend-Messageperintah, mungkin masih menyia-nyiakan beberapa bandwidth dan membuat kemacetan (meskipun sangat singkat dibandingkan dengan tidak melakukan apa-apa)

Pertanyaan

  • Adakah ide tentang cara mencegah upaya untuk mengirim pesan besar, di antara Suspend-Messageperintah?
  • Apakah Get-Messagehanya akan mengembalikan pesan dari antrian pengiriman jarak jauh - tidak pernah pesan untuk pengiriman intra-server? Jika tidak, apakah nama identitas antrian pengiriman jauh mengikuti pola tertentu, yang dapat saya gunakan untuk memfilter?

Sunting # 3: Langkah Maju

Setelah membawa solusi yang diusulkan di tim saya (termasuk proksi SMTP, yang gagal saya sertakan dalam edit # 2), dan berdasarkan perasaan saya sendiri, kami memutuskan untuk mencari Agen Transport Exchange kustom.

Saya berhubungan dengan beberapa perusahaan konsultan, yang akan kembali kepada saya dengan bagaimana kehendak menyerang masalah dan berapa biayanya.

Jika Anda memiliki pengalaman dengan outsourcing tugas pemrograman, jangan ragu untuk meninggalkan umpan balik ke pertanyaan terkait saya di Stack Overflow , karena saya tidak.

abstrask
sumber
3
+1 untuk salah satu pertanyaan terbaik yang saya lihat belakangan ini.
John Gardeniers
peran apa yang dimiliki oleh server Exchange di kapal?
Agustus
Server Exchange di kapal memegang peran Hub Transport, Mailbox, dan Akses Klien.
abstrask
1
apakah Anda menjalankan pengoptimal QoS atau WAN pada tautan satelit?
longneck
Hmm dengan peran Mailbox, Anda juga bisa memiliki link jenuh ketika surat eksternal akan dikirim ke kotak surat dari seseorang di server Exchange kapal ...
Agustus

Jawaban:

2

Untuk mengatasi masalah seperti yang Anda minta, Anda bisa menulis Agen Transportasi Anda sendiri menggunakan SDK Agen Pertukaran Microsoft Exchange . Transport Agent berbasis peristiwa sehingga Exchange akan memanggil fungsi di perpustakaan Anda saat pesan diterima. Pustaka Anda kemudian dapat melakukan sesuatu seperti menahan pesan. Jika Anda tidak memiliki keterampilan sendiri untuk melakukan ini, saya yakin Anda dapat menyewa pengembang untuk menuliskannya untuk Anda.

Tapi saya pikir ini bukan solusi yang bagus. Sebagai alternatif untuk Anda selidiki, Anda mungkin ingin melihat sesuatu seperti proxy SMTP untuk tautan berkualitas rendah. Seperti yang telah Anda temukan, SMTP adalah protokol yang mengerikan untuk tautan berkualitas rendah karena koneksi yang terputus menyebabkan pengiriman pesan dimulai kembali dari awal alih-alih dilanjutkan dari tempat sebelumnya. Jika Anda akan menyewa pengembang untuk sesuatu, saya akan mempertimbangkan untuk menulis program server yang menerima koneksi SMTP yang masuk dan mengirimkan pesan ke instance jarak jauh dari program yang sama ini di ujung lain koneksi satelit dengan cara yang dapat dilanjutkan ( mungkin memisahkan pesan besar dari pesan kecil melalui port TCP untuk memungkinkan perawatan QoS oleh akselerator WAN Anda). Instance jarak jauh kemudian bisa, setelah menerima pesan lengkap,

leher panjang
sumber
Terima kasih atas masukan Anda! Saya harus mengatakan itu jauh lebih sedikit di luar kotak seperti yang saya harapkan. Saya penggemar berat prinsip KISS. Meskipun saya tidak tahu banyak tentang menulis agen transportasi, itu agak menarik bagi saya, untuk menjaga penanganan dalam Exchange. Di Exchange 2010, tampaknya antrian dibuat dan dihancurkan saat diminta. Mungkin agen dapat memaksa surat besar ke dalam antrian terpisah dan skrip dapat beralih antara 'menangguhkan' dan 'melanjutkan'. Adakah yang bisa Anda lakukan dengan TA di Exchange 2010?
abstrask
Adapun saran proksi / smarthost SMTP, itu juga terdengar sebagai solusi OK, jika saya dapat menemukan solusi off-the-shelf, sebaiknya dipelihara secara aktif. Tampaknya menjadi tugas pemrograman yang lebih kompleks lebih besar daripada agen transportasi Exchange, yang memodifikasi aliran dalam Exchange (saya bisa salah?). Menurut pengalaman saya, solusi kompleks yang dibuat khusus, seperti yang saya bayangkan sebagai proxy SMTP, cenderung mahal untuk didukung dalam jangka panjang.
abstrask
re: pisahkan antrian, saya tidak cukup akrab dengan internal Exchange untuk mengetahui apakah antrian berfungsi seperti itu, atau apakah itu cara terbaik. saya tahu bahwa masing-masing pesan dapat disimpan oleh TA untuk diproses berdasarkan pengalaman saya dengan Litera Metadact-e, yang melakukan hal itu: pegang pesan sampai selesai diproses (yang bisa memakan waktu beberapa menit). saya tidak tahu apakah mungkin untuk menahannya tanpa batas.
longneck
inti keseluruhan dari jawaban saya adalah bahwa Anda mungkin harus berkonsultasi dengan pengembang karena tidak ada solusi out-of-the-box untuk Anda. Namun, ini adalah masalah yang cukup sederhana dan mempekerjakan pengembang untuk menyelesaikan masalah ini karena Anda mungkin tidak mahal.
longneck
Keberadaan PowerShell CmdLet dari Suspend-Message telah diyakinkan bahwa status pengiriman pesan juga dapat dimodifikasi secara terprogram. Saya menyukai gagasan agen transportasi khusus, yang hanya mengubah status pengiriman pesan, melalui proxy SMTP yang terpisah, karena kami masih dapat menyimpan semua pelacakan pesan, pendelegasian hak admin, dll. Di bawah Exchange. Terima kasih atas masukan Anda!
abstrask
3

Moderasi Pesan

Salah satu solusi yang mungkin tidak ideal adalah dengan menggunakan aturan transportasi untuk meneruskan pesan dengan ukuran tertentu ke manajer pengirim atau kotak surat yang ditunjuk (di server Exchange kapal) untuk moderasi. Dengan cara ini jika mereka berada di laut, pesan-pesan besar pada dasarnya dapat diantri di kotak surat lain. Ketika kapal tiba di pelabuhan, manajer atau moderator yang ditunjuk dapat menyetujuinya untuk pengiriman.

Kerugiannya adalah:

  • aturan ini selalu aktif kecuali jika Anda menonaktifkannya secara manual (tetapi bisa dilakukan melalui skrip) sehingga bahkan di port pesan besar akan dialihkan ke kotak surat moderator
  • semua pesan besar akan membutuhkan tinjauan manual oleh seseorang sebelum mengirim, tetapi Anda dapat menambahkan pengecualian dalam aturan untuk hal-hal tertentu
  • orang lain akan membaca surat keluar, yang mungkin tidak ideal karena masalah privasi, tetapi ini tergantung pada org Anda

Salah satu kelebihannya adalah Anda akan memiliki manusia yang membuat keputusan apakah suatu pesan harus dikirim atau tidak, seperti jika pengguna mencoba mengirim sekelompok omong kosong yang tidak terkait dengan pekerjaan yang hanya akan merusak koneksi tanpa alasan. Mereka dapat dikoreksi oleh kontrol administratif seperti menunjuk ke suatu kebijakan dan menamparnya di pergelangan tangan sehingga mereka tidak melakukannya lagi.

Aturan Transportasi Exchange 2010

Skrip Khusus

RE: Skrip khusus untuk mengelola email besar. Saya bisa melihat sesuatu seperti di bawah ini yang akan mengaktifkan / menonaktifkan Kirim Konektor Anda di server Exchange. Kelemahannya adalah semua email disimpan dalam antrian, bukan hanya pesan besar, tetapi beberapa logika di sepanjang baris ini akan berfungsi:

  1. Periksa latensi. Jika rendah, aktifkan Kirim Konektor, batalkan pesan besar, dan tunggu 5 menit (atau jangka waktu sewenang-wenang lainnya). Jika tinggi, nonaktifkan Send Connector.
  2. Tunggu 5 menit.
  3. Setelah 5 menit, periksa pesan besar dan tunda. Aktifkan kembali Send Connector sehingga pesan antrian sangat kecil dilepaskan sampai antrian kosong (Anda bahkan dapat menggilir 1 pesan sekaligus sehingga tidak menyumbat tautan antrian / WAN setelah mengaktifkan kembali konektor Kirim)
  4. Nonaktifkan Send Connector dan goto # 1

Logika ini tidak sepenuhnya dipoles untuk masuk akal 100%, tetapi Anda mendapatkan ide - antri semua email, periksa latensi, tunda pesan besar jika tinggi, un-antrian, antrian semua email, dll. Kelemahan lain dari menjalankan skrip seperti ini adalah jika pernah crash atau berhenti, bagaimana Anda tahu menginisialisasi ulang tanpa staf TI di kapal? Ini bisa berpotensi menghentikan semua surat keluar tanpa batas (jika berhenti setelah menonaktifkan Kirim Konektor) atau Anda bisa kehilangan kontrol pesan besar Anda jika hanya membiarkan Kirim Konektor diaktifkan dan skrip tidak lagi berjalan.

Proxy SMTP

Meskipun Anda telah menunjukkan bahwa Anda menentang penanganan pesan apa pun di luar Exchange, Setelah memikirkannya lagi, saya memutuskan saya dengan @longneck menggunakan beberapa jenis solusi proxy SMTP. Bahkan IIS SMTP memiliki mekanisme pengiriman yang ditangguhkan yang tampaknya Exchange 2010 tidak. Anda bisa mengarahkan pesan besar ke server IIS SMTP yang dapat menyimpannya di disk, dan, memeriksa latensi terlebih dahulu, minta server SMIS IIS mengirimnya melalui skrip ketika latensi rendah. Kasus terburuk jika mekanisme penjadwalan Anda macet atau terhenti adalah pesan besar macet di disk, tetapi pesan kecil terus dikirim. Mungkin ada solusi yang lebih baik daripada IIS SMTP, dan saya belum pernah menggunakannya sendiri, tetapi itu hanyalah sebuah contoh.

Mengkonfigurasi E-Mail SMTP di IIS 7

Agustus
sumber
Terima kasih atas masukan Anda! Meskipun tidak ditentukan secara langsung, itu adalah persyaratan bagi saya bahwa email yang ditangguhkan akhirnya mencapai tujuan mereka tanpa diubah. Apakah itu masalahnya, ketika pertama kali meneruskannya ke kotak surat moderator, atau apakah akan meninggalkan tanda - tersembunyi atau terlihat? Adapun proses manual untuk menyetujui mereka, saya akan berpikir ini bisa dituliskan entah bagaimana?
abstrask
Pertanyaan yang bagus, dan karena saya belum pernah menerapkan ini, saya membuat aturan pengujian cepat di Exchange org kami dan mengirim email tes. Moderator menerima pesan dengan opsi 'Setuju' atau 'Tolak'. Setelah saya menyetujui pesan itu, pesan itu dirilis dan dikirim ke tujuan tanpa diubah tanpa tanda-tanda kotak surat moderator di mana pun di header pesan atau badan email. Namun, sepertinya saya tidak dapat menemukan apa pun dalam penulisan proses persetujuan, jadi Anda mungkin perlu menunjuk manusia untuk tugas ini.
Agustus
Terima kasih banyak atas idenya. Saya akan berpikir aturan dapat dengan mudah dimodifikasi melalui scripting, tetapi bagian intervensi manusia adalah kelemahan besar bagi kami, karena kami tidak memiliki staf TI yang berdedikasi. Adakah yang tahu jika pesan dapat disetujui secara programatik dan bagaimana caranya?
abstrask
2

Cobalah untuk melihat fitur-fitur baru "Penghambatan Pesan" yang diperkenalkan dengan Exchange 2010 SP1. Ini bisa sangat membantu untuk kasus penggunaan Anda.

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

Emyl
sumber
1
Saya tidak yakin Message Throttling akan membantu dalam skenario khusus ini. Membaca artikel itu tampaknya lebih diarahkan untuk mencegah server Transport atau Edge dari kewalahan dengan satu ton pesan sehingga itu berlaku biaya untuk memberikan tingkat pengiriman pesan jenis QoS. Dalam hal ini meskipun pengguna tunggal yang mengirim pesan 10 MB dapat memenuhi seluruh tautan WAN, membuat layanan lain tidak tersedia. Mekanisme pengiriman yang ditangguhkan akan lebih tepat menurut saya.
Agustus
1
Maaf, tetapi ketika saya membacanya, "Pembatasan Pesan" hanya akan menyukai pengiriman pesan yang lebih kecil ( Secara default, rasio pesan normal ke rendah adalah 20: 1 ), tidak mencegah pengiriman pesan yang lebih besar. Apakah Anda memiliki saran yang lebih spesifik, tentang cara mencapai tujuan saya? Terima kasih.
abstrask