Корпоративное облачное хранилище
О клиенте
Компания СООО «Конте Спа» была основана в 1997 году в г. Гродно (Республика Беларусь), когда рынок только начинал свое развитие. 20 лет неустанного развития и эффективной работы вывели «Конте Спа» на позицию лидера в производстве одежды, белья, чулочно-носочных изделий в Восточной Европе.
О проекте
Работа с фотографиями и маркетинговыми материалами была не упорядочена и не прозрачна. Сотрудникам
приходилось использовать разнообразные личные хранилища файлов для передачи друг другу, управление
доступами было не прозрачно, регулярно файлы терялись. Чтобы централизовать все процессы хранения и
управления доступами и обеспечить сохранность файлов, было принято решение разработать собственное
облачное хранилище.
ConteDisk представляет из себя веб-приложение, похожее на привычные сервисы облачного хранения файлов –
Google Drive и Яндекс.Диск. Помимо хранения файлов имеется собственная система учетных записей,
пользовательских групп, возможность гибкого контроля доступа.
Цели проекта
-
Сократить расходы на хранение. Популярные сервисы требуют большого бюджета для хранения многих терабайтов данных.
-
Централизовать управление доступами. Недопустимы “утечки” критичной информации. Доступ к чувствительной информации должен иметь узкий круг лиц.
-
Ускорить загрузку файлов. Работа с удаленными облачными хранилищами заведомо медленнее, чем с собственным, расположенным в том же городе.
-
Предоставить API для партнеров. Существует потребность предоставлять программный доступ к файлам определенного рода для партнеров.
-
Интегрировать файловое хранилище в экосистему. На других проектах компании есть потребность организовать хранение файлов.
- на 40% Сократили расходы на оплату облачных хранилищ.
- > 10 млн Файлов и папок.
- > 1000 Постоянных пользователей внутри компании.
Решение
Глобально вся система состоит из нескольких модулей:
-
Хранилище файлов. Содержит все папки и файлы, которые пользователь загрузил или к которым ему предоставили доступ. Мы разработали интерфейс так, чтобы он был похожим на системные обозреватели файлов, вплоть до сочетаний клавиш, возможности сортировать содержимое и настроить, как будут отображаться папки и файлы.
-
Загрузчик файлов. Модуль, отвечающий за загрузку файлов и папок из самых разных мест: из интерфейса приложения; по FTP; используя архивы с авто-распаковкой; через специальный API.
-
Поиск. Воспользоваться им можно из любого другого раздела, за считанные секунды отыскав нужные файлы или папки.
-
Корзина. Все файлы или папки, что были удалены, попадают в корзину — такое же хранилище, особенность которого в использовании специальных “холодных” накопителей, позволяющих ещё больше сократить расходы на хранение.
-
Профиль. В этом разделе каждый пользователь просматривает информацию о своей учетной записи, статистику по использованию сервиса.
-
Пользователи и группы. Раздел доступен только администраторам, которые управляют всеми учетными записями и группами, к которым относятся пользователи. Управление включает себя все стадии: от ручной регистрации пользователя или отправления приглашения на почту, до ограничения доступа и полной блокировки.
-
Интеграция с хранилищем S3. Все загруженные файлы впоследствии попадают на хранение в специализированную систему, работающую по протоколу S3 – стандарту для облачного хранения файлов. Мы спроектировали систему с возможностью использовать любого провайдера, поддерживающего данный протокол.
Проблемы и вызовы
Управление доступом
Пользователей — тысячи, файлов и папок — десятки миллионов. Для каждого пользователя и для каждой группы, в которую он входит, необходимо выполнять проверку на право просматривать или редактировать файл, что при решении “в лоб” занимало бы непомерно много времени и ресурсов. Продолжительное время изучая варианты реализации, мы разработали механизм проверки, скорость работы которого впечатляет уже не первый год и не имеет прямой зависимости от количества файлов или пользователей. Предоставление доступа, настройка прав и срока их действия могут происходить как для отдельных пользователей или групп, так и для неограниченного числа пользователей, в том числе тех, что не зарегистрированы в системе, используя публичные ссылки.
Терабайты данных
Неожиданностью было то, что одна фотосессия, загруженная в хранилище, могла занимать сотни гигабайт с фотографиями в “сыром” формате. Такие фотосессии проводятся регулярно, что заставляет думать не только об объемах хранилища, но и о скорости доступа к файлам, времени на их поиск. Для решения проблемы мы рассмотрели несколько вариантов, в том числе использование собственных физических накопителей в дата-центрах. Но их закупка и обслуживание персоналом дата-центра обходится недешево, а для большей надежности понадобилось бы размещать часть данных в другом дата-центре. В качестве оптимального решения мы спроектировали двухстадийную систему – “горячие” файлы находятся на том же физическом сервере с очень быстрым, но необъемным носителем, а все остальные файлы хранятся у провайдера, предоставляющего высокую скорость и неограниченные объёмы данных, распределенные по нескольким независимым серверам.
Предпросмотр всех типов файлов
Пользователям важно сразу видеть, как выглядят фотографии и документы. С простыми форматами изображений (JPEG, PNG) браузер легко справится самостоятельно. Но фотографы загружают исходные RAW или уже обработанные TIFF-файлы, бухгалтеры и юристы загружают документы и таблицы, а маркетологи – презентации и видеоматериалы в самых разных форматах, которые не могут быть отображены браузером. Возможность просмотреть содержимое таких файлов не предоставляется даже в популярных сервисах, а готового решения и вовсе нет. Для решения задачи мы реализовали модуль, построенный на базе десятков вспомогательных инструментов, позволяющих извлечь содержимое файлов разного типа. Задача модуля — создать отдельные файлов для предпросмотра. Они не занимают много места, даже если размер исходного файла исчисляется десятками гигабайт, и позволяют выполнить все базовые действия – просмотреть сотню фотографий и видео, прочитать содержимое документов и таблиц, оценить как выглядят презентации.
Резервное копирование
Загружая файл в систему, пользователь должен иметь возможность удалить его со своего устройства и быть уверенным в том, что он не пропадет из системы. Для этого, помимо надежных механизмов передачи данных, необходимо регулярно проводить резервное копирование. Но нельзя хранить абсолютно всё — это сильно ударит по бюджету. Мы решили задачу, внедрив интеллектуальное определение времени хранения резервных копий для разных типов файлов. Оно базируется на многих факторах: частоте доступа к файлу, дате его загрузки, типе файла, пользователе и его группе и некоторых других. Это позволяет экономить значительные суммы, оставаясь уверенными в том, что важная информация не пропадет.
Примеры экранов приложения
Технологии
- PHP
- Laravel
- Node.js
- MySQL
- Redis
- Elasticsearch
- RabbitMQ
- REST API
- TypeScript
- Vue.js
- WebSockets
- S3
Сотрудничество
2020 – ∞