Слайд 2Что такое “большой” проект?
Сотни тысяч, миллионы, десятки миллионов хитов;
Бесперебойная работа;
Сложная структура: серверный
![Что такое “большой” проект? Сотни тысяч, миллионы, десятки миллионов хитов; Бесперебойная работа;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-1.jpg)
парк, большое количество кода;
Большое количество данных.
Слайд 4Горизонтальное масштабирование
Увеличение производительности системы за счет подключения дополнительных cерверов.
Отлично работает для вычисляющих
![Горизонтальное масштабирование Увеличение производительности системы за счет подключения дополнительных cерверов. Отлично работает](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-3.jpg)
серверов, а как быть с базой данных?
Что делать со связанными общими для нескольких серверов данными?
Слайд 5Вертикальное масштабирование
Увеличение производительности системы за счет увеличения мощности сервера.
В какой-то момент мы
![Вертикальное масштабирование Увеличение производительности системы за счет увеличения мощности сервера. В какой-то](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-4.jpg)
все равно достигнем предела по процессору, памяти или жесткому диску.
Слайд 6Функциональное разбиение
Разные функциональные части работают и хранятся на разных серверах системы.
В какой
![Функциональное разбиение Разные функциональные части работают и хранятся на разных серверах системы.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-5.jpg)
то момент мы все равно упремся в физические возможности сервера.
Слайд 7Шардинг
Разбиение данных на кусочки, которые раскладываются по серверам-шардам.
Как правильно разбить данные для
![Шардинг Разбиение данных на кусочки, которые раскладываются по серверам-шардам. Как правильно разбить](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-6.jpg)
шардинга? Как правильно идентифицировать данные?
У них просто нет выбора:
Слайд 8Разбиение данных для шардинга
Статическое: по первой букве логина, хэширование идентификаторов или логинов.
![Разбиение данных для шардинга Статическое: по первой букве логина, хэширование идентификаторов или](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-7.jpg)
Единого центра нет, соответственно нет узкого места, зато есть сложности с разрешением заранее непредусмотренных ситуаций.
Динамическое: есть координирующий центр, который отвечает на вопрос “где лежит”? Он же является узким местом, зато добавление новых серверов происходит без изменения кода.
Слайд 9Как облегчить масштабирование?
Низкая степень связности данных и кода;
Разделение кода на
![Как облегчить масштабирование? Низкая степень связности данных и кода; Разделение кода на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-8.jpg)
слои (как минимум слой связи с базой данных и слой кэширования);
Рефакторинг, высокое качество кода, минимизация workaround’ов;
Контроль над системой, мониторинг;
Минимизация академических решений (построение таблиц “на лету”, ORM).
Слайд 11Отдельно о базах данных
База данных – типичное узкое место. Для базы данных
![Отдельно о базах данных База данных – типичное узкое место. Для базы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-10.jpg)
актуальны все вышеперечисленные методы увеличения производительности: горизонтальное и вертикальное масштабирование, функциональное разбиение, шардинг.
Горизонтальное масштабирование в случае с БД достигается с помощью репликации.
Слайд 12Репликация
Синхронизация нескольких копий объекта.
Наиболее эффективна при небольшом количестве слейвов, иначе усложняется схема
![Репликация Синхронизация нескольких копий объекта. Наиболее эффективна при небольшом количестве слейвов, иначе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-11.jpg)
распространения изменений, которое, в дальнейшем, становится узким местом.
Усложнение программной архитектуры – например, чтение данных с слейва, до которого не докатились изменения.
Слайд 13Типичная архитектура: обычный сайт
![Типичная архитектура: обычный сайт](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-12.jpg)
Слайд 14Специфика сообществ
Большое количество связей между объектами ? сложная программная архитектура.
Высокий hit ratio
![Специфика сообществ Большое количество связей между объектами ? сложная программная архитектура. Высокий](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388395/slide-13.jpg)
? большое количество серверов.
Наличие сложных сервисов, реализуемых отдельными алгоритмами (поиск, сортировка, переписка, друзья друзей).