/ / Кілька машин - Процес багато файлів одночасно? - Linux, мережа, апаратне забезпечення, жорсткий диск

Кілька машин - Процес багато файлів одночасно? - Linux, мережа, апаратне забезпечення, жорсткий диск

Мені потрібно одночасно обробляти велику кількість файлів (тисячі різних файлів, середні розміром 2 Мб на файл).

Вся інформація зберігається на одному (1.5 Тб) мережевий жорсткий диск, і буде доступний (прочитаний) приблизно на 30 різних машин. Для ефективності кожна машина буде читати (та обробляти) різні файли (є тисячі файлів, які потрібно обробляти).

Кожна машина - після читання файлуз папки "Вхідні" на жорсткому диску 1,5 ТБ - буде обробляти інформацію та бути готовим вивести оброблену інформацію назад до "обробленої" папки на 1,5-титрій диску. оброблена інформація для кожного файлу має приблизно такий же середній розмір, що і вхідні файли (близько ~ 2 Мб на файл).

Чи існують які-небудь "робити" та "пожертви", коли такі єстворення такої операції? чи є проблема в тому, щоб одночасно мати 30 машин або ж читати (або записувати) інформацію на той же мережний диск? (примітка: існуючі файли будуть читати, не додаються / не будуть записані, нові файли будуть створені з нуля, тому немає проблем з багаторазовим доступом до того самого файлу ...). Чи є якісь вузькі місця, які слід очікувати?

(Я використовую Linux, Ubuntu 10.04 LTS на всіх машинах, якщо це все важливо)

Відповіді:

1 для відповіді № 1

Речі, про які слід подумати:

Якщо обробка, яка виконується для кожного файлу, проста, то ваше справжнє обмеження - це не кількість паралельних файлів, які ви читаєте, а можливості жорсткого диска.

Якщо обробка не займає багато часу (скажімо, деякісекунд за файл), ви пройдете точку, в якій додавання інших процесів сповільнюватиме лише сповзання, оскільки кожен процес читає та записує результати, а диск може робити це дуже багато.

Спробуйте мінімізувати доступ до диску: наприклад, завантажте файли та створюйте результати локально, поки інші процеси завантажуються, і відправте результати назад, коли завантаження на диску знижується.

Чим більше я пишу, тим більше він зводиться до того, скільки потрібно обробляти для кожного файлу. Якщо це простий синтаксичний аналіз, щось, що займає мілісекунди, 1 машина або 30 буде мати невелику різницю.


0 для відповіді № 2

Потрібно бути обережним, щоб два робочих процеси не забирали (і намагалися зробити) той самий фрагмент роботи одночасно.

На жаль, файлові системи NFS не мають семантики, які дозволяють вам легко зробити це.

Тож я рекомендую використовувати щось на зразок Gearman і модель виробника / споживача, де один процес видає роботу тим, хто має доступ до цього.

Інша можливість полягає в тому, щоб мати базу даних (наприклад, mysql) зі таблицею усіх завдань і забезпечити атомічні процеси «вимагати» завдання для себе.

Але все це тільки варто, якщо ваші процеси в основному пов'язані з процесором. Якщо ви намагаєтеся отримати більше пропускної здатності IO (або операцій) з вашого NAS за допомогою декількох клієнтів, він не буде працювати.

Я припускаю, що ви будете працювати принаймні Gigabit Ethernet тут (або це, ймовірно, не варто).

Ви намагалися працювати з кількома процесами на одній машині?