SlideShare a Scribd company logo
1 of 15
Разработка
высоконагруженных проектов
    (например – сайтов для сообществ)

             Олег Бунин
Что такое “большой” проект?
• Сотни тысяч, миллионы, десятки
  миллионов хитов;
• Бесперебойная работа;
• Сложная структура:
  серверный парк,
  большое количество
  кода;
• Большое количество
  данных.
Общее решение
               Горизонтальное
              масштабирование
                 (scaling out)




             Масштабиро-           Вертикальное
Шардинг
                                 масштабирование
(sharding)
                вание               (scaling up)




              Функциональное
                 разделение
                (partitioning)
Горизонтальное масштабирование
Увеличение
производительности
системы за счет
подключения
дополнительных cерверов.

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

Что делать со связанными общими для нескольких
серверов данными?
Вертикальное масштабирование
                  Увеличение
                  производительности
                  системы за счет
                  увеличения мощности
                  сервера.

В какой-то момент мы все равно достигнем
предела по процессору, памяти или жесткому
диску.
Функциональное разбиение
Разные функциональные части работают и хранятся
на разных серверах системы.

В какой то момент
мы все равно
упремся в
физические
возможности
сервера.
Шардинг
Разбиение данных на
кусочки, которые
раскладываются по
серверам-шардам.
Как правильно разбить
данные для шардинга? Как правильно
идентифицировать данные?

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

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




                               Слабосвязанная
 Асинхронные
  вычисления

                  Масштабируемая
                     архитектура
                                        Слоистая

    Горизонтальное
   масштабирование
Отдельно о базах данных
                      База данных – типичное
                      узкое место. Для базы данных
                      актуальны все
                      вышеперечисленные методы
                      увеличения
                      производительности:
горизонтальное и вертикальное
масштабирование, функциональное
разбиение, шардинг.

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

Наиболее эффективна при
небольшом количестве
слейвов, иначе усложняется
схема распространения изменений, которое, в
дальнейшем, становится узким местом.
Усложнение программной архитектуры –
например, чтение данных с слейва, до которого не
докатились изменения.
Типичная архитектура: обычный сайт
                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-Балансинг                                                  Демоны
Специфика сообществ
Большое количество связей между объектами  сложная
программная архитектура.

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

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

More Related Content

What's hot

Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Anatoly Sharifulin
 
владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009Liudmila Li
 
Class Hierarchies in Relational Databases
Class Hierarchies in Relational DatabasesClass Hierarchies in Relational Databases
Class Hierarchies in Relational Databasessava
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаAndrew Dutchak
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденцииStas Fomin
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_newguest18d24c
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?SQALab
 
нужен ли россии
нужен ли россиинужен ли россии
нужен ли россииTimur AITOV
 
компьютер изнутри
компьютер изнутрикомпьютер изнутри
компьютер изнутриPuLJa
 
классификация вредоносного по
классификация вредоносного поклассификация вредоносного по
классификация вредоносного поanna.korovko
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixMichael Ganschuk
 
Курс "Автомат Продаж". Тема 2
Курс "Автомат Продаж". Тема 2Курс "Автомат Продаж". Тема 2
Курс "Автомат Продаж". Тема 2Sergey Zyryanov
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project developmentOntico
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E RussianLiudmila Li
 

What's hot (18)

Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎Интерактивный терминал: Perl, XML и Firefox‎
Интерактивный терминал: Perl, XML и Firefox‎
 
владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009владышев Zabbix Rootconf2009
владышев Zabbix Rootconf2009
 
Xrumme
XrummeXrumme
Xrumme
 
Class Hierarchies in Relational Databases
Class Hierarchies in Relational DatabasesClass Hierarchies in Relational Databases
Class Hierarchies in Relational Databases
 
Problogging
ProbloggingProblogging
Problogging
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіа
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденции
 
Competitions Cloudwatcher_new
Competitions Cloudwatcher_newCompetitions Cloudwatcher_new
Competitions Cloudwatcher_new
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?ObjectXPathNavigator - Как и зачем?
ObjectXPathNavigator - Как и зачем?
 
нужен ли россии
нужен ли россиинужен ли россии
нужен ли россии
 
10 Xs Dg
10 Xs Dg10 Xs Dg
10 Xs Dg
 
компьютер изнутри
компьютер изнутрикомпьютер изнутри
компьютер изнутри
 
классификация вредоносного по
классификация вредоносного поклассификация вредоносного по
классификация вредоносного по
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
 
Курс "Автомат Продаж". Тема 2
Курс "Автомат Продаж". Тема 2Курс "Автомат Продаж". Тема 2
Курс "Автомат Продаж". Тема 2
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E Russian
 

Viewers also liked

Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusOntico
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Ontico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation RevisedOntico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинOntico
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Ontico
 

Viewers also liked (7)

Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 Rus
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation Revised
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег Бунин
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015
 

More from Ontico

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Ontico
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Ontico
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ruOntico
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Ontico
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)Ontico
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряOntico
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описаниеOntico
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009Ontico
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010Ontico
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 ПленаркаOntico
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusOntico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
особенности построения собственной полнофункциональной Im сети
особенности построения собственной полнофункциональной Im сетиособенности построения собственной полнофункциональной Im сети
особенности построения собственной полнофункциональной Im сетиOntico
 
использование смс технологий в высоконагруженных Web проектах дмитрий булыч...
использование смс технологий в высоконагруженных Web проектах   дмитрий булыч...использование смс технологий в высоконагруженных Web проектах   дмитрий булыч...
использование смс технологий в высоконагруженных Web проектах дмитрий булыч...Ontico
 
архитектурные приемы онлайн игры
архитектурные приемы онлайн игрыархитектурные приемы онлайн игры
архитектурные приемы онлайн игрыOntico
 
Tupitsyn High Load
Tupitsyn High LoadTupitsyn High Load
Tupitsyn High LoadOntico
 
Spread Zaytsev3
Spread Zaytsev3Spread Zaytsev3
Spread Zaytsev3Ontico
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Ontico
 
Moskva Architecture Highload
Moskva Architecture HighloadMoskva Architecture Highload
Moskva Architecture HighloadOntico
 
Hl++ ребров федоровских
Hl++ ребров федоровскихHl++ ребров федоровских
Hl++ ребров федоровскихOntico
 

More from Ontico (20)

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ru
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октября
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описание
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 Пленарка
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
особенности построения собственной полнофункциональной Im сети
особенности построения собственной полнофункциональной Im сетиособенности построения собственной полнофункциональной Im сети
особенности построения собственной полнофункциональной Im сети
 
использование смс технологий в высоконагруженных Web проектах дмитрий булыч...
использование смс технологий в высоконагруженных Web проектах   дмитрий булыч...использование смс технологий в высоконагруженных Web проектах   дмитрий булыч...
использование смс технологий в высоконагруженных Web проектах дмитрий булыч...
 
архитектурные приемы онлайн игры
архитектурные приемы онлайн игрыархитектурные приемы онлайн игры
архитектурные приемы онлайн игры
 
Tupitsyn High Load
Tupitsyn High LoadTupitsyn High Load
Tupitsyn High Load
 
Spread Zaytsev3
Spread Zaytsev3Spread Zaytsev3
Spread Zaytsev3
 
Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008Smirnov Memcached High Load 2008
Smirnov Memcached High Load 2008
 
Moskva Architecture Highload
Moskva Architecture HighloadMoskva Architecture Highload
Moskva Architecture Highload
 
Hl++ ребров федоровских
Hl++ ребров федоровскихHl++ ребров федоровских
Hl++ ребров федоровских
 

HighLoad Sites, Oleg Bunin

  • 1. Разработка высоконагруженных проектов (например – сайтов для сообществ) Олег Бунин
  • 2. Что такое “большой” проект? • Сотни тысяч, миллионы, десятки миллионов хитов; • Бесперебойная работа; • Сложная структура: серверный парк, большое количество кода; • Большое количество данных.
  • 3. Общее решение Горизонтальное масштабирование (scaling out) Масштабиро- Вертикальное Шардинг масштабирование (sharding) вание (scaling up) Функциональное разделение (partitioning)
  • 4. Горизонтальное масштабирование Увеличение производительности системы за счет подключения дополнительных cерверов. Отлично работает для вычисляющих серверов, а как быть с базой данных? Что делать со связанными общими для нескольких серверов данными?
  • 5. Вертикальное масштабирование Увеличение производительности системы за счет увеличения мощности сервера. В какой-то момент мы все равно достигнем предела по процессору, памяти или жесткому диску.
  • 6. Функциональное разбиение Разные функциональные части работают и хранятся на разных серверах системы. В какой то момент мы все равно упремся в физические возможности сервера.
  • 7. Шардинг Разбиение данных на кусочки, которые раскладываются по серверам-шардам. Как правильно разбить данные для шардинга? Как правильно идентифицировать данные? У них просто нет выбора:
  • 8. Разбиение данных для шардинга Статическое: по первой букве логина, хэширование идентификаторов или логинов. Единого центра нет, соответственно нет узкого места, зато есть сложности с разрешением заранее непредусмотренных ситуаций. Динамическое: есть координирующий центр, который отвечает на вопрос “где лежит”? Он же является узким местом, зато добавление новых серверов происходит без изменения кода.
  • 9. Как облегчить масштабирование? • Низкая степень связности данных и кода; • Разделение кода на слои (как минимум слой связи с базой данных и слой кэширования); • Рефакторинг, высокое качество кода, минимизация workaround’ов; • Контроль над системой, мониторинг; • Минимизация академических решений (построение таблиц “на лету”, ORM).
  • 10. Серебряная пуля Слабосвязанная Асинхронные вычисления Масштабируемая архитектура Слоистая Горизонтальное масштабирование
  • 11. Отдельно о базах данных База данных – типичное узкое место. Для базы данных актуальны все вышеперечисленные методы увеличения производительности: горизонтальное и вертикальное масштабирование, функциональное разбиение, шардинг. Горизонтальное масштабирование в случае с БД достигается с помощью репликации.
  • 12. Репликация Синхронизация нескольких копий объекта. Наиболее эффективна при небольшом количестве слейвов, иначе усложняется схема распространения изменений, которое, в дальнейшем, становится узким местом. Усложнение программной архитектуры – например, чтение данных с слейва, до которого не докатились изменения.
  • 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. Специфика сообществ Большое количество связей между объектами  сложная программная архитектура. Высокий hit ratio  большое количество серверов. Наличие сложных сервисов, реализуемых отдельными алгоритмами (поиск, сортировка, переписка, друзья друзей).