HighLoad Sites, Oleg Bunin

Tags:

Post on 02-Nov-2014

2685 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

Transcript

Разработка высоконагруженных проектов

(например – сайтов для сообществ)

Олег Бунин

Что такое “большой” проект?

• Сотни тысяч, миллионы, десятки миллионов хитов;

• Бесперебойная работа;• Сложная структура: серверный

парк, большое количество кода;

• Большое количество данных.

Масштабиро-вание

Горизонтальное

масштабирование (scaling

out)

Вертикальное масштабирование (scaling

up)

Функциональное

разделение (partitioning)

Шардинг (sharding

)

Общее решение

Горизонтальное масштабирование

Увеличение производительности системы за счет подключения дополнительных cерверов.

Отлично работает для вычисляющих серверов, а как быть с базой данных?

Что делать со связанными общими для нескольких серверов данными?

Вертикальное масштабирование

Увеличение производительности системы за счет увеличения мощности сервера.

В какой-то момент мы все равно достигнем предела по процессору, памяти или жесткому диску.

Функциональное разбиение

Разные функциональные части работают и хранятся на разных серверах системы.

В какой то момент мы все равно упремся в физические возможности сервера.

Шардинг

Разбиение данных на кусочки, которые раскладываются по

серверам-шардам.Как правильно разбить данные для шардинга? Как правильно идентифицировать данные?

У них просто нет выбора:

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

Динамическое: есть координирующий центр, который отвечает на вопрос “где лежит”? Он

же является узким местом, зато добавление новых серверов происходит без

изменения кода.

Как облегчить масштабирование?• Низкая степень связности данных и кода;• Разделение кода на слои (как минимум слой связи с базой данных и слой кэширования);• Рефакторинг, высокое качество кода, минимизация workaround’ов;• Контроль над системой, мониторинг;• Минимизация академических решений (построение таблиц “на лету”, ORM).

Масштабируем

аяархитек

тура

Слабосвязанная

Слоистая

Горизонтальное

масштабирование

Асинхронные

вычисления

Серебряная пуля

Отдельно о базах данныхБаза данных – типичное узкое место. Для базы

данных актуальны все вышеперечисленные

методы увеличения производительности:

горизонтальное и вертикальное масштабирование, функциональное разбиение, шардинг.

Горизонтальное масштабирование в случае с БД достигается с помощью репликации.

РепликацияСинхронизация нескольких копий объекта.

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

Типичная архитектура: обычный сайт

Frontend

Design images

nginx memcached

DNS-БалансингDNS-Балансинг

Image Server / 2

User images

nginx Backend / 1

PHP

Backend / 2

PHP

Backend / 3

PHP

Демоны

Database / 1

MySQL

Database / 2

MySQL для блогов

Image Server / 1

User images

nginx

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

Высокий hit ratio большое количество серверов.

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

oleg.bunin@ontico.ru

top related