Lên lịch / xếp hàng e-mail lớn trong Exchange 2010, trì hoãn cho đến khi độ trễ giảm


14

Thử thách của tôi

Chúng tôi có máy chủ Exchange tại các trang web khác nhau, nhưng cũng có trên tàu. Các tàu được kết nối với mạng của chúng tôi thông qua các liên kết vệ tinh khi ở trên biển, nhưng chuyển sang cầu WiFi khi ở cảng.

Do độ trễ cao (500+ ms) và thả ra không phổ biến (ví dụ: khi tàu đang quay đầu), cố gắng gửi bất kỳ e-mail nào trên một vài megabyte khi ở trên biển, có khả năng bị lỗi và được thử lại cho đến giới hạn đã đạt được. Kết quả: Email không được gửi và mỗi lần thử sẽ tiêu tốn băng thông có giá trị trên liên kết sat.

Một "giải pháp" là giới hạn kích thước e-mail tối đa là 5 MB, nhưng điều đó hầu như không thân thiện với người dùng và hạn chế không cần thiết khi ở trong cổng.

Ý tưởng thô

Điều tôi muốn làm là xếp hàng tất cả các e-mail lớn hơn giới hạn đã đặt để gửi sau này khi ở trên biển, trong khi gửi tất cả các e-mail nhỏ ngay lập tức. Sau đó tôi đã nghĩ rằng tôi sẽ ping máy chủ vận chuyển trung tâm trong trung tâm dữ liệu của chúng tôi thường xuyên, khi độ trễ giảm xuống dưới 400 ms, tôi sẽ bắt đầu xử lý hàng đợi email lớn. Khi độ trễ tăng hơn 400 ms, tôi sẽ cắm lỗ và để e-mail xếp hàng lại.

Bây giờ, tôi đã không thực sự bẩn với Exchange kể từ phiên bản 2003. Trước đó, bạn có thể lên lịch các e-mail lớn để gửi sau, vì vậy ý ​​tưởng của tôi là làm một cái gì đó tương tự trong Exchange 2010, sau đó viết kịch bản một cách để chuyển giao lên lịch cho các e-mail lớn giữa 'luôn luôn' và 'không bao giờ'.

Trở ngại

Không nên quá phức tạp để tạo một tập lệnh như vậy, nhưng sau đó tôi đọc rằng tính năng mà tôi dựa vào đã bị xóa với Exchange 2007:

Đây là một tính năng có trong Exchange 2003 nhưng đã bị xóa trong Exchange 2007. Nó được đặt trên Trình kết nối SMTP với 'sử dụng thời gian gửi khác nhau cho các tin nhắn quá khổ'.

TechCenter: Có thể lên lịch gửi email dựa trên kích thước trong Exchange không?

Câu hỏi

Có đúng không - Tính năng này không còn xuất hiện trong Exchange 2010 hay chỉ đơn thuần là nó được chuyển đổi thành thứ tương tự, tôi có thể sử dụng để thực hiện mục tiêu của mình không? Nếu vậy thì sao?

Có cách nào khác để trì hoãn việc gửi e-mail lớn trên các máy chủ Exchange nhất định không? Nó có thể dựa trên lịch trình hoặc thậm chí có thể yêu cầu hành động cụ thể - Tôi khá chắc chắn sẽ có một số cách để kích hoạt phân phối thông qua tập lệnh, tôi chỉ cần e-mail lớn trong một hàng đợi riêng trên tàu.

Suy nghĩ của bạn về điều này sẽ được đánh giá cao! :-)

Chỉnh sửa # 1: Ý tưởng thô tinh tế

Tôi tình cờ thấy hai CmdLets PowerShell mà tôi nghĩ có thể mang lại cho tôi khá gần với mục tiêu của mình:

Tôi đã chơi đùa với Get-Message một lúc, để xem những loại tin nhắn mà các lệnh trên sẽ xử lý.

Quan trọng nhất, các lệnh này chấp nhận một bộ lọc kích thước tin nhắn. Lệnh này sẽ liệt kê các tin nhắn được xếp hàng, trên máy chủ hiện tại, lớn hơn 5 MB (5.242.880 byte):

get-message -Filter {Size -gt 5242880}

Dường như Get-Messagechỉ trả về tin nhắn từ các hàng đợi giao hàng từ xa khác nhau. Tuy nhiên, các tin nhắn chảy trong máy chủ, tuy nhiên, có hiển thị trong một hàng đợi mà Nhận / Tạm dừng / Tiếp tục-Tin nhắn sẽ gây rối không?

Nếu không, giải pháp có thể đơn giản như một tập lệnh được lên lịch cứ sau vài phút, dọc theo dòng (trong mã giả):

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

Mối quan tâm / câu hỏi tiếp theo:

Chủ yếu là không liên quan bây giờ - xem chỉnh sửa # 2.

Sẽ Get-Messagechỉ trả lại tin nhắn từ hàng đợi giao hàng từ xa - không bao giờ tin nhắn cho phân phối nội bộ máy chủ? Nếu không, tên nhận dạng của hàng đợi phân phối từ xa có tuân theo một mẫu nhất định mà tôi có thể sử dụng để lọc không?

Điều này có thể / nên được thực hiện thông qua Đại lý vận tải tùy chỉnh (như được đề xuất bởi @longneck) hoặc Sự kiện chìm (nếu khái niệm này vẫn tồn tại trong Exchange 2010)?

Giả sử tôi chạy tập lệnh cứ sau 5 phút, điều đó vẫn có nghĩa là các tin nhắn lớn được gửi, có khả năng gây ra sự cố trong tối đa 5 phút, trước khi bị treo. Chúng tôi vẫn tốt hơn so với hiện tại, nhưng nó không tối ưu. Tôi có thể tăng tần suất lên mỗi phút, nhưng nó sẽ không phải là giải pháp tao nhã nhất.

Ngay cả khi tôi chỉ kiểm tra thời gian khứ hồi cứ sau 5 phút (để lưu lượng truy cập sat), tôi cần cài đặt cơ chế Exchange nào, để kiểm tra RTT được ghi lại gần đây, mỗi lần gửi tin nhắn đi đến gửi từ xa xếp hàng, và sau đó có hành động khủng bố?

Chỉnh sửa # 2: Giải pháp đề xuất

Cho phép tôi tóm tắt các giải pháp được đề xuất, ưu và nhược điểm của chúng khi tôi thấy:

Đại lý vận tải tùy chỉnh

Ý tưởng

  • Định kỳ theo dõi độ trễ, phân loại là cao hay thấp (ngưỡng: 400 ms?)
  • Thông qua Đại lý vận tải tùy chỉnh, tạm dừng / tiếp tục tất cả các email lớn hơn ngưỡng đã đặt, khi phân loại độ trễ thay đổi
  • Thông qua TA tùy chỉnh, ngay lập tức đặt các tin nhắn lớn sau đó được gửi ở chế độ "tạm dừng", nếu độ trễ cao

Điểm mạnh

  • Email lớn không bao giờ được gửi đi khi độ trễ cao

Những điểm yếu

  • Không có kỹ năng phát triển để thực hiện điều này trong nhà (lưu ý đến bản thân: mã nguồn nên thuộc về công ty của tôi như một phần của hợp đồng với nhà phát triển bên ngoài)
  • Phần mềm bên thứ 3 liên kết với Exchange có thể gây ra sự cố khi vá hoặc cập nhật
  • Một số loại thỏa thuận hỗ trợ cần thiết, trong trường hợp có sự cố xảy ra (xem bên trên)

Tin nhắn lớn vừa phải

Ý tưởng

  • Định kỳ theo dõi độ trễ, phân loại là cao hay thấp (ngưỡng: 400 ms?)
  • Dựa trên phân loại độ trễ, định cấu hình Quy tắc vận chuyển trao đổi thông qua tập lệnh, để cho phép tất cả các thông báo truyền hoặc chuyển tiếp thư lớn đến người điều hành
  • Phê duyệt tin nhắn trong hàng đợi của người điều hành khi tàu cập cảng, có thể là do con người

Điểm mạnh

  • Email lớn không bao giờ được gửi đi khi độ trễ cao
  • Tin nhắn bị treo bằng cách sử dụng Quy tắc giao thông gốc

Những điểm yếu

  • Nhìn bề ngoài, tin nhắn không thể được phê duyệt theo chương trình khi độ trễ thấp, do đó cần có sự can thiệp của con người mỗi khi tàu cập cảng
  • Có thể các vấn đề riêng tư, nếu kiểm duyệt không được xử lý theo chương trình

Câu hỏi

  • Có thể thông điệp được phê duyệt theo chương trình từ hộp thư người điều hành? Làm sao?

Các lệnh PowerShell được lên lịch

Ý tưởng

  • Định kỳ theo dõi độ trễ, phân loại là cao hay thấp (ngưỡng: 400 ms?)
  • Miễn là độ trễ cao, thường xuyên (mỗi phút?) Đình chỉ bất kỳ tin nhắn lớn nào ( Suspend-Message -Filter {Size -gt 5242880})
  • Khi độ trễ giảm xuống mức thấp, hãy tiếp tục tất cả các tin nhắn ( Resume-Message)

Điểm mạnh

  • Rất đơn giản để thực hiện

Những điểm yếu

  • Không phải là giải pháp thanh lịch nhất
  • Việc gửi từng tin nhắn lớn mới có thể được cố gắng miễn là khoảng thời gian giữa Suspend-Messagecác lệnh, có thể vẫn lãng phí một số băng thông và tạo ra các tắc nghẽn (mặc dù rất ngắn so với không làm gì cả)

Câu hỏi

  • Bất kỳ ý tưởng nào về cách ngăn chặn các nỗ lực gửi tin nhắn lớn, Suspend-Messagecác lệnh ở giữa ?
  • Sẽ Get-Messagechỉ trả lại tin nhắn từ hàng đợi giao hàng từ xa - không bao giờ tin nhắn cho phân phối nội bộ máy chủ? Nếu không, tên nhận dạng của hàng đợi phân phối từ xa có tuân theo một mẫu nhất định mà tôi có thể sử dụng để lọc không?

Chỉnh sửa # 3: Con đường phía trước

Sau khi đưa các giải pháp được đề xuất lên trong nhóm của tôi (bao gồm cả proxy proxy mà tôi không thể đưa vào chỉnh sửa # 2) và dựa trên cảm giác ruột của mình, chúng tôi đã quyết định chọn một Đại lý vận tải trao đổi tùy chỉnh.

Tôi đang liên lạc với một vài công ty tư vấn, họ sẽ liên hệ lại với tôi về cách thức tấn công vấn đề và chi phí sẽ là bao nhiêu.

Nếu bạn có bất kỳ kinh nghiệm nào về việc thuê ngoài các nhiệm vụ lập trình, vui lòng để lại phản hồi cho câu hỏi liên quan của tôi về Stack Overflow , vì tôi không biết.


3
+1 cho một trong những câu hỏi hay hơn mà tôi đã thấy muộn.
John Gardeniers

Các máy chủ Exchange trên tàu giữ vai trò gì?
tháng 8

Các máy chủ Exchange trên tàu giữ vai trò Hub Transport, Mailbox và Client Access.
tóm tắt

1
Bạn có đang chạy bất kỳ loại trình tối ưu hóa QoS hoặc WAN nào trên các liên kết vệ tinh không?
longneck

Hmm với vai trò Hộp thư, bạn cũng có thể có liên kết bị bão hòa khi thư bên ngoài được gửi đến hộp thư của ai đó trên máy chủ Exchange của tàu ...
tháng 8

Câu trả lời:


2

Để giải quyết vấn đề theo cách bạn đã yêu cầu, bạn có thể viết Đại lý vận tải của riêng mình bằng SDK Microsoft Exchange Transport Agent . Đại lý vận tải dựa trên sự kiện để Exchange sẽ gọi một chức năng trong thư viện của bạn khi nhận được tin nhắn. Thư viện của bạn sau đó có thể làm một cái gì đó như giữ tin nhắn. Nếu bạn không có các kỹ năng trong nhà để làm điều này, tôi chắc chắn rằng bạn có thể thuê một nhà phát triển để viết nó cho bạn.

Nhưng tôi không nghĩ rằng đây là một giải pháp tuyệt vời. Để thay thế cho bạn để điều tra, bạn có thể muốn xem xét một cái gì đó giống như proxy SMTP cho các liên kết chất lượng thấp. Như bạn đã phát hiện ra, SMTP là một giao thức khủng khiếp cho các liên kết chất lượng thấp vì kết nối bị gián đoạn khiến việc truyền thông điệp khởi động lại từ đầu thay vì nối lại từ nơi nó bị tắt. Nếu bạn định thuê một nhà phát triển cho một cái gì đó, tôi sẽ xem xét việc viết một chương trình máy chủ chấp nhận các kết nối SMTP đến và gửi tin nhắn đến một phiên bản từ xa của cùng một chương trình này ở đầu kia của kết nối vệ tinh theo cách có thể nối lại được ( có thể tách biệt các tin nhắn lớn từ các tin nhắn nhỏ thông qua cổng TCP để cho phép xử lý QoS bằng bộ tăng tốc mạng WAN của bạn). Ví dụ từ xa có thể sau đó, khi nhận được thông báo đầy đủ,


Cảm ơn vì đầu vào của bạn! Tôi phải nói rằng nó ít hơn nhiều so với những gì tôi mong đợi. Tôi là một fan hâm mộ lớn của nguyên tắc KISS. Mặc dù tôi không biết nhiều về việc viết các đại lý vận tải, nhưng điều đó phần nào hấp dẫn tôi, để giữ việc xử lý trong Exchange. Trong Exchange 2010, dường như hàng đợi được tạo và hủy theo yêu cầu. Có lẽ tác nhân có thể buộc các thư lớn vào một hàng đợi riêng và một tập lệnh có thể chuyển đổi giữa 'đình chỉ' và 'tiếp tục'. Có ý tưởng nào là thứ bạn có thể làm với TA trong Exchange 2010 không?
tóm tắt

Đối với đề xuất proxy / smarthost của SMTP, nó cũng có vẻ là một giải pháp OK, nếu tôi có thể tìm thấy một giải pháp sẵn có, tốt nhất là được duy trì tích cực. Nó dường như là một nhiệm vụ lập trình phức tạp lớn hơn so với một tác nhân vận chuyển Exchange, điều chỉnh luồng trong Exchange (tôi có thể sai không?). Đó là kinh nghiệm của tôi rằng các giải pháp phức tạp, được thực hiện tùy chỉnh, như tôi tưởng tượng một proxy SMTP sẽ có xu hướng tốn kém để hỗ trợ về lâu dài.
tóm tắt

re: tách hàng đợi, tôi không đủ quen thuộc với các bên trong Exchange để biết liệu hàng đợi có hoạt động như vậy không, hoặc nếu đó là cách tốt nhất. tôi biết rằng các tin nhắn cá nhân có thể được giữ bởi một TA để xử lý dựa trên kinh nghiệm của tôi với Litera Metadact-e, chính xác là: giữ một tin nhắn cho đến khi xử lý xong (có thể mất nhiều phút). tôi không biết nếu có thể giữ chúng vô thời hạn.
longneck

Quan điểm chung của tôi về câu trả lời của tôi là có lẽ bạn nên tham khảo ý kiến ​​của một nhà phát triển vì không có giải pháp vượt trội nào cho bạn. tuy nhiên, đây là một vấn đề khá đơn giản và việc thuê một nhà phát triển để giải quyết vấn đề này cho bạn có lẽ không phải là chi phí cấm.
longneck

Sự tồn tại của PowerShell CmdLet đình chỉ tin nhắn đã bị thuyết phục rằng trạng thái gửi tin nhắn cũng có thể được sửa đổi theo chương trình. Tôi thích ý tưởng về một đại lý vận chuyển tùy chỉnh, chỉ sửa đổi trạng thái gửi tin nhắn, qua một proxy SMTP riêng, vì chúng tôi vẫn có thể giữ tất cả theo dõi tin nhắn, ủy quyền của quản trị viên, v.v. trong Exchange. Cảm ơn vì đầu vào của bạn!
tóm tắt

3

Kiểm duyệt tin nhắn

Một giải pháp có thể không lý tưởng là sử dụng quy tắc truyền tải để chuyển tiếp thư qua một kích thước nhất định tới người quản lý người gửi hoặc hộp thư được chỉ định (trên máy chủ Exchange của tàu) để kiểm duyệt. Bằng cách này nếu chúng ở trên biển, các tin nhắn lớn có thể được xếp hàng trong hộp thư khác. Khi tàu đến cảng, người quản lý hoặc người điều hành được chỉ định có thể phê duyệt chúng để giao hàng.

Nhược điểm là:

  • quy tắc này luôn được bật trừ khi bạn vô hiệu hóa thủ công (nhưng có thể được thực hiện thông qua tập lệnh), do đó, ngay cả trong cổng, các thư lớn sẽ chuyển hướng đến hộp thư của người điều hành
  • tất cả các tin nhắn lớn sẽ cần được xem xét thủ công bởi ai đó trước khi gửi, nhưng bạn có thể thêm ngoại lệ vào quy tắc cho những điều cụ thể
  • một người khác sẽ đọc thư gửi đi, điều này có thể không lý tưởng do những lo ngại về quyền riêng tư, nhưng điều này phụ thuộc vào tổ chức của bạn

Một ưu điểm là bạn sẽ có một quyết định của con người về việc có nên gửi tin nhắn hay không, chẳng hạn như nếu người dùng đang cố gửi một đống tin tào lao không liên quan đến công việc mà sẽ không làm hỏng kết nối mà không có lý do. Chúng có thể được sửa chữa bằng các kiểm soát hành chính như chỉ vào một chính sách và tát chúng vào cổ tay để chúng không làm lại.

Quy tắc giao thông 2010

Tập lệnh tùy chỉnh

RE: Một tập lệnh tùy chỉnh để quản lý các e-mail lớn. Tôi có thể thấy một cái gì đó giống như bên dưới sẽ kích hoạt / vô hiệu hóa Trình kết nối Gửi của bạn trên máy chủ Exchange. Một nhược điểm là tất cả các thư được giữ trong hàng đợi thay vì chỉ các thư lớn, nhưng một số logic dọc theo các dòng này sẽ hoạt động:

  1. Kiểm tra độ trễ. Nếu nó ở mức thấp, hãy bật Trình kết nối gửi, bỏ qua bất kỳ tin nhắn lớn nào và đợi 5 phút (hoặc khoảng thời gian tùy ý khác). Nếu nó ở mức cao, hãy tắt Trình kết nối Gửi.
  2. Đợi 5 phút.
  3. Sau 5 phút, kiểm tra các tin nhắn lớn và tạm ngưng chúng. Kích hoạt lại Trình kết nối gửi rất nhỏ, các tin nhắn xếp hàng được giải phóng cho đến khi hàng đợi trống (bạn thậm chí có thể quay vòng qua 1 tin nhắn một lần để không làm tắc liên kết hàng đợi / WAN sau khi bật lại trình kết nối Gửi)
  4. Vô hiệu hóa Trình kết nối gửi và goto # 1

Logic này không được đánh bóng hoàn toàn để có ý nghĩa 100%, nhưng bạn có ý tưởng - xếp hàng tất cả thư, kiểm tra độ trễ, tạm dừng thư lớn nếu nó cao, thư không xếp hàng, xếp hàng tất cả thư, v.v ... Một nhược điểm khác của việc chạy một kịch bản như thế này là nếu nó gặp sự cố hoặc dừng lại, làm thế nào bạn biết để xác định lại nó mà không có nhân viên CNTT trên tàu? Nó có khả năng có thể dừng tất cả các thư gửi đi vô thời hạn (nếu nó dừng sau khi vô hiệu hóa Trình kết nối gửi) hoặc bạn có thể mất kiểm soát thư lớn nếu nó chỉ bật Trình kết nối gửi và tập lệnh không còn chạy.

Proxy Proxy

Mặc dù bạn đã cho biết bạn chống lại bất kỳ xử lý thư nào ngoài Exchange, Sau khi suy nghĩ thêm về vấn đề này, tôi đã quyết định tôi với @longneck về việc sử dụng một số loại giải pháp proxy SMTP. Ngay cả IIS SMTP cũng có cơ chế phân phối hoãn lại mà dường như Exchange 2010 không có. Bạn có thể chuyển hướng thư lớn đến máy chủ IIS SMTP có thể lưu trữ chúng trên đĩa và trước tiên, kiểm tra độ trễ, để máy chủ IIS SMTP gửi chúng qua tập lệnh khi độ trễ thấp. Trường hợp xấu nhất nếu cơ chế lập lịch biểu của bạn bị kẹt hoặc dừng sẽ là các tin nhắn lớn bị kẹt trên đĩa, nhưng các tin nhắn nhỏ tiếp tục được gửi. Có lẽ có nhiều giải pháp tốt hơn IIS SMTP và tôi chưa bao giờ sử dụng nó, nhưng nó chỉ là một ví dụ.

Cấu hình E-Mail SMTP trong IIS 7


Cảm ơn vì đầu vào của bạn! Mặc dù không được chỉ định trực tiếp, nhưng đối với tôi, các thư điện tử bị trì hoãn cuối cùng đã đến đích không bị thay đổi. Đó có phải là trường hợp, khi lần đầu tiên chuyển tiếp chúng đến hộp thư của người điều hành, hoặc nó sẽ để lại dấu hiệu - ẩn hoặc hiển thị? Đối với quy trình thủ công phê duyệt chúng, tôi sẽ nghĩ rằng điều này có thể được viết kịch bản bằng cách nào đó?
tóm tắt

Câu hỏi hay và vì tôi chưa bao giờ thực hiện điều này, tôi đã tạo một quy tắc kiểm tra nhanh trong Exchange org của chúng tôi và gửi e-mail kiểm tra. Người điều hành đã nhận được tin nhắn với tùy chọn 'Phê duyệt' hoặc 'Từ chối'. Khi tôi phê duyệt thư, nó sẽ được phát hành và gửi đến đích mà không bị thay đổi mà không có dấu hiệu của hộp thư của người điều hành ở bất cứ đâu trong tiêu đề thư hoặc nội dung e-mail. Tôi dường như không thể tìm thấy bất cứ điều gì về kịch bản quá trình phê duyệt, tuy nhiên, vì vậy bạn có thể cần phải thực sự chỉ định một con người cho nhiệm vụ này.
tháng 8

Cảm ơn bạn rất nhiều vì ý tưởng. Tôi nghĩ rằng quy tắc có thể dễ dàng được sửa đổi thông qua kịch bản, nhưng phần can thiệp của con người là một nhược điểm lớn đối với chúng tôi, vì chúng tôi không có nhân viên CNTT chuyên dụng trên tàu. Có ai biết nếu tin nhắn có thể được phê duyệt theo chương trình và làm thế nào?
tóm tắt

2

Hãy thử xem các tính năng mới của "Điều chỉnh thông điệp" được giới thiệu với Exchange 2010 SP1. Nó có thể rất hữu ích cho trường hợp sử dụng của bạn.

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


1
Tôi không chắc chắn Tin nhắn điều chỉnh sẽ giúp trong kịch bản cụ thể này. Đọc qua bài viết, có vẻ như hướng tới việc ngăn chặn máy chủ Transport hoặc Edge bị quá tải với hàng tấn tin nhắn, do đó, nó áp dụng chi phí để đưa ra mức độ gửi tin nhắn kiểu QoS. Trong trường hợp này, mặc dù một người dùng gửi tin nhắn 10 MB có thể bão hòa toàn bộ liên kết WAN, khiến các dịch vụ khác không khả dụng. Tôi nghĩ rằng một cơ chế giao hàng trả chậm sẽ phù hợp hơn.
tháng 8

1
Xin lỗi, nhưng khi tôi đọc nó, "Điều chỉnh thông điệp" sẽ chỉ ưu tiên gửi các tin nhắn nhỏ hơn ( Theo mặc định, tỷ lệ tin nhắn bình thường đến thấp là 20: 1 ), không ngăn gửi tin nhắn lớn hơn. Bạn có một đề nghị cụ thể hơn, về cách thực hiện mục tiêu của tôi? Cảm ơn.
tóm tắt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.