highload sites, oleg bunin

15
Разработка высоконагруженных проектов (например – сайтов для сообществ) Олег Бунин

Upload: ontico

Post on 02-Nov-2014

2.717 views

Category:

Technology


0 download

Tags:

DESCRIPTION

 

TRANSCRIPT

Page 1: HighLoad Sites, Oleg Bunin

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

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

Олег Бунин

Page 2: HighLoad Sites, Oleg Bunin

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

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

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

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

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

Page 3: HighLoad Sites, Oleg Bunin

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

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

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

out)

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

up)

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

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

Шардинг (sharding

)

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

Page 4: HighLoad Sites, Oleg Bunin

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

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

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

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

Page 5: HighLoad Sites, Oleg Bunin

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

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

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

Page 6: HighLoad Sites, Oleg Bunin

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

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

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

Page 7: HighLoad Sites, Oleg Bunin

Шардинг

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

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

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

Page 8: HighLoad Sites, Oleg Bunin

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

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

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

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

Page 9: HighLoad Sites, Oleg Bunin

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

Page 10: HighLoad Sites, Oleg Bunin

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

аяархитек

тура

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

Слоистая

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

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

Асинхронные

вычисления

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

Page 11: HighLoad Sites, Oleg Bunin

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

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

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

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

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

Page 12: HighLoad Sites, Oleg Bunin

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

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

Page 13: HighLoad Sites, Oleg Bunin

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

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

Page 14: HighLoad Sites, Oleg Bunin

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

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

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