Arhn - архитектура программирования

Какое количество писем в час отправляется сценарием ASP.NET C # на сервере Windows?

Мы регулярно рассылаем массовые рассылки (без спама, конечно, только информационные бюллетени) нашим клиентам, используя серверы Windows 2003, 2008 и 2008 R2 в Германии и США, и количество писем, которые нам удается отправить за один час, варьируется от 5.000 и 12.000, в зависимости от того, используем ли мы папку подбора, локальный SMTP или коммерческий SMTP-сервер. Мы используем простые простые скрипты со стандартными библиотеками .NET или компонентами MailBee.

Это хорошо? Средний? Плохой? Есть ли очевидные узкие места (т.е. имеет ли смысл писать многопоточные скрипты или скорость ограничивается подключением к почтовому серверу?)?


  • Вы хотите сказать, что на создание 12 000 писем у вас уходит 1 час? Или вы говорите, что все сгенерированные электронные письма физически отправляются вашим SMTP-сервером в течение часа? 25.02.2011
  • Я говорю обо всем процессе, включая физическую отправку. 25.02.2011

Ответы:


1

Есть несколько вещей, которые ограничивают производительность этого процесса за пределами написанного вами кода.

  1. Пропускная способность Интернета на сервере, отправляющем электронные письма.
  2. Куда отправляются эти электронные письма. То есть ваш SMTP-сервер в конечном итоге должен подключиться и взаимодействовать с сервером почтового провайдера получателя электронной почты, чтобы отправить электронное письмо. Некоторые серверы работают медленно, некоторые заняты и просто долго подключаются.

Что касается использования нескольких потоков для ускорения, ну а где же замедление?

Отправка (и получение) электронной почты - это в основном задача, связанная с вводом-выводом. использование потоков для решения этой проблемы может улучшить или не улучшить производительность. Все зависит от того, есть ли где-то узкое место (в коде), ограничены ли вы вычислительной мощностью или пропускной способностью сервера.

Посмотрите это SO сообщение, я ответил, где Я предоставил многопоточное решение, которое могло бы помочь. По сути, он использует метод параллельного программирования под названием "Data Parallel "где рабочая нагрузка по существу разбивается на несколько фрагментов, и каждый фрагмент затем обрабатывается потоком, сохраняя количество фрагментов таким же (или близким) к количеству ядер на машине.

25.02.2011
  • Спасибо за это. На самом деле это не отвечает на вопрос о том, какова хорошая производительность отправки электронной почты, но мне нравится многопоточность, с которой вы связались. 28.02.2011
  • @Olaf, ну ты действительно не ответил на мои вопросы, которые я задавал в комментариях :). Кроме того, SmtpClient как метод Asyn, вы также можете попробовать. В моем блоге есть обширное сообщение о методах HttpWebRequest и Async http://www.matlus.com/httpwebrequest-asynchronous-programming/ должно быть простым в использовании представленных методов для использования SmtpClient в асинхронном режиме. Также обратите внимание, что статья демонстрирует, что использование нескольких потоков для задач ввода-вывода на самом деле не помогает. Ваш пробег может варьироваться в зависимости от того, что вы считаете отправленным. 28.02.2011
  • @Shiv: Еще раз спасибо, я проверю сообщение в блоге. Мое - может быть, наивное - определение отправлено доставлено на следующую машину, MTA, что угодно, то есть покинуло сервер. Возможно, вопрос должен был заключаться в следующем: как измерить производительность массовой рассылки в IIS, а затем определить, какая часть цепочки процессов электронной почты имеет наилучшие шансы на оптимизацию? 28.02.2011
  • @Olaf, хорошо, поэтому вы не можете контролировать, насколько быстро электронные письма отправляются с вашего сервера в целевой почтовый ящик. Конечно, пропускная способность вашего отправляющего сервера играет роль, и это может быть узким местом, потому что серверы могут использовать от 500 Мбит / с до 1 Гбит / с (в зависимости от того, сколько писем отправляется) в течение того времени, когда они отправляются. Но, честно говоря, поскольку другая сторона (почтовый сервер получателя) также должна быть доступна, вы не можете улучшить производительность на всем пути к почтовому серверу другой стороны. 28.02.2011
  • Если электронные письма находятся в очереди вашего smtp-сервера, вы знаете, что ваш процесс C # достаточно быстр. Может быть, пропускная способность сервера - узкое место? Вы можете подтвердить это в следующий раз, когда будете рассылать массовые электронные письма, посмотрев, какая пропускная способность сети используется. Если это 80% пропускной способности вашего интернет-провайдера и / или пропускной способности сетевой карты на вашем компьютере, то вполне вероятно, что пропускная способность является узким местом. Но стандарта на достаточно быструю нет. Если бы ваша компания отправляла массовые рассылки по электронной почте, ваши требования к производительности были бы совсем другими, как и используемое оборудование / пропускная способность. 28.02.2011
  • @Shiv: хороший момент, и да, процесс C #, безусловно, достаточно быстрый - папка загрузки заполняется быстро. Что странно, электронные письма отправляются с виртуального сервера в Германии в два раза быстрее, чем с корневого сервера в Сент-Луисе. Вот почему я в первую очередь задавался вопросом, не хватает ли мне очевидного горлышка бутылки. Однако следующим шагом будет проверка использования полосы пропускания - еще раз спасибо за этот совет (а также спасибо, что нашли время, чтобы обсудить это подробно !!). 02.03.2011
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..