Постоянство файловой системы или MSMQ - PullRequest
0 голосов
/ 28 ноября 2018

Итак, в унаследованном проекте я работаю над следующей стратегией, которая используется для сохранения данных (больших объемов). До определенного момента она работала нормально, но теперь выглядит так, как будто она достигла своих пределов.Я рассматриваю изменение дизайна, но не знаю, что делать.

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

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

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

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

1 Ответ

0 голосов
/ 04 декабря 2018

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

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

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

Так что я могу обнаружить здесь ожидание, что, заменив транспорт, который, как вы подозреваете, является проблемой, вы решите проблему.Я не говорю, что это предположение неверно, но следует учитывать, что чтение файлов в Windows обычно очень, очень быстрое.На самом деле я был бы удивлен, обнаружив, что ваши затраты на ввод-вывод - это то, что вызывает замедление вашей обработки.Также учтите, что замена файлового транспорта на транспортный MQ все еще потребует чтения файлов с диска - как вы думаете, где подсистема MQ хранит элементы , пока они находятся в очереди?

В этом случае веб-служба может быть заменена на очередь сообщений, а служба Windows может читать сообщения, анализировать и сохранять их в базе данных.

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

...