2013-06-16 1 views
1

У меня около 100 клиентов (машины Windows в основном с одним или двумя Mac/Ubuntas), и мне нужно синхронизировать огромное количество файлов между клиентами с помощью центрального сервера, который почти не работает с синхронизированными файлами (в основном управляя правами доступа).Как эффективно передавать огромное количество файлов с моих клиентов python на сервер и обратно?

Сейчас я вижу два решения, доступные:

  1. Использование XML-RPC. Выглядит отлично, но я не уверен в производительности. Из этого я googled производительность этого подхода является подпара.

  2. Используйте paramiko и скопируйте файлы по ftp из scp. Мне не нравится это решение, потому что я храню файлы в riak, и это будет двойная работа в/в на стороне сервера: сначала напишите файл на диск и второй прочитайте файл с диска и, наконец, напишите его на riak ,

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

Операции во время передачи файлов:

  1. Проверка подлинности загрузки пользователем

  2. Проверка дисковой квоты пользователя

  3. правила, основанные Managment прав доступа (который может читать/записывать каждый файлов/каталогов) ,

  4. Размещение файлов в riak, поскольку необходим определенный уровень отказоустойчивости.

Как я вижу, это приложение на самом деле должно быть ближе к dropbox, чем к rsync. Мы фактически использовали dropbox api, но это хранилище должно быть интегрировано глубоко с нашими другими системами, поэтому мы хотели иметь больше контроля над ним.

ответ

0

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

Теперь, когда вы говорите, что сервер «почти не работает на синхронизированных файлах», что такое «почти»? Если в файлах нечего делать, вы можете использовать rsync. Если на самом деле есть какие-то тяжелые вычисления в файлах, стоимость их, вероятно, будет затмевать затраты на перенос, поэтому IO не будет вашим узким местом, и вы можете использовать любой инструмент для него, не ухудшая производительность.

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

Редактировать в соответствии с обновленным вопросом:

Есть Python rsync привязок, которые должны позволить синхронизировать доступ даже с систем MS Windows.Он не упоминает OS X, но, поскольку это довольно близко к POISX, шансы высоки, что он работает без лишних хлопот. На стороне сервера вы просто контролируете локальную файловую систему для изменений (проверьте, например, iwatch), а затем зафиксируйте различия с вашей БД. Используя эти два, вы должны начать работать, если производительности недостаточно, вы можете подключиться к серверу rsync (с открытым исходным кодом) и активировать обновления БД оттуда, не проходя через файловую систему.

+0

Я нахожу идею использования rsync очень интересным, но насколько хорошо работает rsync на окнах? Также я обновил вопрос. Разработанное приложение на самом деле должно быть ближе к dropbox, чем к rsync. Мы фактически использовали dropbox api, но это хранилище должно быть интегрировано глубоко с нашими другими системами, поэтому мы хотели иметь больше контроля над ним. – Moonwalker

 Смежные вопросы

  • Нет связанных вопросов^_^