Как отправлять документы в конференции чата или почему HTTP(S) лучше FTP?

Несмотря на лето, сезон отпусков и тотальное нежелание работать жару, мы снова обновили MyChat. Основная «фича» новой версии 6.2 — вставка файлов в конференциях.

Обо всём уже написано в официальной новости, я же остановлюсь на технологии, как оно всё устроено «под капотом».
Как вы знаете, в сервер MyChat встроен высокопроизводительный WEB-сервер Node.js. Мы постепенно переводим работу с файлами в MyChat с FTP на HTTP(s) протокол из-за удобства последнего.

  1. Как было раньше?
  2. Как вставляются файлы в конференциях MyChat сейчас?
  3. Что будет дальше? Откажемся от FTP?
  4. Плюсы передачи файлов напрямую, через FTP (клиент-клиент)
  5. Минусы передачи файлов напрямую через FTP (клиент-клиент)
  6. Плюсы передачи файлов через сервер
  7. Минусы передачи файлов через сервер
  8. Итоги подведём (с)

Как было раньше?

Раньше в MyChat можно было передавать файлы только в приватах, один-на-один. Эта технология работает и сейчас, она особенно хороша, если отправитель и получатель находятся в локальной сети и видят друг друга «напрямую». Скорость передачи будет близка к физической скорости сети, хоть фильмы передавай 🙂

Однако, как только пользователи начинают подключаться к серверу через Интернет, из разных подсетей, из-за NAT, файрволов, прокси и прочих антивирусов — начинаются всевозможные проблемы. Не каждый администратор – гуру в сетевых технологиях и знает, как работает FTP в пассивном режиме, как пробрасывать порты на роутерах и настраивать диапазоны.

Мы же стремимся сделать MyChat как можно проще и ближе к пользователям. В идеале — чтобы он всё сделал за админа сам 🙂

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

Как вставляются файлы в конференциях MyChat сейчас?

Общая схема работы такая:

  1. Берём файл, рассчитываем для него контрольную сумму SHA-1.
  2. Отправляем запрос на сервер, есть ли такой файл на сервере, возможно, он уже заливался на сервер до нас кем-то.
  3. Получаем ответ от сервера. Если файл там уже был, то сразу отправляем сообщение в конференцию, если файла на сервере нет — заливаем его по HTTP/HTTPS и после этого отправляем сообщение в конференцию.
  4. После того, как пользователи конференции получают сообщение, они могут кликнуть по нему и файл автоматически скачается по HTTP/HTTPS на локальный компьютер в папку «Мои документы» (либо в другую, согласно настроек).

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

Что будет дальше? Откажемся от FTP?

Полностью отказываться от FTP мы не будем. FTP сервер останется в MyChat Server, как и раньше. Будет публичная папка, будут личные аккаунты пользователей.

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

Кстати говоря, систему обновлений и вставку картинок в чат мы уже перенесли с FTP на рельсы HTTP/HTTPS. Судя по отзывам наших пользователей, ход был правильный.

Передачу файлов мы со временем перенесём целиком и полностью на плечи WEB-сервера, и вот почему:

Плюсы передачи файлов напрямую, через FTP (клиент-клиент)

  1. Скорость
    Максимальная, которую может предоставить ваша сеть, FTP в MyChat «выжмет» из неё все возможное.

Минусы передачи файлов напрямую через FTP (клиент-клиент)

  1. Интернет, разные подсети, NAT, файрволы, антивирусы, прокси
    Если на пути есть эти препятствия, передача напрямую работать не будет. На практике это означает, что в 90% случаев по умолчанию будет включаться медленный режим передачи «клиент-сервер-клиент». MyChat файлы передаст, но скорость уже будет совсем не та.
  2. На сервере нет копий файлов
    Передали файлы и потеряли копию — просите файл снова у отправителя. Перезаписали поверху — ищите оригинал. Про сохранение файлов для внутренней СБ компании или для аудита уже не говорим.
  3. Получатель должен быть онлайн
    В противном случае файлы придётся заливать на сервер.
  4. Нет синхронизации
    Передали файл с компьютера на компьютер, подключились Android-приложением в свою учётку — файлов нет. Они остались локально у получателя и отправителя.
  5. Нет шифрования
    По умолчанию FTP не использует шифрование трафика.

Плюсы передачи файлов через сервер

  1. Проще настройка
    http/https работает по одному TCP порту. В большинстве случаев настройка даже не потребуется.
  2. Синхронизация
    Клиент всегда может запросить историю в конференции или привате, если там передавались файлы — их можно скачать, даже если у пользователя их уже нет на локальном устройстве.
  3. Нет копий одинаковых файлов
    Для каждого файла вычисляются контрольные суммы, поэтому на сервере не будет дубликатов, даже если у файлов разные названия. Дополнительный бонус в следующем: если файл уже кто-то заливал на сервер до вас, то будущие отправки таких файлов будут происходить мгновенно.
  4. История изменения файлов
    Даже если название файла оставалось одним и тем же, а содержимое менялось, то для сервера — это разные файлы. И все копии будут храниться в целости и сохранности.
  5. Минимальная нагрузка на сервер
    Файл будут скачивать не тогда, когда его залили, а только при необходимости. Даже если вы его отправили в конференцию, где сидит сотня людей.
  6. Ограничения по типу и размеру файлов
    Клиент-сервер, админ всё может настроить максимально гибко.
  7. Шифрование
    Включаете HTTPS в админке сервера, добавляете свои сертификаты и работаете.

Минусы передачи файлов через сервер

  1. Расход свободного места на сервере
    Объективно, на сериалы никакого места не хватит. Но это регулируется либо административно, либо технически. Да и место на HDD дешевеет с каждым годом.
  2. Большие файлы в локальной сети будут передаваться медленнее
    Файлы идут не напрямую, а сначала заливаются на сервер, а потом уже скачиваются по запросу.

Итоги подведём (с)

Сложим плюсы и минусы:

  1. Передача напрямую: -5 баллов
  2. Передача через сервер: 7 против 2. Но мы не убираем технологию передачи напрямую, так что 2 балла можно записать в плюсы.

Итого, счёт +14 баллов в пользу новой технологии.

Выводы очевидны: HTTP/HTTPS и хранение файлов на сервере — побеждают.

Ещё почитать:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *