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

HighLoad Sites, Oleg Bunin

Nov 02, 2014

Download

Technology

Ontico

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 большое количество серверов.

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