나의 도전
우리는 다양한 사이트에 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 전송 에이전트를 사용하기로 결정했습니다.
저는 몇 개의 컨설팅 회사와 연락을 취하고 있는데,이 컨설팅 회사는 문제를 어떻게 공격하고 비용을 부담하는지에 대해 다시 연락을 드릴 것입니다.
프로그래밍 작업 아웃소싱에 대한 경험이 있으시면 스택 오버플로에 대한 관련 질문에 대한 의견을 남겨 주십시오.