Несмотря на лето, сезон отпусков и тотальное нежелание работать жару, мы снова обновили MyChat. Основная «фича» новой версии 6.2 — вставка файлов в конференциях.
Обо всём уже написано в официальной новости, я же остановлюсь на технологии, как оно всё устроено «под капотом».
Как вы знаете, в сервер MyChat встроен высокопроизводительный WEB-сервер Node.js. Мы постепенно переводим работу с файлами в MyChat с FTP на HTTP(s) протокол из-за удобства последнего.
- Как было раньше?
- Как вставляются файлы в конференциях MyChat сейчас?
- Что будет дальше? Откажемся от FTP?
- Плюсы передачи файлов напрямую, через FTP (клиент-клиент)
- Минусы передачи файлов напрямую через FTP (клиент-клиент)
- Плюсы передачи файлов через сервер
- Минусы передачи файлов через сервер
- Итоги подведём (с)
Как было раньше?
Раньше в MyChat можно было передавать файлы только в приватах, один-на-один. Эта технология работает и сейчас, она особенно хороша, если отправитель и получатель находятся в локальной сети и видят друг друга «напрямую». Скорость передачи будет близка к физической скорости сети, хоть фильмы передавай 🙂
Однако, как только пользователи начинают подключаться к серверу через Интернет, из разных подсетей, из-за NAT, файрволов, прокси и прочих антивирусов — начинаются всевозможные проблемы. Не каждый администратор – гуру в сетевых технологиях и знает, как работает FTP в пассивном режиме, как пробрасывать порты на роутерах и настраивать диапазоны.
Мы же стремимся сделать MyChat как можно проще и ближе к пользователям. В идеале — чтобы он всё сделал за админа сам 🙂
Получается, по умолчанию лучше хранить файлы на сервере, а не передавать их напрямую между клиентами.
Как вставляются файлы в конференциях MyChat сейчас?
Общая схема работы такая:
- Берём файл, рассчитываем для него контрольную сумму SHA-1.
- Отправляем запрос на сервер, есть ли такой файл на сервере, возможно, он уже заливался на сервер до нас кем-то.
- Получаем ответ от сервера. Если файл там уже был, то сразу отправляем сообщение в конференцию, если файла на сервере нет — заливаем его по HTTP/HTTPS и после этого отправляем сообщение в конференцию.
- После того, как пользователи конференции получают сообщение, они могут кликнуть по нему и файл автоматически скачается по HTTP/HTTPS на локальный компьютер в папку «Мои документы» (либо в другую, согласно настроек).
На серверной стороне файлы по возможности кешируются в памяти, чтобы увеличить скорость отдачи и уменьшить количество обращений к диску.
Что будет дальше? Откажемся от FTP?
Полностью отказываться от FTP мы не будем. FTP сервер останется в MyChat Server, как и раньше. Будет публичная папка, будут личные аккаунты пользователей.
Отдельная технология передачи файлов «точка-точка» тоже останется, слишком быстро она работает 🙂 Кто понимает, будет пользоваться, а кому не нужно – уберут правами.
Кстати говоря, систему обновлений и вставку картинок в чат мы уже перенесли с FTP на рельсы HTTP/HTTPS. Судя по отзывам наших пользователей, ход был правильный.
Передачу файлов мы со временем перенесём целиком и полностью на плечи WEB-сервера, и вот почему:
Плюсы передачи файлов напрямую, через FTP (клиент-клиент)
- Скорость
Максимальная, которую может предоставить ваша сеть, FTP в MyChat «выжмет» из неё все возможное.
Минусы передачи файлов напрямую через FTP (клиент-клиент)
- Интернет, разные подсети, NAT, файрволы, антивирусы, прокси
Если на пути есть эти препятствия, передача напрямую работать не будет. На практике это означает, что в 90% случаев по умолчанию будет включаться медленный режим передачи «клиент-сервер-клиент». MyChat файлы передаст, но скорость уже будет совсем не та. - На сервере нет копий файлов
Передали файлы и потеряли копию — просите файл снова у отправителя. Перезаписали поверху — ищите оригинал. Про сохранение файлов для внутренней СБ компании или для аудита уже не говорим. - Получатель должен быть онлайн
В противном случае файлы придётся заливать на сервер. - Нет синхронизации
Передали файл с компьютера на компьютер, подключились Android-приложением в свою учётку — файлов нет. Они остались локально у получателя и отправителя. - Нет шифрования
По умолчанию FTP не использует шифрование трафика.
Плюсы передачи файлов через сервер
- Проще настройка
http/https работает по одному TCP порту. В большинстве случаев настройка даже не потребуется. - Синхронизация
Клиент всегда может запросить историю в конференции или привате, если там передавались файлы — их можно скачать, даже если у пользователя их уже нет на локальном устройстве. - Нет копий одинаковых файлов
Для каждого файла вычисляются контрольные суммы, поэтому на сервере не будет дубликатов, даже если у файлов разные названия. Дополнительный бонус в следующем: если файл уже кто-то заливал на сервер до вас, то будущие отправки таких файлов будут происходить мгновенно. - История изменения файлов
Даже если название файла оставалось одним и тем же, а содержимое менялось, то для сервера — это разные файлы. И все копии будут храниться в целости и сохранности. - Минимальная нагрузка на сервер
Файл будут скачивать не тогда, когда его залили, а только при необходимости. Даже если вы его отправили в конференцию, где сидит сотня людей. - Ограничения по типу и размеру файлов
Клиент-сервер, админ всё может настроить максимально гибко. - Шифрование
Включаете HTTPS в админке сервера, добавляете свои сертификаты и работаете.
Минусы передачи файлов через сервер
- Расход свободного места на сервере
Объективно, на сериалы никакого места не хватит. Но это регулируется либо административно, либо технически. Да и место на HDD дешевеет с каждым годом. - Большие файлы в локальной сети будут передаваться медленнее
Файлы идут не напрямую, а сначала заливаются на сервер, а потом уже скачиваются по запросу.
Итоги подведём (с)
Сложим плюсы и минусы:
- Передача напрямую: -5 баллов
- Передача через сервер: 7 против 2. Но мы не убираем технологию передачи напрямую, так что 2 балла можно записать в плюсы.
Итого, счёт +14 баллов в пользу новой технологии.
Выводы очевидны: HTTP/HTTPS и хранение файлов на сервере — побеждают.