Розклад / черга великих електронних листів у Exchange 2010, відкладіть, поки не спаде затримка


14

Мій виклик

У нас є сервери Exchange на різних сайтах, але також на борту кораблів. Кораблі підключені до нашої мережі за допомогою супутникових зв’язків у морі, але перемикаються на мости WiFi, коли вони в порту.

Через високу затримку (500+ мс) та нечасті вибування (наприклад, коли судна повертаються), спроба надіслати будь-яку електронну пошту вище декількох мегабайт у морі, ймовірно, не вдасться та буде повторено повторно до межі було досягнуто. Результат: електронна пошта не надходить, і кожна спроба споживає цінну пропускну здатність по посиланню.

Одне "рішення" - обмежити максимальний розмір електронної пошти, щоб сказати, 5 Мб, але це навряд чи дружнє для користувачів і зайве обмеження під час перебування в порту.

Приблизна ідея

Я хотів би зробити те, щоб встановити чергу на всі електронні листи, що перевищують встановлений ліміт для подальшої доставки у море, при цьому надсилаючи всі невеликі електронні листи негайно. Тоді я думав, що регулярно надсилаю сервер транспортного центру в наш центр обробки даних, коли затримка падає менше ~ 400 мс, я б розпочала обробку великої черги електронної пошти. Коли затримка збільшується понад 400 мс, я заткну отвір і знову надішлю черги на електронну пошту.

Тепер я не забруднив руки Exchange від версії 2003 року. Тоді ви могли запланувати великі електронні листи для подальшої доставки, тому моя ідея була зробити щось подібне в Exchange 2010, а потім написати сценарій способу переключення доставки. графік великих електронних листів між "завжди" і "ніколи".

Перешкода

Створювати подібний сценарій не повинно бути надто складно, але потім я прочитав, що функція, на яку я покладався, була видалена з Exchange 2007:

Ця функція була присутньою в Exchange 2003, але вона була видалена для Exchange 2007. Вона була встановлена ​​на роз'ємі SMTP з "використанням різних строків доставки для повідомлень великих розмірів".

TechCenter: Чи можна запланувати доставку електронної пошти залежно від розміру в Exchange?

Запитання

Це правда? - Чи ця функція більше не присутня в Exchange 2010 або вона просто перетворилася на щось подібне, я можу використовувати для досягнення своєї мети? Якщо так, то що?

Чи є інший спосіб відкласти доставку великих електронних листів на певні сервери Exchange? Це може базуватися на графіку або, можливо, навіть вимагати конкретних дій - я впевнений, що буде якийсь спосіб запустити доставку через сценарій, мені просто потрібні великі електронні листи в окремій черзі на кораблі.

Ваші думки з цього приводу будуть високо оцінені! :-)

Редагувати №1: Вишукана груба ідея

Я натрапив на два PowerShell CmdLets, я думаю, що можуть наблизити мене до своєї мети:

Я пограв з Get-Message на деякий час, щоб побачити, з якими повідомленнями матимуть справу команди вище.

Найголовніше, що ці команди приймають фільтр розміру повідомлення. Ця команда буде перераховувати в черзі повідомлення на поточному сервері, що перевищує 5 Мб (5 422 880 байт):

get-message -Filter {Size -gt 5242880}

Здається, Get-Messageлише повертає повідомлення з різних черг віддаленої доставки. Але чи повідомлення, що протікають всередині сервера, однак коротко, відображаються у черзі, з якою заплутатися Get / Suspend / Resume-Message?

Якщо ні, рішення може бути таким же простим, як запланований сценарій кожні кілька хвилин, у рядках (у псевдокоді):

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

Проблеми / подальші запитання:

Переважно нерелевантний зараз - див. Редагування №2.

Буду Get-Messageповертати тільки повідомлення з черг віддаленої доставки - ніколи повідомлення для доставки всередині сервера? Якщо ні, чи відповідає ім'я особи віддалених черг доставки певній схемі, яку я можу використовувати для фільтрації?

Чи можна / слід це зробити за допомогою спеціального транспортного агента (як запропонував @longneck) або мийки подій (якщо ця концепція все ще існує в Exchange 2010)?

Скажімо, я запускаю сценарій кожні 5 хвилин, що все ще означає, що надсилання великих повідомлень може потенційно спричинити проблеми протягом 5 хвилин, перш ніж зупинятись. Нам все одно було б краще, ніж зараз, але це не оптимально. Я міг би збільшувати частоту до кожної хвилини, але це було б не найелегантніше рішення.

Навіть якщо я перевіряю лише час у зворотному напрямку кожні 5 хвилин (для економії передаваного трафіку), який механізм Exchange потрібно мені налаштувати, щоб перевірити, чи не було останніх записаних RTT, кожного разу, коли надсилається повідомлення, яке переходить до віддаленої доставки чергу, а потім вжити відповідних заходів?

Редагувати №2: Пропоновані рішення

Дозвольте підсумувати запропоновані рішення та їх плюси та мінуси, як я бачу:

Спеціальний транспортний агент

Концепція

  • Періодично контролюйте затримку, класифікуйте як високу або низьку (поріг: 400 мс?)
  • За допомогою спеціального транспортного агента призупинити / відновити всі електронні листи, що перевищують встановлений поріг, коли класифікація затримок змінюється
  • За допомогою спеціальної ТА негайно перекладіть подані великі повідомлення в режим "призупинення", якщо затримка висока

Сильні сторони

  • Великі електронні листи ніколи не намагаються доставляти, коли затримка висока

Слабкі сторони

  • Ніяких навичок розробки для створення цього власного будинку (зауважте, я: вихідний код повинен належати моїй компанії як частина договору із зовнішнім розробником)
  • Програмне забезпечення сторонніх виробників, яке зв’язується з Exchange, може спричинити проблеми під час виправлення або оновлення
  • Якась угода про підтримку необхідна, якщо щось піде не так (див. Вище)

Помірні великі повідомлення

Концепція

  • Періодично контролюйте затримку, класифікуйте як високу або низьку (поріг: 400 мс?)
  • На основі класифікації затримок налаштовуйте правила транспорту Exchange за допомогою сценаріїв, щоб вони дозволяли потоку всіх повідомлень або пересилали великі повідомлення модератору
  • Затвердити повідомлення в черзі модератора, коли корабель знаходиться в порту, можливо, людиною

Сильні сторони

  • Великі електронні листи ніколи не намагаються доставляти, коли затримка висока
  • Повідомлення призупиняються за допомогою власних правил власного транспорту Exchange

Слабкі сторони

  • По зовнішньому вигляду повідомлення не можуть бути затверджені програмно, коли затримка низька, тому необхідне втручання людини щоразу, коли корабель знаходиться у порту
  • Можливо, проблеми конфіденційності, якщо модерація не обробляється програмно

Запитання

  • Чи можна схвалювати повідомлення програмно з поштової скриньки модератора? Як?

Заплановані команди PowerShell

Концепція

  • Періодично контролюйте затримку, класифікуйте як високу або низьку (поріг: 400 мс?)
  • Поки затримка висока, часто (щохвилини?) Призупиняйте будь-які великі повідомлення ( Suspend-Message -Filter {Size -gt 5242880})
  • Коли затримка знизиться до низької, відновіть усі повідомлення ( Resume-Message)

Сильні сторони

  • Дуже простий у виконанні

Слабкі сторони

  • Не найелегантніше рішення
  • Доставка кожного нового великого повідомлення може здійснюватися протягом тих пір, поки інтервал між Suspend-Messageкомандами, можливо, все-таки витрачає деяку пропускну здатність і створює перевантаження (хоча дуже коротко, порівняно з тим, що нічого не робити)

Запитання

  • Будь-які ідеї, як запобігти спробам доставки великих повідомлень між Suspend-Messageкомандами?
  • Буду Get-Messageповертати тільки повідомлення з черг віддаленої доставки - ніколи повідомлення для доставки всередині сервера? Якщо ні, чи відповідає ім'я особи віддалених черг доставки певній схемі, яку я можу використовувати для фільтрації?

Правка №3: ​​Шлях вперед

Після підбору запропонованих рішень у моїй команді (включаючи проксі-сервер SMTP, який мені не вдалося включити у редагування №2), і виходячи з власного відчуття кишки, ми вирішили звернутися до спеціального транспортного агента Exchange.

Я контактую з декількома компаніями-консультантами, які повернуться до мене з тим, як буде атакувати проблему і що це буде коштувати.

Якщо у вас є досвід виконання завдань програмування аутсорсингу, не соромтесь залишити відгуки на моє відповідне питання щодо переповнення стека , оскільки я цього не роблю.


3
+1 за одне з кращих питань, які я бачив пізно.
Джон Гарденєр

які ролі виконують сервери Exchange на кораблях?
серпня

Сервери Exchange на кораблях виконують ролі транспорту, поштової скриньки та клієнтського доступу.
абстракск

1
чи використовуєте ви будь-який оптимізатор QoS або WAN на супутникових посиланнях?
longneck

Гм, з роллю "Поштова скринька", ви також можете наситити посилання, коли зовнішня пошта надсилається до поштової скриньки когось із серверного сервера Exchange ...
серпня

Відповіді:


2

Щоб вирішити проблему так, як ви просили, ви можете написати власного транспортного агента за допомогою SDK для транспортного агента Microsoft Exchange . Транспортні агенти базуються на подіях, тому Exchange отримає виклик функції у вашій бібліотеці при отриманні повідомлення. Тоді ваша бібліотека може зробити щось на зразок утримувати повідомлення. Якщо у вас немає власних навичок це робити, я впевнений, що ви можете найняти розробника, щоб написати це для вас.

Але я не думаю, що це чудове рішення. В якості альтернативи вам слід розглянути щось на зразок проксі-сервера SMTP для низькоякісних посилань. Як ви виявили, SMTP - це жахливий протокол для низькоякісних посилань, оскільки перерване з'єднання викликає перезавантаження повідомлення з самого початку, а не відновлення з того місця, де воно припинилося. Якщо ви збираєтесь найняти розробника для чогось, я б розглядав можливість написати серверну програму, яка приймає вхідні SMTP-з'єднання і надсилає повідомлення віддаленому екземпляру цієї самої програми на іншому кінці супутникового з'єднання резюме ( можливо, відокремлення великих повідомлень від невеликих повідомлень через порт TCP, щоб дозволити обробку QoS вашим прискорювачем WAN). Потім, після отримання повного повідомлення, віддалений екземпляр може


Дякуємо за ваш внесок! Треба сказати, що це набагато менше, ніж ящик, ніж я сподівався. Я великий фанат принципу KISS. Хоча я не знаю багато про те, як писати транспортних агентів, мені дещо вимушено тримати обробку в Exchange. У Exchange 2010, схоже, черги створюються та знищуються на вимогу. Можливо, агент може змусити велику пошту в окрему чергу, і сценарій може перемикатися між "призупинити" та "відновити". Будь-яка ідея полягає в тому, що ви можете зробити з TA в Exchange 2010?
абстракск

Що стосується пропозиції SMTP проксі / smarthost, вона також звучить як гарне рішення, якщо я можу знайти позачергове рішення, бажано активно підтримуватися. Здається, це більш складна задача програмування, ніж транспортний агент Exchange, що змінює потік в Exchange (я можу помилятися?). На мій досвід, що складні рішення, виготовлені на замовлення, як я думаю, це був би проксі-сервер SMTP, як правило, дорого підтримують у довгостроковій перспективі.
абстракск

re: окремі черги, я недостатньо знайомий із внутрішніми службами Exchange, щоб знати, чи працюють черги так, чи це найкращий спосіб. Я знаю, що індивідуальні повідомлення можуть утримуватись ТП для обробки на основі мого досвіду з Litera Metadact-e, який робить саме це: тримайте повідомлення, поки не буде закінчено обробку (що може зайняти багато хвилин). я не знаю, чи можна тримати їх нескінченно.
longneck

моя загальна думка моєї відповіді полягає в тому, що ви, мабуть, повинні проконсультуватися з розробником, оскільки для вас немає нестандартного рішення. однак це досить проста проблема, і наймати розробника для вирішення цієї проблеми для вас, мабуть, не надто витратно.
longneck

Існування PowerShell CmdLet Suspend-Message переконувало, що стан доставки повідомлень також може бути змінено програмно. Мені подобається ідея користувальницького транспортного агента, який просто змінює стан доставки повідомлення через окремий проксі SMTP, оскільки ми все одно зможемо зберігати все відстеження повідомлень, делегування адміністраторських прав тощо в Exchange. Дякуємо за ваш внесок!
абстракс

3

Модерування повідомлення

Одне, мабуть, не ідеальне рішення - використовувати транспортне правило для пересилання повідомлень певного розміру або менеджеру відправника, або призначеному поштовій скриньці (на судновому сервері Exchange) для модерації. Таким чином, якщо вони знаходяться в морі, великі повідомлення можуть бути по черзі в іншій поштовій скриньці. Коли судно прибуває до порту, керівник або призначений модератор може затвердити їх для доставки.

Мінуси:

  • це правило завжди ввімкнено, якщо ви не відключите його вручну (але це можна зробити за допомогою скрипту), тому навіть у великих портах повідомлення переспрямуються на поштову скриньку модератора
  • всі великі повідомлення потребують перегляду вручну ким-небудь перед надсиланням, але ви можете додати винятки з правила для певних речей
  • інша людина буде читати вихідну пошту, що може не бути ідеальним через проблеми конфіденційності, але це залежить від вашого органу

Одним боком є ​​те, що ви мали б люди, які приймають рішення щодо того, чи потрібно повідомлення надсилати чи ні, наприклад, якщо користувач намагався надіслати купу неробочих лайнів, які б просто зірвали з'єднання без причини. Їх можна було виправити адміністративним контролем, таким як вказівка ​​на політику та ляпання їх по зап'ястя, щоб вони не робили це знову.

Правила транспортування Exchange 2010

Спеціальний сценарій

RE: Спеціальний сценарій для управління великими електронними листами. Я можу побачити щось подібне нижче, що б увімкнуло / вимкнуло ваш Send Connector на сервері Exchange. Недоліком є ​​вся пошта, яка утримується в черзі замість просто великих повідомлень, але певна логіка в цих рядках повинна працювати:

  1. Перевірте затримку. Якщо вона низька, увімкніть роз'єм для надсилання, відключіть великі повідомлення та зачекайте 5 хвилин (або інший довільний проміжок часу). Якщо він високий, вимкніть роз'єм для надсилання.
  2. Зачекайте 5 хвилин.
  3. Через 5 хвилин перевірте наявність великих повідомлень і призупиніть їх. Повторно увімкніть Роз'єм для надсилання настільки дрібних повідомлень у черзі, поки черга не буде порожньою (ви навіть можете переходити по одному повідомленню одночасно, щоб не засмітити посилання черги / WAN після повторного ввімкнення з'єднувача "Відправити")
  4. Вимкніть роз'єм для надсилання та перейдіть до №1

Ця логіка не повністю відшліфована, щоб мати 100% сенс, але ви отримуєте ідею - встановити чергу на всю пошту, перевірити затримку, призупинити великі повідомлення, якщо вона висока, пошту без черги, усю чергу в черзі тощо. Ще один недолік роботи такий сценарій є, якщо він коли-небудь виходить з ладу або зупиняється, то як би ви знали, щоб реанімізувати його без персоналу ІТ на борту кораблів? Він може або потенційно зупиняти всю вихідну пошту на невизначений термін (якщо вона зупиняється після відключення з'єднувача відправки), або ви можете втратити великий контроль над повідомленням, якщо він просто залишить функцію Send Connector увімкненою, а сценарій більше не працює.

SMTP-проксі

Незважаючи на те, що ви вказали, що ви проти будь-якого обміну повідомленнями за межами Exchange, подумавши про це ще раз, я вирішив, що я використовую @longneck щодо використання певного типу SMTP-проксі-рішення. Навіть IIS SMTP має відкладений механізм доставки, який, здавалося б, Exchange 2010 не має. Ви можете перенаправляти великі повідомлення на сервер IIS SMTP, який може зберігати їх на диску, і, спочатку перевіряючи затримку, змушує сервер IIS SMTP надсилати їх через сценарій, коли затримка низька. Найгірше, якщо ваш механізм планування застряг або зупинився - великі повідомлення застрягнуть на диску, але невеликі повідомлення продовжують надсилатись. Напевно, є кращі рішення, ніж IIS SMTP, і я сам ніколи цього не використовував, але це лише приклад.

Налаштування SMTP електронної пошти в IIS 7


Дякуємо за ваш внесок! Хоча це безпосередньо не вказано, для мене є вимогою, щоб відкладені електронні листи зрештою не дійшли до місця призначення. Це так, коли ви вперше пересилаєте їх до поштової скриньки модератора, чи це залишать знаки - приховані чи видимі? Що стосується ручного процесу їх затвердження, я думаю, це можна якось прописати?
абстракск

Добре запитання, і оскільки я ніколи цього не реалізовував, я створив правило швидкого тестування в нашій організації Exchange і надіслав тестове повідомлення електронною поштою. Модератор отримав повідомлення з опцією "Затвердити" або "Відхилити". Після того як я затвердив повідомлення, воно було відпущене та відправлене до пункту призначення без змін без жодних ознак поштової скриньки модератора ніде в заголовку повідомлення чи в тілі електронної пошти. Я, здається, не можу знайти нічого про сценарій затвердження, тому вам може знадобитися насправді призначити людину для цього завдання.
серпня

Дуже дякую за ідею. Я думаю, що правило можна легко змінити за допомогою сценаріїв, але людська частина втручання є для нас великим недоліком, оскільки у нас немає спеціалізованих ІТ-співробітників. Хтось знає, чи можна схвалювати повідомлення програмно і як?
абстракс

2

Спробуйте ознайомитись з новими можливостями "Повідомлення про процес", запроваджені з Exchange 2010 SP1. Це може бути дуже корисним для вашого випадку використання.

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


1
Я не дуже впевнений, що повідомлення Throttling допоможе в цьому конкретному сценарії. Читаючи статтю, це здається більш орієнтованим на те, щоб запобігти переповненню сервера Transport або Edge тоною повідомлень, тому вона застосовує витрати для надання рівня доставки повідомлень типу QoS. У цьому випадку, хоча один користувач, який надсилає 10 Мб повідомлення, може наситити все посилання WAN, роблячи інші служби недоступними. Мені здається, більш доцільним буде механізм відкладеної доставки.
серпня

1
Вибачте, але, коли я читаю, "Message Throttling" просто сприятиме надсиланню менших повідомлень ( за замовчуванням співвідношення повідомлень від норми до низького становить 20: 1 ), не заважає надсилати більші повідомлення. Чи є у вас більш конкретна пропозиція щодо того, як здійснити мою мету? Спасибі.
абстракск
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.