Successfully reported this slideshow.

HighLoad Sites, Oleg Bunin

2,035 views

Published on

Published in: Technology
  • Be the first to comment

HighLoad Sites, Oleg Bunin

  1. 1. Разработка высоконагруженных проектов (например – сайтов для сообществ) Олег Бунин
  2. 2. Что такое “большой” проект? • Сотни тысяч, миллионы, десятки миллионов хитов; • Бесперебойная работа; • Сложная структура: серверный парк, большое количество кода; • Большое количество данных.
  3. 3. Общее решение Горизонтальное масштабирование (scaling out) Масштабиро- Вертикальное Шардинг масштабирование (sharding) вание (scaling up) Функциональное разделение (partitioning)
  4. 4. Горизонтальное масштабирование Увеличение производительности системы за счет подключения дополнительных cерверов. Отлично работает для вычисляющих серверов, а как быть с базой данных? Что делать со связанными общими для нескольких серверов данными?
  5. 5. Вертикальное масштабирование Увеличение производительности системы за счет увеличения мощности сервера. В какой-то момент мы все равно достигнем предела по процессору, памяти или жесткому диску.
  6. 6. Функциональное разбиение Разные функциональные части работают и хранятся на разных серверах системы. В какой то момент мы все равно упремся в физические возможности сервера.
  7. 7. Шардинг Разбиение данных на кусочки, которые раскладываются по серверам-шардам. Как правильно разбить данные для шардинга? Как правильно идентифицировать данные? У них просто нет выбора:
  8. 8. Разбиение данных для шардинга Статическое: по первой букве логина, хэширование идентификаторов или логинов. Единого центра нет, соответственно нет узкого места, зато есть сложности с разрешением заранее непредусмотренных ситуаций. Динамическое: есть координирующий центр, который отвечает на вопрос “где лежит”? Он же является узким местом, зато добавление новых серверов происходит без изменения кода.
  9. 9. Как облегчить масштабирование? • Низкая степень связности данных и кода; • Разделение кода на слои (как минимум слой связи с базой данных и слой кэширования); • Рефакторинг, высокое качество кода, минимизация workaround’ов; • Контроль над системой, мониторинг; • Минимизация академических решений (построение таблиц “на лету”, ORM).
  10. 10. Серебряная пуля Слабосвязанная Асинхронные вычисления Масштабируемая архитектура Слоистая Горизонтальное масштабирование
  11. 11. Отдельно о базах данных База данных – типичное узкое место. Для базы данных актуальны все вышеперечисленные методы увеличения производительности: горизонтальное и вертикальное масштабирование, функциональное разбиение, шардинг. Горизонтальное масштабирование в случае с БД достигается с помощью репликации.
  12. 12. Репликация Синхронизация нескольких копий объекта. Наиболее эффективна при небольшом количестве слейвов, иначе усложняется схема распространения изменений, которое, в дальнейшем, становится узким местом. Усложнение программной архитектуры – например, чтение данных с слейва, до которого не докатились изменения.
  13. 13. Типичная архитектура: обычный сайт Image Server / 1 Image Server / 2 User images User images Backend / 1 Database / 1 nginx nginx PHP MySQL Backend / 2 Database / 2 MySQL для PHP блогов Frontend nginx memcached Backend / 3 PHP Design images DNS-Балансинг DNS-Балансинг Демоны
  14. 14. Специфика сообществ Большое количество связей между объектами  сложная программная архитектура. Высокий hit ratio  большое количество серверов. Наличие сложных сервисов, реализуемых отдельными алгоритмами (поиск, сортировка, переписка, друзья друзей).
  15. 15. oleg.bunin@ontico.ru

×