Exchange 2010에서 대용량 전자 메일 예약 / 대기 시간이 지연 될 때까지 연기


14

나의 도전

우리는 다양한 사이트에 Exchange 서버를 가지고 있지만 선박에도 있습니다. 선박은 해상에서는 위성 링크를 통해 네트워크에 연결되어 있지만 항구에서는 WiFi 브리지로 전환됩니다.

대기 시간이 길고 (500 + ms) 드문 드랍 아웃 (예 : 선박이 선회 할 때) 해상에서 몇 메가 바이트 이상의 전자 메일을 보내려고하면 실패 할 때까지 다시 시도 할 수 있습니다. 에 도달했습니다. 결과 : 이메일이 전달되지 않으며 각 시도는 sat 링크에서 귀중한 대역폭을 소비합니다.

한 가지 "솔루션"은 최대 전자 메일 크기를 5MB로 제한하는 것이지만 포트에있는 동안 사용자에게 친숙하지 않으며 불필요한 제한이 있습니다.

거친 생각

내가하고 싶은 것은 해상에서 나중에 배달 할 수 있도록 설정된 한도보다 큰 모든 전자 메일을 대기열에 넣는 동시에 모든 작은 전자 메일을 즉시 보내는 것입니다. 그런 다음 데이터 센터에서 허브 전송 서버를 정기적으로 핑 (ping)한다고 생각했습니다. 대기 시간이 ~ 400ms 미만으로 떨어지면 큰 전자 메일 대기열 처리를 시작합니다. 대기 시간이 400ms를 초과하면 허점을 막고 전자 메일을 다시 대기시킵니다.

이제는 2003 년 이후 Exchange에서 손이 닿지 않았습니다. 그 이후에는 나중에 전자 메일을 나중에 배달하도록 예약 할 수 있으므로 Exchange 2010에서 비슷한 작업을 수행 한 다음 배달을 전환하는 방법을 스크립트로 작성했습니다. '항상'과 '없음'사이의 큰 전자 메일 일정.

장애물

이와 같은 스크립트를 만드는 것은 너무 복잡해서는 안되지만 Exchange 2007에서는 의존했던 기능이 제거되었다는 것을 읽었습니다.

이 기능은 Exchange 2003에있는 기능이지만 Exchange 2007에서는 제거되었습니다. '대형 메시지에 다른 배달 시간 사용'을 사용하여 SMTP 커넥터에 설정되었습니다.

TechCenter : Exchange의 크기에 따라 전자 메일 배달을 예약 할 수 있습니까?

질문

사실인가요? -이 기능이 Exchange 2010에 더 이상 존재하지 않거나 비슷한 기능으로 변형 되었습니까? 목표를 달성하는 데 사용할 수 있습니까? 그렇다면 무엇입니까?

특정 Exchange 서버에서 큰 전자 메일 배달을 연기하는 다른 방법이 있습니까? 일정을 기반으로하거나 특정 조치가 필요할 수도 있습니다. 스크립트를 통해 전달을 트리거 할 방법이있을 것이라고 확신합니다. 배송시 별도의 대기열에 큰 전자 메일이 필요합니다.

이것에 대한 당신의 생각은 높이 평가 될 것입니다! :-)

편집 # 1 : 정제 된 거친 아이디어

나는 두 가지 PowerShell CmdLets를 골랐다.

위의 명령이 어떤 종류의 메시지를 처리하는지 확인하기 위해 Get-Message를 잠시 동안 놀았습니다.

가장 중요한 것은이 명령이 메시지 크기 필터를 허용한다는 것입니다. 이 명령은 현재 서버에서 5MB (5,242,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내 서버 배달 결코 메시지 - 전용 원격 배달 큐에서 메시지를 반환? 그렇지 않은 경우 원격 배달 큐의 ID 이름이 특정 패턴을 따라 필터링에 사용할 수 있습니까?

@longneck이 제안한 사용자 지정 전송 에이전트 또는 이벤트 싱크 (이 개념이 Exchange 2010에 여전히 존재하는 경우)를 통해 수행 할 수 있습니까?

5 분마다 스크립트를 실행한다고하는데, 이는 여전히 큰 메시지가 전송되는 것을 의미하며 일시 중단되기 전에 최대 5 분 동안 문제를 일으킬 수 있습니다. 우리는 지금보다 나아질 것이지만 최적은 아닙니다. 매 분마다 주파수를 높일 수는 있지만 가장 우아한 해결책은 아닙니다.

5 분마다 (트래픽 트래픽을 절약하기 위해) 왕복 시간 만 확인하더라도 마지막으로 기록 된 RTT를 확인하기 위해 원격 메커니즘으로 전송되는 메시지가 제출 될 때마다 어떤 Exchange 메커니즘을 설정해야합니까? 대기열에 넣은 다음 적절한 조치를 취합니까?

편집 # 2 : 제안 된 솔루션

제안 된 솔루션과 내가 볼 수있는 장단점을 요약 해 드리겠습니다.

맞춤형 운송 에이전트

개념

  • 대기 시간을 주기적으로 모니터링하고 높음 또는 낮음으로 분류 (임계 값 : 400ms?)
  • 대기 시간 분류가 변경 될 때 사용자 지정 전송 에이전트를 통해 설정된 임계 값보다 큰 모든 전자 메일을 일시 중지 / 재개
  • 대기 시간이 길면 맞춤 TA를 통해 즉시 제출 된 대용량 메시지를 "일시 중지"모드로 설정하십시오.

강점

  • 대기 시간이 길어지면 큰 전자 메일이 배달되지 않습니다.

약점

  • 사내 개발을위한 개발 기술이 없음
  • Exchange에 연결된 타사 소프트웨어는 패치 또는 업데이트시 문제를 일으킬 수 있습니다.
  • 문제가 발생하는 경우 지원 계약이 필요합니다 (위 참조).

보통 큰 메시지

개념

  • 대기 시간을 주기적으로 모니터링하고 높음 또는 낮음으로 분류 (임계 값 : 400ms?)
  • 대기 시간 분류를 기반으로 모든 메시지를 전달하거나 대용량 메시지를 중재자에게 전달할 수 있도록 스크립팅을 통해 Exchange 전송 규칙을 구성합니다.
  • 선박이 항구에있을 때, 아마도 사람에 의해 중재자 큐에서 메시지 승인

강점

  • 대기 시간이 길어지면 큰 전자 메일이 배달되지 않습니다.
  • 기본 네이티브 Exchange 전송 규칙을 사용하여 메시지가 일시 중단됨

약점

  • 보기에는 대기 시간이 낮을 때 메시지를 프로그래밍 방식으로 승인 할 수 없으므로 선박이 항구에있을 때마다 사람의 개입이 필요합니다
  • 프로그래밍 방식으로 중재가 처리되지 않는 경우 개인 정보 보호 문제

질문

  • 중재자 사서함에서 프로그래밍 방식으로 메시지를 승인 할 수 있습니까 ? 어떻게?

예약 된 PowerShell 명령

개념

  • 대기 시간을 주기적으로 모니터링하고 높음 또는 낮음으로 분류 (임계 값 : 400ms?)
  • 대기 시간이 길면 (매 1 분마다) 큰 메시지를 일시 중지합니다 ( Suspend-Message -Filter {Size -gt 5242880})
  • 대기 시간이 낮은 수준으로 떨어지면 모든 메시지를 다시 시작하십시오 ( Resume-Message).

강점

  • 구현하기 매우 간단

약점

  • 가장 우아한 해결책은 아닙니다
  • Suspend-Message명령 사이의 간격 동안 각각의 새로운 대형 메시지 전달을 시도 할 수 있으며 , 여전히 약간의 대역폭을 낭비하고 혼잡을 일으킬 수 있습니다 (아무 것도하지 않는 것과 비교하여 매우 짧음).

질문

  • Suspend-Message명령 사이에 큰 메시지를 전달하려는 시도를 방지하는 방법에 대한 아이디어가 있습니까?
  • Get-Message내 서버 배달 결코 메시지 - 전용 원격 배달 큐에서 메시지를 반환? 그렇지 않은 경우 원격 배달 큐의 ID 이름이 특정 패턴을 따라 필터링에 사용할 수 있습니까?

편집 # 3 : 앞으로 나아가는 길

팀에 제안 된 솔루션 (편집 # 2에 포함하지 않은 SMTP 프록시 포함)을 가져와 내 직감을 바탕으로 사용자 지정 Exchange 전송 에이전트를 사용하기로 결정했습니다.

저는 몇 개의 컨설팅 회사와 연락을 취하고 있는데,이 컨설팅 회사는 문제를 어떻게 공격하고 비용을 부담하는지에 대해 다시 연락을 드릴 것입니다.

프로그래밍 작업 아웃소싱에 대한 경험이 있으시면 스택 오버플로에 대한 관련 질문에 대한 의견을 남겨 주십시오.


3
내가 늦게 본 더 좋은 질문 중 하나에 +1.
John Gardeniers

선박의 Exchange 서버는 어떤 역할을 수행합니까?
8월

배송 된 Exchange 서버에는 허브 전송, 사서함 및 클라이언트 액세스 역할이 있습니다.
abstrask

1
위성 링크에서 모든 유형의 QoS 또는 WAN 최적화 프로그램을 실행하고 있습니까?
longneck

사서함 역할을 사용하면 외부 메일이 선박의 Exchange 서버에있는 누군가의 사서함으로 전송 될 때 링크가 포화 상태가 될 수 있습니다.
8

답변:


2

요청한 방식으로 문제를 해결하기 위해 Microsoft Exchange Transport Agent SDK를 사용하여 고유 한 전송 에이전트를 작성할 수 있습니다 . 전송 에이전트는 이벤트 기반이므로 메시지를 받으면 Exchange에서 라이브러리의 함수를 호출합니다. 그런 다음 라이브러리는 메시지 보관과 같은 작업을 수행 할 수 있습니다. 사내 기술을 보유하고 있지 않다면 개발자를 고용하여 기술을 쓸 수있을 것입니다.

그러나 이것이 훌륭한 해결책이라고 생각하지 않습니다. 조사 할 대안으로 저품질 링크를 위해 SMTP 프록시와 같은 것을 살펴볼 수 있습니다. 아시다시피 SMTP 연결은 연결이 끊어지면 메시지 전송이 중단 된 위치에서 다시 시작하지 않고 처음부터 다시 시작되므로 품질이 낮은 링크에는 끔찍한 프로토콜입니다. 무언가를 위해 개발자를 고용하려는 경우 들어오는 SMTP 연결을 수락하고 위성 연결의 다른 쪽 끝에서 동일한 동일한 프로그램의 원격 인스턴스로 메시지를 보내는 서버 프로그램을 작성하는 것이 좋습니다. TCP 가속기를 통해 작은 메시지에서 큰 메시지를 분리하여 WAN 가속기에서 QoS를 처리 할 수 ​​있습니다. 그러면 원격 인스턴스는 완전한 메시지를 수신하면


입력 해 주셔서 감사합니다! 내가 기대했던 것보다 훨씬 덜 기본적이라고 말해야합니다. 나는 KISS 원칙을 좋아합니다. 전송 에이전트 작성에 대해 잘 모르지만 Exchange 내에서 처리를 유지하는 것이 다소 어려워집니다. Exchange 2010에서는 요청에 따라 큐가 만들어지고 파괴 된 것 같습니다. 에이전트가 큰 메일을 별도의 큐로 강제하고 스크립트가 '일시 중지'와 '재개'사이를 전환 할 수 있습니다. Exchange 2010에서 TA로 할 수있는 일이라고 생각하십니까?
abstrask

SMTP 프록시 / 스마트 호스트 제안에 관해서는 상용 솔루션을 찾을 수 있다면 적극적으로 유지 관리하는 것이 좋습니다. Exchange 내에서 흐름을 수정하는 Exchange 전송 에이전트보다 더 복잡한 프로그래밍 작업 인 것 같습니다 (잘못된 것일 수 있습니까?). SMTP 프록시가 필요하다고 생각하는 것처럼 복잡한 맞춤형 솔루션은 장기적으로 지원하는 데 비용이 많이 드는 경향이 있습니다.
abstrask

다시 : 별도의 큐, 나는 큐가 그런 식으로 작동하는지 또는 그것이 최선의 방법인지 알기 위해 Exchange 내부에 익숙하지 않습니다. 나는 Litera Metadact-e에 대한 나의 경험을 바탕으로 처리를 위해 TA가 개별 메시지를 보유 할 수 있다는 것을 알고 있습니다. 나는 그들을 무기한으로 보유 할 수 있는지 모르겠습니다.
longneck

내 대답의 전반적인 요점은 기본 솔루션이 없으므로 개발자에게 문의해야한다는 것입니다. 그러나 이것은 매우 간단한 문제이며 개발자를 고용 하여이 문제를 해결하는 것은 비용이 많이 들지 않습니다.
longneck

Suspend-Message PowerShell CmdLet의 존재는 메시지의 전달 상태도 프로그래밍 방식으로 수정할 수 있음을 확신했습니다. Exchange에서 모든 메시지 추적, 관리 권한 위임 등을 계속 유지할 수 있기 때문에 별도의 SMTP 프록시를 통해 메시지의 배달 상태를 수정하는 사용자 지정 전송 에이전트의 아이디어가 마음에 듭니다. 입력 해 주셔서 감사합니다!
abstrask

3

메시지 검토

바람직하지 않은 해결책 중 하나는 전송 규칙을 사용하여 특정 크기의 메시지를 발신자 관리자 나 지정된 사서함 (선박의 Exchange 서버)으로 전달하여 전달하는 것입니다. 이렇게하면 해상에서 큰 메일을 다른 사서함에 대기시킬 수 있습니다. 선박이 항구에 도착하면 관리자 또는 지정된 중재자가 배송을 승인 할 수 있습니다.

단점은 다음과 같습니다.

  • 이 규칙은 수동으로 비활성화하지 않는 한 (항상 스크립트를 통해 수행 할 수있는 경우가 아니면) 항상 켜져 있으므로 포트가 큰 메시지 일지라도 중재자 사서함으로 리디렉션됩니다.
  • 모든 큰 메시지는 보내기 전에 누군가의 수동 검토가 필요하지만 규칙에 예외 사항을 추가 할 수 있습니다.
  • 다른 사람이 발신 메일을 읽을 경우 개인 정보 보호 문제로 인해 이상적이지 않을 수 있지만 이는 조직에 따라 다릅니다.

한 가지 단점은 사용자가 아무 이유없이 연결을 끊을 수있는 작업과 관련이없는 쓰레기를 보내려고하는 것처럼 메시지를 보낼지 여부를 인간이 결정해야한다는 것입니다. 정책을 가리키고 손목에 두드려서 다시는하지 않는 것과 같은 관리 제어로 수정 될 수 있습니다.

Exchange 2010 전송 규칙

맞춤 스크립트

RE : 큰 전자 메일을 관리하는 사용자 지정 스크립트입니다. Exchange 서버에서 송신 커넥터를 활성화 / 비활성화하는 아래와 같은 것을 볼 수 있습니다. 단점은 모든 메일이 큰 메시지 대신 대기열에 보관되지만 이러한 행을 따르는 일부 논리는 작동해야한다는 것입니다.

  1. 대기 시간을 확인하십시오. 낮 으면 송신 커넥터를 사용하도록 설정하고 큰 메시지를 일시 중단 해제 한 후 5 분 (또는 임의의 다른 시간) 동안 기다리십시오. 높으면 송신 커넥터를 비활성화하십시오.
  2. 5 분 동안 기다립니다.
  3. 5 분 후 큰 메시지를 확인하고 일시 중단하십시오. 대기열이 비워 질 때까지 대기열에있는 작은 메시지가 해제되도록 송신 커넥터를 다시 활성화하십시오. 송신 커넥터를 다시 활성화 한 후 대기열 / WAN 링크를 방해하지 않도록 한 번에 하나의 메시지를 순환 할 수도 있습니다.
  4. 송신 커넥터를 비활성화하고 # 1로 이동

이 논리는 100 % 이해하기 위해 완전히 다듬어지지는 않았지만 모든 메일 대기열, 대기 시간 확인, 대용량 메시지가 높은 경우 일시 중지, 메일 대기열 해제, 모든 메일 대기열 등의 아이디어를 얻습니다. 이와 같은 스크립트는 충돌이나 중지가 발생하면 선박에 IT 직원이없는 상태에서 다시 초기화하는 방법을 알고 있습니까? 송신 커넥터를 사용하지 않도록 설정 한 후 중지 된 경우 모든 아웃 바운드 메일을 무기한으로 중지하거나 송신 커넥터를 사용하도록 설정 한 상태에서 스크립트가 더 이상 실행되지 않으면 큰 메시지 제어를 잃을 수 있습니다.

SMTP 프록시

Exchange 외부에서 메시지 처리를하지 않겠다고 말했지만, 이것에 대해 좀 더 생각한 후에는 어떤 유형의 SMTP 프록시 솔루션 사용에 @longneck을 사용하기로 결정했습니다. IIS SMTP조차도 Exchange 2010에서는 보이지 않는 지연된 배달 메커니즘을 가지고 있습니다. 대용량 메시지를 IIS SMTP 서버로 리디렉션하여 디스크에 저장할 수 있으며 대기 시간이 가장 낮은 지 여부를 먼저 확인하여 IIS SMTP 서버가 스크립트를 통해 메시지를 보내도록 할 수 있습니다. 예약 메커니즘이 중단되거나 중지 된 경우 최악의 경우 큰 메시지가 디스크에 멈춰 있지만 작은 메시지는 계속 전송됩니다. IIS SMTP보다 더 나은 솔루션이있을 수 있으며 직접 사용해 본 적이 없지만 단지 예일뿐입니다.

IIS 7에서 SMTP 전자 메일 구성


입력 해 주셔서 감사합니다! 직접 지정하지는 않지만 지연된 전자 메일은 최종적으로 목적지에 도달하지 않아도됩니다. 이 경우, 중재자 사서함으로 처음 전달할 때 표시가 숨겨 지거나 표시됩니까? 수동 승인 프로세스에 관해서는 어떻게 든 스크립트를 작성할 수 있다고 생각합니까?
abstrask

좋은 질문이며, 이것을 구현 한 적이 없으므로 Exchange 조직에서 빠른 테스트 규칙을 만들고 테스트 전자 메일을 보냈습니다. 중재자가 '승인'또는 '거부'옵션으로 메시지를 받았습니다. 메시지를 승인 한 후에는 메시지 헤더 또는 전자 메일 본문의 어느 위치에도 중재자 사서함의 표시없이 메시지가 해제되어 대상으로 전송되었습니다. 그러나 승인 프로세스를 스크립팅 할 때 아무것도 찾을 수 없으므로 실제로이 작업을 위해 사람을 지정해야 할 수도 있습니다.
8 월

아이디어 주셔서 대단히 감사합니다. 스크립팅을 통해 규칙을 쉽게 수정할 수 있다고 생각하지만 전담 IT 직원이 없기 때문에 사람의 개입 부분은 우리에게 큰 단점입니다. 프로그래밍 방식으로 메시지를 승인 할 수 있는지 여부와 방법을 아는 사람이 있습니까?
abstrask

2

Exchange 2010 SP1에 도입 된 "메시지 제한"의 새로운 기능을 살펴보십시오. 사용 사례에 매우 도움이 될 수 있습니다.

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


1
이 특정 시나리오에서 Message Throttling이 도움이 될지 잘 모르겠습니다. 이 기사를 읽으면 전송 또는 에지 서버가 수많은 메시지로 인해 압도되는 것을 방지하는 데 더 적합 해 보이므로 QoS 유형의 메시지 전달 수준을 제공하기 위해 비용이 부과됩니다. 이 경우 10MB 메시지를 보내는 단일 사용자가 전체 WAN 링크를 포화시켜 다른 서비스를 사용할 수 없게 할 수 있습니다. 지연 전달 메커니즘이 더 적절하다고 생각합니다.
8월

1
죄송합니다,하지만 난 그것을 읽을 때, "메시지 제한은"단지 것이다 선호 작은 메시지를 보내는 ( 기본적으로 정상에 낮은 메시지의 비율이 20 : 1 ),하지 방지 큰 메시지를 보낼. 내 목표를 달성하는 방법에 대한 더 구체적인 제안이 있습니까? 감사.
abstrask
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.