Назад | Перейти на главную страницу

Возможно ли, чтобы несколько веб-служб одновременно записывали данные в централизованный сетевой каталог / папку?

У меня есть централизованная папка на сетевом диске (традиционный жесткий диск), которая используется несколькими веб-службами, запущенными на разных серверах приложений. Сервисы будут постоянно обрабатывать входящие файлы через HTTP-запросы и писать в это место.

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

Например,

Если D:/MyNetworkFolder/ является родительским каталогом, и если ServiceA обрабатывает Request1, а ServiceB обрабатывает Request2, обе службы будут пытаться сохранить входящие файлы этого запроса (общий размер до 2 ГБ) в D:/MyNetWorkFolder/Request1 и D:/MyNetworkFolder/Request2 соответственно. Как только все файлы будут сохранены для запроса, другая служба будет читать файлы из D:/MyNetworkFolder/RequestNumber. и выполнять свои задачи.

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

Возможен ли этот тип параллельной обработки файлов? Повлияет ли это на производительность ввода-вывода приложения или состояние жесткого диска, поскольку несколько служб одновременно пытаются читать / писать из одного и того же родительского местоположения? Другой вариант, который у нас есть, - убедиться, что каждая служба получает свой собственный физический сетевой диск, или рассмотреть возможность использования SSD.

Все серверы работают под управлением Windows Server 2008 и выше, а веб-службы написаны с использованием C # и .NET.

Is this type of parallel file processing possible? Would it affect the application's I/O performance or the hard disk's health because multiple services are trying to read/write from the same Parent location at the same time?

Вы по существу описали, как общие сетевые папки работали с момента появления ... общих сетевых папок. Производительность будет зависеть от вашей инфраструктуры, но это не влияет на производительность.

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

Что касается производительности и здоровья, оба они сводятся к показателям ...

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

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

Возможно ли, чтобы несколько веб-сервисов одновременно вели запись в централизованный сетевой каталог / папку?

Короче да.

На практике вам понадобится протестируйте свои приложения и хранилище и правильно их размер.

Вы также можете рассмотреть:

  • Большое количество файлов или каталогов в одном каталоге может отрицательно сказаться на производительности. Насколько большое число будет проблематичным, зависит ... Опять же, тест. (пара тысяч, без проблем, миллионы, вообще плохая идея.)
  • Вам необходимо убедиться, что генерируются / используются уникальные имена файлов / каталогов.
  • Если файловая система является вашей очередью, вам необходимо предотвратить обработку файлов, которые все еще находятся на предыдущем этапе (т.е. никакой дальнейшей обработки файлов, загрузка которых еще не завершена, файлы не должны удаляться до завершения обработки и т. Д.) Когда ваши файлы находятся в одной файловой системе, вы можете добиться этого, переименовав файл / каталог в начале и в конце каждого этапа, который является атомарным и так же хорош, как и мгновенный, но если вам нужно будет скопировать или переместить эти файлы размером 2 ГБ в различные файловые системы, которые потребовали бы намного больше времени и ввода-вывода.

Кстати, в 2016 году я бы не стал создавать новое пользовательское приложение с Windows Server 2008 в качестве целевой платформы ...