Я слышал, что ты умеешь проектировать архитектуру? Давай, возьми сетевую дисковую систему
Я слышал, что ты умеешь проектировать архитектуру? Давай, возьми сетевую дисковую систему

1. Введение

1.1 Мелодия молодости

Привет всем, я Сяо ❤, 985-ненаучный программист, который много лет скитается по миру. Я работал в сфере backend-разработки государственных предприятий, интернет-гигантов и стартап-компаний.

Сяо❤ недавно обнаружил, что многие певцы, которые мне нравились в средней и старшей школе, начали взимать плату за свои песни на крупных музыкальных библиотеках.

Например, мне раньше нравился музыкальный талант VAE, будь то карниз небольшого мостика под ночной Цзяннань, или ресторанчик в глуши с ярким фейерверком, мешающим посетителям спать, или потрясающая сторона, где фиолетовый дым ароматно витает и выглядит как тень.

Эти трогательные мелодии вдруг задержатся в моей памяти в сумерках после сна или утром после сильного дождя и долго не смогут уйти.

Не знаю, скучаю ли я по людям, с которыми раньше слушал песни, или по воспоминаниям юности.

1.2 Прекрасное использование сетевого диска

Независимо от того, пропустите вы это или нет, песню вам придется послушать, а пополнить членство невозможно 🐶

Итак, будучи умным (pinqiong), я начал искать бесплатные ресурсы на основных платформах. Я должен сказать, что Интернет — действительно великое изобретение. Пока есть электричество и доступ к Интернету, не существует ресурсов, которые нельзя было бы найти.

Особенно хороша система сетевых дисков при совместном использовании ресурсов!

PS: Если вам нравятся песни VAE, вы можете бесплатно получить ресурсы песен с сетевого диска в конце статьи. Не стесняйтесь забрать их себе.

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

Но вам когда-нибудь было интересно, какая конструкция системы поддерживает эти функции? Сегодня мы обсудим архитектурный проект сетевой дисковой системы.

2. Сетевая дисковая система.

Baidu Netdisk — это популярное облачное хранилище и платформа для обмена файлами с более чем 800 миллионами пользователей и емкостью хранилища до 10 Вт+ПБ.

В этой статье мы углубимся в основные функции системы Baidu Netdisk и способы решения проблем, которые могут возникнуть из-за высокого уровня параллелизма и большого объема хранилища.

2.1 Обзор архитектуры

Системная конструкция Baidu Netdisk использует распределенную архитектуру, позволяющую справиться с огромным количеством пользователей и огромными потребностями в хранении данных. Основные компоненты включают в себя:

  1. Клиентский уровень: используется для получения и распределения пользовательских запросов с разных устройств, разделения и сборки файловых ресурсов, а также непосредственного взаимодействия с серверными службами.
  2. Микросервисы приложений: обрабатывают основную бизнес-логику, такую ​​как загрузка файлов, обмен файлами, контроль разрешений, ограничение скорости VIP и т. д.
  3. Система реляционной базы данных: используется для постоянного хранения пользовательских файлов и метаданных, а также базовой информации, такой как права пользователя.
  4. Очередь сообщений: асинхронное ограничение и разделение пиков повышает производительность записи и снижает нагрузку на базу данных и частый обмен данными между приложениями.
  5. Центр регистрации и кеш: узел приложения регулярно сообщает узел IP + порт сервера в центр регистрации, чтобы другие серверы могли обращаться к нему в режиме реального времени. В кэше может храниться информация аутентификации, такая как токен или данные точки доступа приложения.
  6. Распределенная файловая система: используется для хранения неструктурированных файлов, таких как изображения, аудио, видео и другие данные, с высокой эффективностью хранения и хорошей масштабируемостью.

Задача 2,2 миллиарда пользователей

В системах хранения, таких как сетевые диски, каждый день генерируется и передается большой объем данных.

На примере Baidu Netdisk к концу 2022 года количество пользователей превысило 800 миллионов, а емкость хранилища уже превысила 100 000+ПБ (т.е. 1000+100 миллионов ГБ).

Таким образом, проектирование сетевой дисковой системы сталкивается со следующими проблемами.

Большая емкость хранения

В настоящее время у Baidu Netdisk более 800 миллионов пользователей. Максимальная емкость хранилища для обычных пользователей составляет 1 ТБ. Емкость хранилища рассчитывается как 100 миллиардов ГБ. Средний объем хранилища составляет почти 100+ ГБ [1000 ГБ/8]. Использование Ставка составляет 10%.

Высокая пропускная способность

Если принять ежедневный активный объем Baidu Netdisk равным 200 миллионам, то ежедневные активные пользователи составляют около 25%, и каждый пользователь обращается к Netdisk в среднем 4 раза.

Таким образом, количество запросов в секунду сетевой дисковой системы составляет около 10 000 [200 миллионов пользователей*4 раза/(24*3600 секунд)], а пиковый период в два раза превышает среднее количество запросов в секунду, которое составляет 20 000.

пропускная способность сети

Предположим, что средний размер файла, последний раз загруженного пользователем,равен 2MB,пропускная способность сетинагрузкаок. 18 ГБ/с (200 миллионов*4*2М/(24*3600*1024Г)), то есть 144 Гбит/с. Пиковая пропускная способность трафика примерно средняя. 2 раз, примерно 288Gb/s。

2.3 Функциональные требования

Общие функции включают в себя следующее:

  1. Помогите пользователям зарегистрироваться и войти на сетевой диск, активировать VIP и аннулировать свои учетные записи.
  2. Загружайте файлы, скачивайте файлы.
  3. Добавляйте друзей и делитесь файлами между друзьями.
  4. Добавляйте, изменяйте и удаляйте каталоги хранения.
  5. Переименуйте данные файла или удалите ненужные файлы.
  6. Разрешить отправку файлов друзьям или проводить Обмен ссылками файл незнакомым людям.

2.4 Нефункциональные требования

Разработанная в настоящее время сетевая дисковая система должна отвечать следующим требованиям:

  1. Огромное хранилище данных: 800 миллионов зарегистрированных пользователей, около 25% активных пользователей, 100 миллионов ТБ пространства.
  2. Высокий уровень одновременного доступа: в среднем 10 000 запросов в секунду, пиковый период 20 000 запросов в секунду.
  3. большой трафикнагрузка:среднийпропускная способность сети 144 Гбит/с, пиковый период 280Gb/s。
  4. Высоконадежное хранилище: файлы не могут быть потеряны, а надежность постоянного хранилища достигает 6 девяток, то есть из 1 миллиона файлов будет потерян или поврежден максимум 1 файл.
  5. Служба высокой доступности: пользователи могут загружать в обычном режиме, а доступность функции загрузки составляет 4 девятки, то есть она недоступна до 53 минут (365*24*60*0,0001) в год.
  6. Контроль разрешений: файлы должны храниться изолированно, за исключением файлов пользователя и общих файлов, другие файлы не могут быть просмотрены другими.

3. Основные функции

3.1 Загрузка и скачивание файлов

Загрузка файла

Пользователь может загрузить файлы с клиента сетевого диска или через веб-интерфейс.,После того, как запрос на загрузку проходит через уровень клиентского приложения,Для обеспечения надежности Загрузка больших файлов,В зависимости от размера файла мы можем,Загружайте файлы частями.

Затем клиент вызывает микросервис приложения для обработки основных данных файла (метаданных) и содержимого файла и асинхронно загружает метаданные и данные содержимого файла соответственно.

Загрузка файла

Когда пользователь запрашивает загрузку файла, клиентский уровень отправляет запрос микросервису приложения.

Чтобы увеличить скорость загрузки, фрагменты файлов можно одновременно загружать с сервера, затем собирать на клиенте и возвращать на пользовательское устройство.

3.2 Обмен файлами

Поделитесь с друзьями

Пользователи могут делиться файлами или папками с друзьями. При совместном использовании они могут указать разрешения только для чтения или хранения для друзей, а также указать ограничение по времени для обмена файлами.

  • Разрешение только для чтения. Когда друзья получают разрешение на общий доступ только для чтения, они могут только просматривать содержимое файла или папки и не могут сохранять, изменять или удалять файл.
  • Разрешения на передачу: после того, как друзья получат общий доступ к файлам с разрешениями на хранение, они смогут перенести файлы в свое собственное хранилище в течение установленного срока и снова поделиться файлами.
Обмен ссылками

Пользователи могут перемещать файлы и папки в ссылкамивыходить,проходитьОбмен ссылкамииз Разрешения По умолчанию — передача Разрешения,Область общего доступа может быть общедоступной, частной или ограничена определенными пользователями.

  • Общедоступная область: любой может получить доступ к файлу или папке и перенести файл в свое собственное хранилище.
  • Частная область: создайте ссылку для открытия файла, доступ к которой сможет получить только пользователь.
  • Конкретная область пользователя: разрешите друзьям пользователя или укажите возможность поделиться с кем-либо. Когда другие люди откроют ссылку, будет показано, что у них нет разрешения на доступ.

4. Детальный проект

4.1 Хранение файлов и управление метаданными

Отдельное хранилище

Потому что реляционные базы данных, такие как MySQL, не подходят для хранения больших файлов данных, а файловые системы, такие как HDFS и Ceph, очень медленны при запросе данных.

Поэтому мы разделяем данные файла на метаданные и содержимое файла и храним их отдельно, где:

  • Метаданные: включают в себя базовую информацию, такую ​​как владелец файла, права доступа к файлу, тип файла, информацию о совместном использовании и т. д., хранящуюся в реляционной базе данных MySQL.
  • Содержимое файла: Сохраните конкретную информацию файла, такую ​​как изображения, аудио, видео и другие мультимедийные данные, в службе хранения объектов, такой как сервер распределенного хранения объектов Ceph.

Отвечающая за ответ на запросы метаданных и содержимого файлов, она также разделена на две системы: управление метаданными файлов (FMM) и управление содержимым файлов (FCM).

Схема архитектуры выглядит следующим образом:

Поскольку пользовательские файлы могут включать в себя большие файлы, такие как видео и аудио, Ceph не подходит для хранения больших файлов, поэтому мы разделяем содержимое загруженного файла и разделяем большой файл на множество маленьких блоков (блоков), чтобы лучше загружать и скачивать большие файлы документа. .

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

Загрузка файла

Временная диаграмма Загрузки файла выглядит следующим образом:

После того, как пользователь загружает файл, клиентское приложение делит файл на блоки в соответствии с размером файла, загружаемого пользователем. Предполагается, что блок генерируется каждые 8M, а затем загружается информация о значении MD5, соответствующая блоку. в систему управления метаданными (FMM).

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

Затем FMM генерирует токен доступа и возвращает его клиенту вместе со списком BlockId и списком доступных серверов FMM.

Когда клиент получает ответ от FMM, он сравнивает значение MD5, чтобы определить, какую информацию о блоке файла необходимо загрузить. Затем вместе с токеном, идентификатором блока файлов и содержимым блока файлов, которые необходимо загрузить, они одновременно передаются в каждый доступный узел FMM, а реальные блоки файлов сохраняются в системе хранения объектов Ceph.

Когда клиент запрашивает FCM со списком идентификаторов блоков, чтобы гарантировать, что идентификатор блока поступает из FMM и не подделывается пользователем, обычно FCM необходимо снова вызвать FMM для аутентификации пользователя.

Однако ради общей простоты архитектуры мы используем кэш-токен вместо внутренних вызовов API. С одной стороны, это уменьшает взаимодействие с системой, а с другой — повышает общую скорость ответа.

Загрузка файла

Временная диаграмма Загрузки файла выглядит следующим образом:

Когда пользователь загружает файл, клиент передает имя файла, пользователя и другую информацию для получения метаданных файла, полученных FMM.

Затем сервер FMM запрашивает список файлов BlockId соответствующего пользователя из MySQL, получает доступный список серверов FMM из ZK, генерирует токен доступа из Redis, а затем возвращает его клиенту.

Клиент одновременно вызывает сервер FCM для загрузки блока файла на основе списка серверов FCM и информации списка блоков ответов. Когда все блоки файлов загружены, клиент собирает блок файлов в полный файл и возвращает его на пользовательское устройство.

дизайн стола

  1. Таблица пользователей: записывает ключевую информацию о пользователе, идентификатор, имя пользователя, номер мобильного телефона, используемое пространство, тип пользователя (VIP, гражданский) и т. д.
  2. Таблица файлов: записывает информацию метаданных файла и сохраняет древовидную структуру файла, включая идентификатор файла, имя, пользователя, идентификатор родительского файла, количество дочерних файлов, время создания, размер файла и т. д.
  3. Таблица File_block: записывает конкретную информацию о блоке файла, идентификаторе, идентификаторе файла, значении MD5 блока файла и т. д.

Ограничение скорости загрузки и скачивания

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

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

Конкретная реализация такова: когда клиент запрашивает систему FMM для выполнения задачи загрузки или выгрузки, мы сначала получаем тип пользователя. Если это гражданский пользователь, мы можем соответствующим образом уменьшить количество серверов при возврате списка. Узлы FCM, доступные клиенту.

Например, VIP-пользователи могут использовать 50 серверов для загрузки и скачивания одновременно, в то время как обычным пользователям выделяется только 5 серверов для загрузки и скачивания файлов.

4.2 Общий доступ к файлам

Контроль разрешений RBAC

Поскольку статус совместного использования файлов на сетевых дисках можно изменять в режиме реального времени, мы используем идею RBAC (Role-Based Access Control) для управления разрешениями пользователей на доступ к файлам.

Разрешения Связанныйиздизайн столаследующее:

  1. Таблица пользователей: хранит информацию о системном пользователе, такую ​​же, как указано выше, включая идентификатор пользователя, имя пользователя и т. д.
  2. Таблица ролей: определяет роли в системе. Каждая роль включает идентификатор роли, имя роли и т. д. Общие роли включают суперадминистратора, обычного пользователя, друга, пользователя только для чтения, пользователя с ограниченными правами и т. д.
  3. Таблица UserRole: установите связь между пользователями и ролями, запишите, какие пользователи имеют какие роли, включая идентификатор пользователя и идентификатор роли.
  4. Таблица файлов: представляет информацию о метаданных файла в системе, такую ​​же, как указано выше, включая идентификатор файла, имя файла и т. д.
  5. Таблица разрешений: определяет разрешения роли на ресурсы, включая идентификатор разрешения, идентификатор роли, идентификатор пользователя, идентификатор файла, срок действия и т. д.

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

Делитесь файлами с друзьями

Понятно RBAC Приходите за контролем разрешений, регистрируем аккаунт и загружаем файлы в Поделитесь с Бизнес-процесс друзей выглядит следующим образом:

  1. Регистрация пользователя и вход:
    • Назначайте роли пользователям и вставляйте соответствующие записи в таблицу UserRole. Изначально это обычные роли пользователей, которые могут загружать, загружать, делиться и управлять своими файлами.
    • Пользователи создают учетные записи с помощью функции регистрации, и их информация сохраняется в таблице «Пользователи».
  2. Создавайте и делитесь файлами:
    • Пользователи могут создавать файлы и папки, а информация об этих ресурсах хранится в таблице «Файл».
    • Когда пользователи хотят поделиться файлами, они могут указать объекты общего доступа (другие пользователи или друзья) и предоставить права доступа к файлам.
  3. Назначение разрешения:
    • Владелец файла предоставляет разрешения конкретному другу, вставляя идентификатор пользователя друга, назначенную ему роль и соответствующий идентификатор файла в таблицу разрешений.
    • Например, роль «Владелец файла» может иметь полный доступ, роль «Друг» может иметь разрешения на передачу и продолжение общего доступа, а роль «Только чтение» может иметь только разрешения на доступ.
  4. Доступ к файлу:
    • Когда пользователь пытается получить доступ к файлу, система проверит права роли пользователя [чтобы определить, является ли пользователь пользователем-нарушителем или пользователем с ограниченными правами], а также разрешения, связанные с файлом.
    • Пользователю разрешен доступ к файлу, если роль пользователя имеет определенные разрешения для файла (например, разрешения на чтение или запись).

Обмен ссылками

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

Язык кода:javascript
копировать
insert into permission (file_id, role_id, user_id) values («Идентификатор общего файла», «Идентификатор публичной роли», NULL)

Таким образом, когда пользователь обращается к файлу, определяется, что разрешение файла является общедоступным, и к общему файлу можно получить доступ или передать его.

Восстановление разрешения

Когда владелец или администратор ресурса решает отозвать разрешения пользователя или роли на ресурсе, система удалит соответствующие записи разрешений.

Конкретная реализация находится в Permission В таблицу добавляется индивидуальное поле срока действия, когда пользователь делится файлом с другом или создает Обмен. ссылками, вам необходимо установить конкретный срок действия.

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

Если вы установили бессрочный доступ к ссылке, вы можете установить срок действия на определенный момент времени в прошлом.

Удаление файла

Когда пользователь удаляет файл, нам сначала нужно получить список заблокированных файлов через интерфейс FMM, затем удалить информацию метаданных, чтобы освободить место для хранения пользователя, и в то же время передать список заблокированных удаленных файлов в FCM через очередь сообщений. чтобы удалить содержимое файла.

Чтобы обеспечить согласованность транзакций элементов файла и содержимого файла,Мы используем распределенные транзакцииизуведомление о лучших усилияхМысль。

Конкретная реализация: Добавление системы мониторинга и сигнализации. Если содержимое файла не удается удалить, администратор может быть уведомлен по SMS или электронной почте, чтобы он вручную обработал рассинхронизированные данные.

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

Студенты, которые не понимают распределение и конечную согласованность, могут прочитать мою предыдущую статью.,Объясните простыми словами: теория распределения, CAP и BASE.

5. Резюме

В настоящее время рынок Интернета является высококонкурентным, и сфера сетевых дисков не является исключением.

В Китае существует множество поставщиков сетевых дисков, таких как Baidu Cloud Disk, Tencent Weiyun, 360 Cloud Disk и т. д., но Baidu Cloud Disk по-прежнему остается единственным поставщиком с долей рынка более 80%.

Источник данных: Сеть отчетов Гуаньян.

в настоящий момент,индивидуальный Болевые точки использования Rennetdisk сосредоточены вСкорость, безопасность, совместное использованиеиценаЧетыреиндивидуальныйуровень。Качественный сервис для пользователейи Плата за опытиз Значительное увеличение готовности,Так сделай это хорошоУправление и монетизация VIP-платных участников,Это стало основным направлением коммерциализации личности.

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

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose