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