1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/suzhou-mopdila-information-ruyuan-dfs

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение

Этот проект представляет собой распределённую систему хранения множества мелких файлов, созданную с использованием Java. Она включает в себя такие функции как загрузка файлов, скачивание файлов, хранение файлов и решает различные проблемы производительности при хранении и доступе к большому объёму маленьких файлов.

Добавьте WeChat для получения больше бесплатных материалов

Основные характеристики и архитектурное проектирование

  • Обновление сети
  • Улучшение основной логики
  • Высокоуровневый архитектурный дизайн с использованием BackupNode + NameNode (механизм резервного копирования)
  • Федеральная архитектура NameNode

Производственная архитектурная структура

Обновление сети

Сеть системы хранения мелких файлов была реализована довольно хаотично изначально. Это было вызвано необходимостью демонстрации различных методов использования технологий и показа самых базовых уровней разработки. Поэтому в учебных целях были использованы два подхода — native NIO и gRPC.

Однако при выборе технологии мы решили унифицировать методы сетевых запросов, используя Netty как единую платформу для сетевой связи. Изменения до и после представлены на следующих диаграммах:

Протокол передачи файлов

Внутри кластера существует несколько сценариев передачи файлов, таких как загрузка и скачивание файлов между клиентами и DataNodes, а также передача FsImage между BackupNode и NameNode. Для этих целей был разработан протокол передачи файлов. Сетевые пакеты передачи файлов включают тип пакета, метаданные файла, двоичные данные содержимого файла, как показано ниже:

Проектирование блочной передачи данных

Как показано на следующей диаграмме, при отправке запроса, если ответ сервера слишком велик (превышает максимальную длину сообщения), его можно разделить на n меньших пакетов для передачи через NetClient. При получении всех пакетов NetClient использует определённый механизм для проверки полноты всего пакета. После получения всех пакетов они объединяются в один пакет, который затем возвращается пользователю.

## Федеральная архитектура NameNode Чтобы решить проблему увеличения потребления оперативной памяти при работе с большими объемами мелких файлов, была создана федеральная архитектура NameNode. Кратко говоря, это архитектура, которая состоит из нескольких узлов NameNode, каждый из которых хранит часть дерева каталогов всей системы.## Оффлайн параметры производительности воспроизведения

Анализ проблем в рабочей среде

  • OOMKiller убивает Spring Boot приложение под нагрузкой
  • Проблема пропускной способности сети, вызывающая превышение времени отклика запросов
  • Неравномерное распределение трафика между DataNodes
  • Проблема с высокой частотой запущенных потоков, вызывающая работу процессора на 100%
  • Выбор между пропускной способностью и согласованностью при загрузке файлов NameNode
  • Как оптимизировать снижение пропускной способности из-за записи на диск

Обучающие видео проекта

https://space.bilibili.com/478364560/channel/seriesdetail?sid=453116

Авторские права

Этот репозиторий содержит саморазработанный распределённый файловый систему малых файлов "Ruyuan", авторское право принадлежит компании "Ruyuan Technology Nest". За нарушение авторских прав будут применены меры.

Официальный сайт

www.ruyuan2020.com

Компиляция & запуск

Исходный код использует протокол 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>
  • Метод 2: Глобальная конфигурация Maven, не требующая изменения кода. Добавьте следующий код в файл settings.xml вашего Maven (обычно находится в ~/.m2/settings.xml):
<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

Откройте конфигурационный файл 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 на путь к одной директории на вашей машине, остальные свойства остаются без изменений. Настройте параметры запуска следующим образом:

Запуск DataNode

Измените значение параметра 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


Настройте параметры запуска следующим образом:

![](img/step5.png#id=Gqbhp&originalType=binary&ratio=1&status=done&style=none)

### Запуск клиентских юнит-тестов

Если все вышеупомянутые узлы были успешно запущены, вы можете начать выполнять юнит-тесты. Однако перед тем как запустить тесты, необходимо создать пользователя.

Запустите следующую команду для создания пользователя:

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`, после чего запустить его:

![](img/step6.png#id=jgs9d&originalType=binary&ratio=1&status=done&style=none)

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

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/suzhou-mopdila-information-ruyuan-dfs.git
git@api.gitlife.ru:oschina-mirror/suzhou-mopdila-information-ruyuan-dfs.git
oschina-mirror
suzhou-mopdila-information-ruyuan-dfs
suzhou-mopdila-information-ruyuan-dfs
master