2015-05-09 3 views
4

У нас есть сайт, на котором компании должны загружать файлы zip, а после загрузки файла приложение проверяет некоторые вещи в базе данных и затем вставляет некоторые вставки.Asp. Net: Тестирование параллелизма

Проблема заключается в том, что, учитывая высокий уровень параллелизма, веб-сайт работает очень плохо, и, поговорив с командой по инфраструктуре, мы решили перепроектировать и переработать веб-приложение asp .net.

Итак, мы разрабатываем приложение и избегаем проблемы параллелизма, которые у нас были, я хотел бы знать, как я могу проверить параллелизм (рассказывать много людей о загрузке файлов на веб-сайт, это не вариант) и монитор ...

Это первый раз, когда я делаю что-то вроде этого, так что, я по достоинству оценю идеи, статьи и т.д.

ответ

2

короткий простой и прямой ответ Jmeter или, например, NeoLoad. Вы также можете рассмотреть Visual Studio web tests в качестве опции, если у вас есть версия Ultimate.

Однако я лично только начинал с кодирования этого в C# и параллельного выполнения. Не знаю фона, но так как есть [C#] тег вопрос ...

private volatile int threads; 

    [TestMethod] 
    private void Main() 
    { 
     const int threadCount = 10; 
     for (int i = 0; i < threadCount; i++) 
     { 
      ++threads; 
      new Thread(LoadFile).Start(); 
     } 
     while (threads > 0) 
     { 
      Thread.Sleep(10); 
     } 
    } 

    private void LoadFile() 
    { 
     var watch = Stopwatch.StartNew(); 
     //todo: do POST call 
     Console.WriteLine(watch.ElapsedMilliseconds); 
     --threads; 
    } 

Возьмите это как отправной точкой, это, безусловно, не то, что закончил/готов к производству. Регистрация, накопление времени, количество потоков, замена летучих int EventWaitHandle s ...

Надеюсь, это поможет.

0

Проблема

вопрос вы столкнулись указывает, гораздо большую проблему под рукой ... Вы могли бы попытаться решить ее с помощью тестов Unit и оптимизации вещи, но это просто подметать вопрос под ковром. ..

Вам нужен новый подход с архитектурной точки зрения, начните интегрировать более сервис-ориентированную архитектуру. С предоставленной вами информацией очевидно, что у вас есть одно веб-приложение, пытающееся взять на себя слишком много обязанностей. Вам нужно начать разделять обязанности на разные службы и распространять нагрузку.


Решение

Вам не нужно сразу обработать все на главном веб-приложения, и попытка сделать это всегда будет кусаться.

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

Когда пользователь загружает файл, сохраняет его и добавляет в очередь, подлежащую обработке другой службой, поэтому из веб-приложения вы добавите документ, который был загружен в очередь, затем отдельную службу, которая работает независимо, может пойти и обработать этот элемент со скоростью, указанной вами