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-Message
hanya 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-Message
hanya 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-Message
perintah, 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-Message
perintah? - Apakah
Get-Message
hanya 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.
sumber
Jawaban:
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,
sumber
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:
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:
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
sumber
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
sumber