Что нового в ownCloud в 2021 году?
Платформа для обмена файлами и синхронизации с открытым исходным кодом полностью переработана на основе Go и Vue.js и устраняет необходимость в базе данных.
Новейшая версия ownCloud, ownCloud Infinite Scale (OCIS), представляет собой полную переработку почтенного стека программного обеспечения для совместного использования и синхронизации корпоративных файлов с открытым исходным кодом. Он включает в себя новый бэкэнд, написанный на Go, интерфейс на Vue.js, а также множество изменений, включая устранение необходимости в базе данных. Этот масштабируемый модульный подход заменяет PHP, базу данных и файловую систему POSIX ownCloud и обещает повышение производительности до 10 раз.
Традиционно ownCloud был сосредоточен на идее наличия POSIX-совместимой файловой системы для хранения данных, загружаемых пользователями — различных версий данных и мусорных файлов, а также файлов конфигурации и журналов. По умолчанию файлы пользователя ownCloud находились по пути в его экземпляре ownCloud, например /var/www
или /srv/www
(корневой каталог документов веб-сервера).
Каждый администратор, который поддерживает экземпляр ownCloud, знает, что они становятся огромными; сегодня они обычно начинаются намного больше, чем изначально разрабатывался ownCloud. Одним из крупнейших экземпляров ownCloud является Австралийская академическая и исследовательская сеть (AARNet), компания, которая хранит данные более 100 000 пользователей.
Перейдем к микросервисам
Разработчики ownCloud решили, что переписывание кодовой базы с помощью Go может дать множество преимуществ по сравнению с PHP. Даже когда компьютерные программы кажутся одним монолитным фрагментом кода, большинство из них внутри разделены на различные компоненты. Веб-серверы, которые обычно развертываются с помощью ownCloud (например, Apache), являются отличным примером. Внутри одна функция обрабатывает соединения TCP/IP, другая функция может обрабатывать SSL, а третий фрагмент кода выполняет запрошенные файлы PHP и доставляет результаты конечному пользователю. Все эти события должны происходить в определенном порядке.
Разработчики ownCloud хотели, чтобы новая версия выполняла несколько шагов одновременно, чтобы события могли происходить одновременно. Программному обеспечению, способному обрабатывать запросы параллельно, не приходится ждать завершения одного процесса, прежде чем начнется следующий, поэтому они могут быстрее доставлять результаты. Параллелизм — одна из причин, по которой Go так популярен в контейнерных приложениях с микроархитектурой.
С помощью OCIS ownCloud адаптируется к архитектуре, основанной на принципе микросервисов. OCIS разделен на три уровня: хранилище, ядро и интерфейс. Я рассмотрю каждый из этих уровней, но единственное, что действительно важно для людей, — это общая производительность. Пользователи не думают об уровне программного обеспечения; они просто хотят, чтобы программное обеспечение работало хорошо и быстро.
Уровень 1: Хранение
Доступное системе хранилище — это самый низкий уровень ownCloud. Производительность также обеспечивает масштабируемость; крупные экземпляры ownCloud должны справляться с нагрузкой тысяч клиентов и добавлять дополнительное дисковое пространство, если существующее хранилище заполняется.
Как и многие другие концепции сегодня, хранилища объектов и масштабируемое хранилище не были доступны во время разработки ownCloud. Администраторы теперь привыкли к большему выбору, поэтому ownCloud позволяет передать обработку физических устройств хранения внешним решениям. Хотя объектное хранилище на основе S3, хранилище на основе Samba и параметры файловой системы, совместимой с POSIX, по-прежнему поддерживаются в OCIS, предпочтительным способом его развертывания является хранилище EOS — Open Storage (EOS).
ЭОС спешит на помощь
EOS оптимизирован для очень низкой задержки при доступе к файлам. Он предоставляет клиентам дисковое хранилище через платформу XRootD, но также позволяет другим протоколам получать доступ к файлам. ownCloud использует расширение протокола HTTP EOS для связи с решением хранения (с использованием протокола HTTPS). EOS также обеспечивает почти «бесконечную» масштабируемость. Например, установка EOS в CERN включает более 200 ПБ дискового хранилища и продолжает расти.
Выбрав EOS, ownCloud устранил ряд недостатков традиционных решений хранения:
- В EOS нет типичной единой точки отказа.
- Все соответствующие службы запускаются с резервированием, включая возможность масштабирования и добавления экземпляров всех существующих служб.
- EOS обещает никогда не исчерпать фактическое дисковое пространство и имеет встроенную избыточность для хранимых данных.
В больших средах ownCloud ожидает, что администратор развернет экземпляр EOS с OCIS. В обмен на бремя поддержки отдельной системы хранения администратор получает возможность не беспокоиться о масштабируемости и производительности экземпляра OCIS.
А как насчет небольших установок?
Это намекает на предполагаемый вариант использования ownCloud для OCIS: это больше не универсальный сервер для малого бизнеса и не небольшой домашний сервер. Стратегия ownCloud с OCIS ориентирована на крупные центры обработки данных. Для небольших или домашних офисов EOS, вероятно, будет чрезмерным и слишком требовательным для управления одним администратором. OCIS обслуживает небольшие установки через среду Reva, которая обеспечивает поддержку файловых систем S3, Samba и даже POSIX-совместимых файловых систем. Это возможно, поскольку EOS не встроен в OCIS. Reva не может предоставить тот же набор функций, что и EOS, но она удовлетворяет большую часть потребностей конечных пользователей и небольших установок.
Уровень 2: Ядро
Второй уровень OCIS (благодаря Go) представляет собой скорее набор микросервисов, чем единое ядро. Каждый из них отвечает за выполнение одной задачи в фоновом режиме (например, сканирование на наличие вирусов). По сути, все функции OCIS являются результатом работы определенного микросервиса, например аутентификация запросов с использованием OpenID Connect к поставщику удостоверений. В конечном итоге это упрощает подключение существующих пользовательских каталогов, таких как службы федерации Active Directory (ADFS), Azure AD или протокол облегченного доступа к каталогам (LDAP), к ownCloud. Тем, у кого нет существующего поставщика удостоверений, ownCloud предоставляет собственный экземпляр, что фактически позволяет ownCloud поддерживать собственную базу данных пользователей.
Уровень 3: Интерфейс
Третий уровень OCIS, интерфейс, — это то, что поставщик называет ownCloud Web. Это полностью переработанный пользовательский интерфейс, основанный на JavaScript-фреймворке Vue.js. Как и ядро OCIS, веб-интерфейс написан на основе принципов микросервисов и, следовательно, обеспечивает лучшую производительность и масштабируемость. Разработчики также воспользовались возможностью обновить веб-интерфейс; По сравнению с предыдущими версиями ownCloud веб-интерфейс OCIS выглядит меньше и приятнее.
Разработчики OCIS проделали впечатляющую работу, соблюсти современные принципы проектирования программного обеспечения. Фундаментальная проблема при создании приложений в соответствии с подходом микросервисов — заставить отдельные компоненты среды взаимодействовать друг с другом. На помощь могут прийти API, но это означает, что каждый микрокомпонент должен иметь собственный четко определенный интерфейс API.
К счастью, существуют инструменты, которые снимают это бремя с плеч разработчиков, в первую очередь gRPC. Идея gRPC заключается в том, чтобы иметь набор предопределенных API, которые запускают действия в одном компоненте из другого.
Другие заметные изменения дизайна
Борьба с сетевым трафиком с помощью Traefik
Этот новый дизайн приложения создает некоторые проблемы для базовой сети. Для решения этих проблем разработчики OCIS выбрали платформу Traefik. Traefik автоматически балансирует нагрузку различных экземпляров микросервисов, управляет автоматическим SSL-шифрованием и позволяет дополнительно развертывать правила брандмауэра.
Разделение между серверной и внешней частью добавляет преимущества OCIS. Фактически, действия пользователя, запускаемые через ownCloud Web, полностью отделены от движка ownCloud, выполняющего задачу на бэкэнде. Если пользователь вручную запускает проверку на вирусы файлов, хранящихся в ownCloud, ему не нужно ждать завершения проверки. Вместо этого проверка происходит в фоновом режиме, и пользователь видит результаты после завершения проверки. Это принцип параллелизма в работе.
Расширения как микросервисы
Как и другие веб-сервисы, ownCloud поддерживает расширение своих возможностей с помощью расширений. OCIS не меняет этого, но обещает решить хорошо известную проблему, особенно с приложениями сообщества. Приложения неизвестного происхождения могут вызвать проблемы на сервере, затруднить обновления и отрицательно повлиять на общую производительность сервера.
Новая архитектура OCIS на основе gRPC значительно упрощает создание расширений наряду с существующими микросервисами. Поскольку API предопределен gRPC, разработчикам достаточно создать микросервис с желаемыми функциями, которыми можно будет управлять с помощью gRPC. Traefik в каждом конкретном случае гарантирует, что вновь развернутые надстройки автоматически добавляются в существующую коммуникационную сеть.
Прощай, MySQL!
Переход ownCloud на gRPC и микросервисы устраняет необходимость в реляционной базе данных. Вместо этого компоненты, которым необходимо хранить метаданные, делают это самостоятельно. Благодаря Reva и отсутствию зависимости от MySQL сложность запуска ownCloud в небольших средах значительно снижается — особенно приятный бонус для сопровождающих крупных центров обработки данных, но приятный для администраторов установки любого размера.
Начало работы OCIS
ownCloud опубликовал техническую предварительную версию OCIS 1.0 в декабре 2020 года, поставив ее в виде контейнера Docker и двоичных файлов. Дополнительные примеры его запуска приведены в разделе развертывания репозитория GitHub.
Установить с помощью Докера
Настроить и запустить OCIS с контейнерами Docker легко, хотя все может усложниться, если вы новичок в EOS. Образы Docker для OCIS доступны на Docker Hub. Найдите тег Latest для текущей основной ветки.
Достаточно любой стандартной виртуальной машины от одного из крупных облачных провайдеров или любого сервера начального уровня в центре обработки данных, использующего стандартный дистрибутив Linux, при условии, что в системе установлена среда выполнения контейнера.
Предполагая, что у вас установлен Docker или Podman, команда для запуска OCIS проста:
$ docker run --rm -ti -p 9200:9200 owncloud/ocis
Вот и все! OCIS теперь ждет вас на локальном порту 9200. Откройте веб-браузер и перейдите по адресу http://localhost:9200
, чтобы проверить его.
Демо-аккаунты и пароли: einstein:relativity
, marie:radioactivity
и richard:superfluidity
. Учетные записи администратора: moss:vista
и admin:admin
. Если OCIS работает на сервере с разрешимым именем хоста, он может запросить сертификат SSL у Let's Encrypt с помощью Traefik.
(Мартин Лошвиц, CC BY-SA 4.0)
(Мартин Лошвиц, CC BY-SA 4.0)
Установить с помощью двоичного файла
В качестве альтернативы Docker доступен предварительно скомпилированный двоичный файл. Благодаря Go пользователи могут загружать последние двоичные файлы из ветки Master.
Бинарная версия OCIS предполагает, что /var/tmp/ocis
является местом хранения по умолчанию, но вы можете изменить это в ее конфигурации. Вы можете запустить сервер OCIS с помощью:
$ ./ocis server
Вот некоторые подкоманды, доступные в двоичном файле ocis
:
ocis health
запускает проверку работоспособности. Результат больше 0 указывает на ошибку.ocis list
выводит все запущенные расширения OCIS.ocis run foo
запускает определенное расширение (в данном примереfoo
).ocis kill foo
останавливает определенное расширение (в данном примереfoo
).ocis --help
выводит справочное сообщение.
Репозиторий проекта на GitHub содержит полную документацию.
Настройка EOS (это сложно)
Следование рекомендациям ownCloud по развертыванию OCIS с EOS для больших сред требует некоторых дополнительных шагов. EOS не только добавляет необходимое оборудование и увеличивает сложность всей среды, но и его настройка становится немного более сложной задачей. CERN предоставляет краткую документацию по EOS (ссылку можно найти в репозитории GitHub), а ownCloud предлагает пошаговое руководство.
Короче говоря, пользователям необходимо получить и запустить контейнеры EOS и OCIS; настроить поддержку LDAP; и удалите домашнее хранилище, хранилище пользователей и метаданных, прежде чем запускать их с конфигурацией EOS. И последнее, но не менее важное: службу учетных записей необходимо настроить для работы с EOS. Все эти шаги представляют собой команды «docker-compose», документированные в репозитории GitHub. Страница Storage Backends в EOS также предоставляет информацию о проверке, устранении неполадок и справочник команд для встроенной оболочки EOS.
Взвешивание рисков и выгод
ownCloud Infinite Scale прост в установке, работает быстрее, чем когда-либо прежде, и лучше подготовлен к масштабированию. Модульная конструкция с микросервисами и API (даже для расширений) выглядит многообещающе. ownCloud использует новые технологии и развивается в будущем. Если вы используете ownCloud или подумываете попробовать его, лучшего времени сейчас не было. Имейте в виду, что это все еще предварительная версия технологии, и ее выпуск публикуется каждые три недели, поэтому, пожалуйста, сообщайте о любых обнаруженных ошибках.