Ubun1 / highload_cloud

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Проектирование высоконагруженных систем. Курсовой проект

Попов М.А. АПО-31

1. Тема и целевая аудитория

Облачное хранилище (VK Облако).

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

MVP включает:

  • Загрузка файлов любого формата в хранилище
  • Скачивание файлов из хранилища
  • Просмотр загруженных файлов через веб-интерфейс
  • Предоставление доступа на просмотр файлов третьим лицам

Целевая аудитория ([1]):

  • США - 56 миллионов в месяц
  • Великобритания - 9 миллиона в месяц
  • Япония - 8 миллиона в месяц
  • Германия - 6.5 миллиона в месяц
  • Канада - 6 миллиона в месяц
  • Другие страны - 73.5 миллионов в месяц

2. Расчет нагрузки

Продуктовые метрики

Согласно статистике [1], Dropbox в месяц посещают около 160 миллионов пользователей.
В среднем ежедневно около 5.3 миллиона посещений.

Размер хранилища, доступный при бесплатном использовании, равен 2 Гб.

Пусть около 10% посещений происходит с запросом авторизации, тогда ежедневно выполняется 530 тысяч запросов на авторизацию.
На первой странице сервиса отображается список всех файлов, поэтому будем считать, что каждый десятый хотя бы раз попадает на эту страницу. Пусть таких запросов 60 млн в день.
Согласно статистике [2] за 2016 год в Dropbox ежедневно просматривают порядка 1 200 миллиона файлов. Так как с 2016 года аудитория зарегистрированных пользователей выросла на 200 миллионов [3], возьмём количество загрузок файлов равное 1 700 миллионам.
Загрузка файлов происходит реже - около 500 млн раз в день (с учетом автоматической синхронизации).
Согласно статистике [2] за 2015 год каждый час создается 100 тысяч новых публичных папок и файлов. С 2015 года аудитория Dropbox увеличилась на 300 миллионов зарегистрированных пользователей [3], поэтому будем считать, что каждый час создается 180 тысяч шареных файлов. Тогда в день таких файлов создается порядка 4.4 миллиона.

Среднее количество действий пользователей

Тип запроса Среднее количество (млн/день)
Авторизация 0.53
Просмотр списка файлов 60
Просмотр файлов 1 700
Загрузка файлов 500
Шаринг файла 4.4

Среднее количество действий одного пользователя

Тип запроса Среднее количество (в день)
Авторизация 0.1
Просмотр списка файлов 11
Просмотр файлов 320
Загрузка файлов 94
Шаринг файла 1

Технические метрики

Согласно статистике [3], на текущий момент в Dropbox зарегистрировано 700 млн пользователей, из которых 15.5 млн (~2%) - платные пользователи.

Размер бесплатного хранилища пользователя равен 2 Гб. Примем, что пользователи в среднем занимают 1 Гб в облаке, тогда размер хранилища для бесплатных пользователей равен 684.5 * 10^6 * 1 = 668 457 Тб.

Dropbox предлагает неограниченнный объем хранилища на самой дорогой подписке. Так как нет открытой информации о среднем объеме хранения платных пользователей, возьмем его равным 128 Гб. Тогда размер хранилища для платных пользователей равен 15.5 * 10^6 * 128 = 1 937 500 Тб.

Таким образом, суммарный объем хранилища составляет около 2 600 000 Тб.

Обычно пользователи хранят в облаке фотографии или текстовые документы. Будем считать, что их средний размер 4 Мб.
Считаем, что в пике средняя нагрузка увеличина в 2 раза.

Входящий трафик

Тип запроса Объём 1 запроса (Кб) Суточный объём (Гб/сутки) Пиковое потребление в течении суток (Гбит/с)
Авторизация 1 0.5 0.00009
Загрузка файлов 4096 1 953 125 362
Шаринг файла 1 4.2 0.0008

Входящий трафик в расчете на одного пользователя

Тип запроса Объём 1 запроса (Кб) Суточный объём (Кб/сутки) Пиковое потребление в течении суток (Кбит/с)
Авторизация 1 0.1 0.00002
Загрузка файлов 4096 385 024 71
Шаринг файла 1 1 0.0002

Исходящий трафик

Тип запроса Объём 1 запроса (Кб) Суточный объём (Гб/сутки) Пиковое потребление в течении суток (Гбит/с)
Просмотр списка файлов 512 29 296 5
Просмотр файлов 4096 6 640 625 1 230

Исходящий трафик в расчете на одного пользователя

Тип запроса Объём 1 запроса (Кб) Суточный объём (Кб/сутки) Пиковое потребление в течении суток (Кбит/с)
Просмотр списка файлов 512 5 632 1
Просмотр файлов 4096 1 310 720 243

Количество RPS по типам запросов

Тип запроса RPS
Авторизация 12
Просмотр списка файлов 1 400
Просмотр файлов 40 000
Загрузка файлов 11 600
Шаринг файла 51

3. Логическая схема БД

схема БД

4. Физическая схема БД

Для хранения всех данных будем ииспользовать БД Tarantool, так как она предоставляет быстрый доступ к данным, эффективное сохранение постоянных данных на диск. Кроме того, Tarantool предоставляет возможность вынесения какой-то части логики в application рядом с БД. Также есть поддержка репликация (будем использовать master-slave репликацию).

Users
5 * 64 + 4 + 32 = 356 байт - 1 запись
Зарегистрированных пользователей 700 млн, тогда 356 * 700 * 10^6 / 1024^3 ~ 232 Гб
Индексы по id и email
Subscriptions
4 * 4 + 2 + 2 * 8 + 1 = 35 байт - 1 запись
Платных пользователей 15.5 млн, предположим, что на каждого платного пользоавтеля приходится хотя бы 10 записей о подписке, тогда 35 * 155 * 10^6 / 1024^3 ~ 5 Гб
Индексы по id, user_id, transaction_id и (user_id, transaction_id)
Transactions
2 * 4 + 8 + 2 = 18 байт - 1 запись
Если записей о подписках порядка 155 млн, то предположим, что на каждую подписку приходится хотя бы 2 записи о транзакции, тогда 18 * 310 * 10^6 / 1024^3 ~ 5 Гб
Индекс по id
Binds
2 * 4 + 2 * 32 + 8 = 80 байт - 1 запись
Предположим, что запоминают карту 60% платных пользователей, тогда 80 * 9.3 * 10^6 / 1024^3 ~ 0.7 Гб
Индексы по id и user_id
Documents
2 * 4 + 2 * 64 + 8 = 144 байта - 1 запись
Согласно статистике [2] всего загруженных файлов порядка 400 млрд, тогда 144 * 400 * 10^9 / 1024^4 ~ 52 Тб
Индексы по id, name и path
Versions
5 * 4 + 8 = 28 байт - 1 запись
Предположим, что на каждый документ в среднем приходится по 3 версии, тогда 28 * 1 200 * 10^9 / 1024^4 ~ 30.5 Тб
Индексы по id, user_id, doc_id и (user_id, doc_id)
Weblinks
3 * 4 + 2 = 14 байт - 1 запись
Предположим, что каждый пользователь в среднем делится 50 документами, тогда 14 * 775 * 10^6 / 1024^3 ~ 10 Гб
Индексы по id, user_id, doc_id и (user_id, doc_id)

Для оптимизации работы с БД будем использовать шардирование по регионам. Проверка региона может осуществлятся на основе выставленного языка, либо IP-адреса.

5. Технологии

Технология Применение Причина выбора
TypeScript Язык Frontend Типизация
React Фреймворк Frontend Скорость написания, хорошая поддержка
Nginx Web-server, Reverse proxy Скорость, простая настройка
Golang Язык Backend Скорость, скорость написания, простота поддержки
Tarantool База данных Скорость доступа к данным

6. Схема проекта

схема проекта

Для балансировки применяется DNS-балансировка и далее L7-балансировка на nginx.

auth - сервис авторизации пользователя.
documents - сервис для работы с документами.
payments - сервис для работы с оплатами и подписками.

7. Список серверов

Для распределения нагрузки предлагается создать 3 датацентра:

  • в Северной Америке (Нью-Йорк)
  • в Европе (Франкфурт)
  • в Юго-Восточной Азии (Токио)

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

Доступность данных является критически важной для проекта, поэтому для хранения будет использоваться RAID 10 массив [5,6] из жёстких дисков. Это повысит надёжность благодаря полному дубированию данных, а также скорость обработки из-за распараллеливания операций по дискам.

Количество серверов в датацентре

Тип Количество основных Количество резервных
Nginx 10 4
Backend 6 2
Database 3 + 6 3
Files 81 250 2 000

Конфигурация сервера для Nginx

CPU RAM (Гб) Тип диска Объем диска (Гб) Пропускная способность (Гб/с)
16 32 20

Конфигурация сервера для Backend

CPU RAM (Гб) Тип диска Объем диска (Гб) Пропускная способность (Гб/с)
32 128 SSD 512 Гб 20

Конфигурация сервера для Database

CPU RAM (Гб) Тип диска Объем диска (Тб) Пропускная способность (Гб/с)
32 256 HDD 8 * 4 20

Конфигурация сервера для Files

CPU RAM (Гб) Тип диска Объем диска (Тб) Пропускная способность (Гб/с)
16 32 HDD 8 * 4 10

8. Список литературы

  1. https://www.similarweb.com/ru/website/dropbox.com/#overview
  2. https://expandedramblings.com/index.php/dropbox-statistics/
  3. https://www.wallstreetzen.com/stocks/us/nasdaq/dbx/statistics
  4. https://backlinko.com/dropbox-users
  5. https://saasscout.com/statistics/dropbox-statistics/
  6. https://www.wallstreetzen.com/stocks/us/nasdaq/dbx/statistics
  7. https://altastor.ru/tech/raid/

About