Этот проект представляет собой распределённую систему хранения множества мелких файлов, созданную с использованием Java. Она включает в себя такие функции как загрузка файлов, скачивание файлов, хранение файлов и решает различные проблемы производительности при хранении и доступе к большому объёму маленьких файлов.
Сеть системы хранения мелких файлов была реализована довольно хаотично изначально. Это было вызвано необходимостью демонстрации различных методов использования технологий и показа самых базовых уровней разработки. Поэтому в учебных целях были использованы два подхода — native NIO и gRPC.
Однако при выборе технологии мы решили унифицировать методы сетевых запросов, используя Netty как единую платформу для сетевой связи. Изменения до и после представлены на следующих диаграммах:
Внутри кластера существует несколько сценариев передачи файлов, таких как загрузка и скачивание файлов между клиентами и DataNodes, а также передача FsImage между BackupNode и NameNode. Для этих целей был разработан протокол передачи файлов. Сетевые пакеты передачи файлов включают тип пакета, метаданные файла, двоичные данные содержимого файла, как показано ниже:
Как показано на следующей диаграмме, при отправке запроса, если ответ сервера слишком велик (превышает максимальную длину сообщения), его можно разделить на n меньших пакетов для передачи через NetClient. При получении всех пакетов NetClient использует определённый механизм для проверки полноты всего пакета. После получения всех пакетов они объединяются в один пакет, который затем возвращается пользователю.
## Федеральная архитектура NameNode
Чтобы решить проблему увеличения потребления оперативной памяти при работе с большими объемами мелких файлов, была создана федеральная архитектура NameNode. Кратко говоря, это архитектура, которая состоит из нескольких узлов NameNode, каждый из которых хранит часть дерева каталогов всей системы.
## Оффлайн параметры производительности воспроизведения
https://space.bilibili.com/478364560/channel/seriesdetail?sid=453116
Этот репозиторий содержит саморазработанный распределённый файловый систему малых файлов "Ruyuan", авторское право принадлежит компании "Ruyuan Technology Nest". За нарушение авторских прав будут применены меры.
Исходный код использует протокол PB как фреймворк сериализации данных, поэтому после загрузки кода вам потребуется выполнить следующие команды для генерации файлов сериализации PB:
cd ruyuan-dfs/ruyuan-dfs-common
mvn protobuf:compile && mvn install
```> Внимание: если ваш компьютер оснащен процессором Apple M1, то компиляция PB может завершиться ошибкой. Эту проблему можно решить путем конфигурации использования архитектуры x86, что подробно описано ниже:- Метод 1: Добавьте следующий код в файл pom.xml модуля ruayun-dfs-common:
```xml
<properties>
<os.detected.classifier>osx-x86_64</os.detected.classifier>
</properties>
<profile>
<id>apple-silicon</id>
<properties>
<os.detected.classifier>osx-x86_64</os.detected.classifier>
</properties>
</profile>
<activeProfiles>
<activeProfile>default</activeProfile>
<activeProfile>apple-silicon</activeProfile>
<!-- ваши другие профили -->
</activeProfiles>
Откройте конфигурационный файл NameNode, который находится в папке conf корневого каталога проекта. В этом файле namenode.properties есть строки, которые нужно изменить:
base.dir=/srv/ruyuan-dfs/namenode # Измените на путь к вашему локальному компьютеру
Запуск осуществляется через класс com.ruyuan.dfs.namenode.NameNode
модуля ruyuan-dfs-namenode
. Вы можете запустить его main метод, но обычно первый запуск будет неудачным и вы получите сообщение об ошибке. Для успешного запуска программы вам необходимо выполнить некоторые конфигурации. Нажмите на выпадающее меню слева от кнопки запуска в верхнем правом углу IDEA. Выберите Edit Configurations..., в открывшемся окне вам потребуется настроить несколько параметров:
Основное внимание обратите на два красных прямоугольника ниже. Нужно настроить один JVM параметр
-Dlogback.configurationFile=conf/logback-namenode.xml
для указания файла конфигурации Logback,
далее добавьте один Program argument conf/namenode.properties
, чтобы указать файл конфигурации NameNode. После этого можно будет запустить программу.### Запуск BackupNode
Устройство BackupNode уже интегрировано с NameNode в одном модуле, класс запуска — com.ruyuan.dfs.backup.BackupNode
. Аналогично, BackupNode также требует изменения файлов конфигурации и параметров запуска:
Необходимо изменить свойство base.dir на путь к одной директории на вашей машине, остальные свойства остаются без изменений. Настройте параметры запуска следующим образом:
Измените значение параметра base.dir в файле конфигурации conf/datanode.properties
на путь к одной директории на вашей машине.
Важно отметить, что если вы планируете запуск нескольких узлов DataNode, вам потребуется изменить значения в файлах конфигурации. Убедитесь, что каждому узлу присвоено уникальное значение datanode.id, каждый узел имеет свою уникальную директорию base.dir, чтобы избежать конфликтов хранения файлов. Также порты datanode.http.server и datanode.transport.server должны быть уникальными для каждого узла, чтобы избежать конфликта портов. Кроме того, имя хоста должно быть уникальным для каждого узла, чтобы избежать путаницы при регистрации узлов. Это важно, так как NameNode использует hostname для идентификации каждого узла DataNode. Можно настроить файл hosts следующим образом:``` 127.0.0.1 datanode01 127.0.0.1 datanode02 127.0.0.1 datanode03
Настройте параметры запуска следующим образом:

### Запуск клиентских юнит-тестов
Если все вышеупомянутые узлы были успешно запущены, вы можете начать выполнять юнит-тесты. Однако перед тем как запустить тесты, необходимо создать пользователя.
Запустите следующую команду для создания пользователя:
curl -H "Content-Type: application/json" -X POST -d '{"username": "admin", "secret": "admin"}' "http://localhost:8081/api/user"
### Выполнение юнит-тестов
Далее можно выполнить юнит-тесты, открыть папку test модуля ruyuan-dfs-client и просмотреть тестовый класс: `com.ruyuan.dfs.client.FileSystemTest`, после чего запустить его:

Нажатием этой кнопки будут выполнены все тестовые сценарии, включая загрузку файла, скачивание файла, создание директорий и другие сценарии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )