SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Техники масштабирования
    Веб-приложений
       Петр Зайцев
 pz@mysqlperformanceblog.com
Проблемы производительности
• Время отклика
  – Страница долго грузится, даже для одного
    активного пользователя
    • Типично обрабатывается много данных
• Пропускная способность (req/sec)
  – При большом числе активных
    пользователей время отклика растет и
    система не справляется
• Пути решения могут быть разные

                                               2
В чем еще сложности?
• Число запросов часто растет вместе с
  объемом данных
  – O(N) алгоритмы требуют O(N^2) ресурсов
• Данные в памяти в 1000 раз быстрее чем
  на диске.
• Блокировки на уровне приложения, базы
  данных, операционной системы



                                             3
Что масштабируем?
• Динамический контент
• Статический контент
• Базу данных




                            4
Динамический контент
• Пропускная способность
  – Решается увеличением числа Web серверов
  – Для одной и той же задачи может
    использоваться в 10 раз больше железа
  – Оптимизация скорости важна для
    эффективности, но не жизни проекта
• Время отклика
  – Изменение алгоритма
  – Оптимизация, например модули на C
  – Параллельные алгоритмы (на разных уровнях)
                                              5
Статический контент

• Достаточность памяти и пропускной
  способности дисков
• nginx/lighttpd легко отдают 20.000+
  маленьких объектов в секунду на сервер
• Типичная проблема – завязка на одну
  большую файловую систему
  – Разделить через proxy-rewrite
  – Или не иметь проблему изначально
    • Photobucket
  – Отдавать напрямую лучше, чем через NFS
                                             6
База данных
• Обычно наиболее сложный для
  масштабирования компонент
• Особенно сложно, если приложение
  создано без оглядки на масштабирование
• Очень важно кэширование (как впрочем и
  на других уровнях)




                                       7
Пути масштабирования БД
• Купить более мощный сервер
  – Хороший подход, если результаты нужны
    быстро, а никакой возможности изменить
    приложение нет
  – Часто не решает проблемы времени отклика
  – Возможности роста ограничены
  – Финансово неэффективно
    • Особенно учитывая, что нужен второй такой же
      сервер (для надежности)



                                                     8
Репликация
• Относительно простое решение
  – Не так много изменений в приложении
• Достаточно большой предел для ряда
  приложений
  – YouTube еще год назад имела одну базу
    данных
• Важно ограничить запись
• Обеспечить данные в памяти
• Репликация не параллельна в MySQL
                                            9
Потабличное разбиение
• Выделяются компоненты и их таблицы
  располагаются на разных серверах
  – И часто реплицируются
  – Например “сервер регистрационных данных”,
    “форумы” итд
• Относительная легкость изменения
• Не всегда легко выделить малозависимые
  компоненты
• Ограниченная масштабируемость

                                            10
“Шардинг” – разбиение данных
• Данные распределены на много серверов
  – Которые обычно реплицируются
• На одном сервере может быть больше, чем
  один “шард”
  – Легкость балансировки, меньше блокировки
• Требует правильного разбиения данных
• Может требоваться более одного
  разбиения


                                               11
Какой путь для вас?
•   Оцените требования приложения к росту
•   Объем базы данных
•   Интенсивность записи
•   Возможности кэширования
•   Навыки персонала
•   Временные рамки и бюжет разработки



                                        12
Как разбивать данные
• Старые приложения
  – Так, чтобы минимизировать модификации
    • Часто схема полностью дублируется, включая
      имена баз данных, и добавляется логика
      определения нахождения объекта
• Новые приложения
  – Для обеспечения лучшей производительности
    и сопровождаемости
    • Несколько баз данных на сервере с разными
      именами


                                                   13
Критерий разбиения

• Хэш разбиение для объектов
  – Четные на сервер 1, нечетные на сервер 2
  – Просто, но очень негибко
• Таблица привязки для каждого элемента
  – Требуется обращение к словарю
  – Гибко, удобно балансировать данные
• Блочная структура
  – 1024 блока, которые приписаны к серверам
  – Гибко, но “блоки” можно переносить физически

                                               14
Кластеризация разбиения

• Минимизация операций, требующих
  доступа ко многим (всем) группам
• Зависит от приложения – типично
  пользователь, сайт
  – Или группа – регион, школа итд
• Может требоваться несколько разбиений и
  дублирование данных
  – “Пользователь” и “Фильм”
• Некоторые приложения допускают
  произвольное разбиение

                                       15
Проблемы с разбиением данных
• JOIN с системными/глобальными
  таблицами
  – “ручной join”
    • Нередко это бывает даже быстрее
  – “репликация” системных/глобальных таблиц
   на все сервера
    • Хорошо, если данных мало и меняются нечасто
  – Federated Storage Engine
    • Иногда работает, обычно мееедленно
    • Сложности с обеспечением доступности при
      падении мастера

                                                    16
Агрегация данных по всем
             разбиениям
• Действительно ли этого не избежать?
  – Дублирование данных
  – Пре-генерация данных итд
• Вручную пробегать все группы
  – Простое решение, работает для группировки
• UNION ALL VIEW на Federated Tables
  – Хорошо работает, когда время получения
    ответа не важно



                                             17
Агрегация данных по всем
             разбиениям
• Самописные системы параллельной
  агрегации
  – Особенно хорошо, когда групп ограниченное
    число
    • Technorati Web Services Layer
    • HiveDB (система для решения этой проблемы)
• Sphinx
  – “Неожиданно” оказался полезным для
    глобальной агрегации далеко за пределами
    полнотекстового поиска

                                                   18
А как же MySQL Cluster?
• Зачем мучаться с разбиением данных
  вручную, давайте поставим MySQL Cluster
  и он все за нас сделает автоматически?
• Хорошо в теории, но плохо работает на
  практике для многих задач
  – Сложности с выполнением сложных запросов
    (по меньшей мере пока)
  – Не работает с большими наборами данных,
    даже в версиях 5.1.x
  – Достаточно хорошо работает, например, для
    хранения сессий в Web приложениях
                                           19
Веб 2.0 мантра –
 кэшировать и еще раз кэшировать
• Набор технологий для избежания тяжелой
  работы по генерации данных
  – Классическое кэширование
  – Прегенерация статических данных
  – Таблицы содержащие суммарные данные итд
• Избежать работы лучше, чем ее
  оптимизировать!




                                         20
Кэширование на всех уровнях
• “Железные” CPU Cache, RAID Cache
• Память как кэш
  – Файловый кэш и внутренние кэши БД
  – Требуют аккуратной настройки для лучшей
    производительности
  – Часто определяют размер данных, с которыми
    сервер будет эффективно справлятся
• MySQL Query Cache
  – Кэш результатов запросов (вместо исходных
    данных)

                                            21
Кэши уровня приложения
• Кэширование результатов ф-ий, объектов,
  малоизменяемых данных
   – APC/eAccelerator/xcache как кэш данных
     • высокая скорость, малый объем, локальность
     • Могут быть проблемы с блокировками и
       фрагментацией
  – MemCache
     • Распределенный “сетевой” кэш – единая копия
       данных и больше объем. Медленно
  – Диск (локальный или разделенный)
  – “Обернутый диск” – например BDB с memcache
    интерфейсом
                                                     22
HTTP и выше
• Прегенеренные статические данные
  – Можно хитрить и генерить по 404 и стирать при
    инвалидации.
• SQUID и аналоги
  – Распределенный. TTL или инвалидация
• Кэш браузера
  – Правильно выставлять expires, etag
  – Если новой версии объекта давать новый URL,
    можно не беспокоится об инвалидации


                                              23
Политика кэширования
• Как избежать позавчерашних новостей?
  – TTL – объект имеет ограниченное время жизни
    • Просто, но менее эффективно чем могло бы быть
  – Инвалидация обновленных данных
    • Более сложно, но эффективно и оперативно
    • Часто используется с TTL “на всякий случай”
  – “Контроль версий объектов”
    • Знаем, что версия пользователя равна 1000 –
      значит, считаем недействительными все более
      старые зависимые объекты



                                                    24
Боремся с сетевыми задержками
• Получить больше данных за одно
  обращение
  – Не считывать таблицу строку за строкой
  – Использовать multi_get в memcache итд
• Делать запросы параллельно
  – Параллельная работа с внешними Web
    сервисами
• Избегать ненужных обращений
• “Отложенные операции”
  – Можно ли это сделать после того, как страница
    уже отдана?

                                              25
Вот и все,
         или немного рекламы
• Percona Ltd
  – Мы занимаемся консалтингом в области
    MySQL, оптимизациями, дизайном
    архитектуры, обслуживанием MySQL
• Приходите к нам работать
  – Интересная работа для активных экспертов в
    Web технологиях и MySQL
• pz@mysqlperformanceblog.com
• http://www.mysqlperformanceblog.com


                                            26

Weitere ähnliche Inhalte

Was ist angesagt?

Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Tanya Denisyuk
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеIT Share
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?ActiveCloud
 
1С-Битрикс - Веб-кластер
1С-Битрикс - Веб-кластер1С-Битрикс - Веб-кластер
1С-Битрикс - Веб-кластерAlexander Demidov
 
1С-Битрикс - Производительность
1С-Битрикс - Производительность1С-Битрикс - Производительность
1С-Битрикс - ПроизводительностьAlexander Demidov
 
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
 
DB2 BLU Explained
DB2 BLU ExplainedDB2 BLU Explained
DB2 BLU ExplainedMaxim Zinal
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
 
Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016Andrey Karpov
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
Александр Шуйсков (NAUMEN): перспективы развития Database as a Service
Александр Шуйсков (NAUMEN): перспективы развития Database as a ServiceАлександр Шуйсков (NAUMEN): перспективы развития Database as a Service
Александр Шуйсков (NAUMEN): перспективы развития Database as a ServiceKirill Rubinshteyn
 
Презентация компании ВМЛАБ
Презентация компании ВМЛАБПрезентация компании ВМЛАБ
Презентация компании ВМЛАБSaaS.ru Portal
 
Andrei Kirilenkov. Vertica
Andrei Kirilenkov. VerticaAndrei Kirilenkov. Vertica
Andrei Kirilenkov. VerticaVolha Banadyseva
 
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceНовый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceAndrey Akulov
 

Was ist angesagt? (20)

Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
Кирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практикеКирилл Алешин - Big Data и Lambda архитектура на практике
Кирилл Алешин - Big Data и Lambda архитектура на практике
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
Облачные технологии и инфраструктура как сервис (IaaS). Зачем это нужно бизнесу?
 
1С-Битрикс - Веб-кластер
1С-Битрикс - Веб-кластер1С-Битрикс - Веб-кластер
1С-Битрикс - Веб-кластер
 
1С-Битрикс - Производительность
1С-Битрикс - Производительность1С-Битрикс - Производительность
1С-Битрикс - Производительность
 
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
 
1c bitrix-cluster-et
1c bitrix-cluster-et1c bitrix-cluster-et
1c bitrix-cluster-et
 
DB2 BLU Explained
DB2 BLU ExplainedDB2 BLU Explained
DB2 BLU Explained
 
Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"Алексей Рагозин "Java и linux борьба за микросекунды"
Алексей Рагозин "Java и linux борьба за микросекунды"
 
Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016Конференция по программным решениям HPE 2016
Конференция по программным решениям HPE 2016
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
Webcluster cases
Webcluster casesWebcluster cases
Webcluster cases
 
Александр Шуйсков (NAUMEN): перспективы развития Database as a Service
Александр Шуйсков (NAUMEN): перспективы развития Database as a ServiceАлександр Шуйсков (NAUMEN): перспективы развития Database as a Service
Александр Шуйсков (NAUMEN): перспективы развития Database as a Service
 
Презентация компании ВМЛАБ
Презентация компании ВМЛАБПрезентация компании ВМЛАБ
Презентация компании ВМЛАБ
 
Andrei Kirilenkov. Vertica
Andrei Kirilenkov. VerticaAndrei Kirilenkov. Vertica
Andrei Kirilenkov. Vertica
 
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery ApplianceНовый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
Новый подход к резервному копированию БД - Zero Data Loss Recovery Appliance
 

Andere mochten auch

EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010
EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010
EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010CORLATINA
 
Synovate Economic Summary Q4 2010
Synovate Economic Summary Q4 2010Synovate Economic Summary Q4 2010
Synovate Economic Summary Q4 2010christophermartin01
 
Choices Storyboard
Choices StoryboardChoices Storyboard
Choices StoryboardTheo Watkins
 
Presentation seminar fyp
Presentation seminar fypPresentation seminar fyp
Presentation seminar fypnaveciouz
 
Finalised proposal -FYP2
Finalised proposal -FYP2Finalised proposal -FYP2
Finalised proposal -FYP2naveciouz
 
Materi hakikat ilmu kimia
Materi hakikat ilmu kimiaMateri hakikat ilmu kimia
Materi hakikat ilmu kimiaMimi Yeni
 
Pengenalan ilmu-kimia
Pengenalan ilmu-kimiaPengenalan ilmu-kimia
Pengenalan ilmu-kimiaMimi Yeni
 
Shooting script a2
Shooting script a2Shooting script a2
Shooting script a2beccacobb
 
EXPERIENCIA SIGNIFICATIVA 2010
EXPERIENCIA SIGNIFICATIVA 2010EXPERIENCIA SIGNIFICATIVA 2010
EXPERIENCIA SIGNIFICATIVA 2010CORLATINA
 
Silabus kimia-sma-kls-x
Silabus kimia-sma-kls-xSilabus kimia-sma-kls-x
Silabus kimia-sma-kls-xMimi Yeni
 
Youth groups through the ages presentation
Youth groups through the ages presentationYouth groups through the ages presentation
Youth groups through the ages presentationbeccacobb
 
Silabus kimia-sma-kls-xi
Silabus kimia-sma-kls-xiSilabus kimia-sma-kls-xi
Silabus kimia-sma-kls-xiMimi Yeni
 
Silabus kimia-sma-kls-xii
Silabus kimia-sma-kls-xiiSilabus kimia-sma-kls-xii
Silabus kimia-sma-kls-xiiMimi Yeni
 
La tarjeta madre_con_sus_componentes_2
La tarjeta madre_con_sus_componentes_2La tarjeta madre_con_sus_componentes_2
La tarjeta madre_con_sus_componentes_2Kt Ortega
 
Materi ikatan kimia doc
Materi ikatan kimia docMateri ikatan kimia doc
Materi ikatan kimia docMimi Yeni
 
Materi sejarah dan struktur atom ppt
Materi sejarah dan struktur  atom pptMateri sejarah dan struktur  atom ppt
Materi sejarah dan struktur atom pptMimi Yeni
 
Mater ikatan kimia ppt
Mater ikatan kimia pptMater ikatan kimia ppt
Mater ikatan kimia pptMimi Yeni
 

Andere mochten auch (19)

EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010
EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010
EXPERIENCIA SIGNIFICATIVA C.INF. JUAN XXIII 2010
 
Synovate Economic Summary Q4 2010
Synovate Economic Summary Q4 2010Synovate Economic Summary Q4 2010
Synovate Economic Summary Q4 2010
 
Choices Storyboard
Choices StoryboardChoices Storyboard
Choices Storyboard
 
Presentation seminar fyp
Presentation seminar fypPresentation seminar fyp
Presentation seminar fyp
 
Finalised proposal -FYP2
Finalised proposal -FYP2Finalised proposal -FYP2
Finalised proposal -FYP2
 
Storyboard
StoryboardStoryboard
Storyboard
 
Materi hakikat ilmu kimia
Materi hakikat ilmu kimiaMateri hakikat ilmu kimia
Materi hakikat ilmu kimia
 
Narrative
NarrativeNarrative
Narrative
 
Pengenalan ilmu-kimia
Pengenalan ilmu-kimiaPengenalan ilmu-kimia
Pengenalan ilmu-kimia
 
Shooting script a2
Shooting script a2Shooting script a2
Shooting script a2
 
EXPERIENCIA SIGNIFICATIVA 2010
EXPERIENCIA SIGNIFICATIVA 2010EXPERIENCIA SIGNIFICATIVA 2010
EXPERIENCIA SIGNIFICATIVA 2010
 
Silabus kimia-sma-kls-x
Silabus kimia-sma-kls-xSilabus kimia-sma-kls-x
Silabus kimia-sma-kls-x
 
Youth groups through the ages presentation
Youth groups through the ages presentationYouth groups through the ages presentation
Youth groups through the ages presentation
 
Silabus kimia-sma-kls-xi
Silabus kimia-sma-kls-xiSilabus kimia-sma-kls-xi
Silabus kimia-sma-kls-xi
 
Silabus kimia-sma-kls-xii
Silabus kimia-sma-kls-xiiSilabus kimia-sma-kls-xii
Silabus kimia-sma-kls-xii
 
La tarjeta madre_con_sus_componentes_2
La tarjeta madre_con_sus_componentes_2La tarjeta madre_con_sus_componentes_2
La tarjeta madre_con_sus_componentes_2
 
Materi ikatan kimia doc
Materi ikatan kimia docMateri ikatan kimia doc
Materi ikatan kimia doc
 
Materi sejarah dan struktur atom ppt
Materi sejarah dan struktur  atom pptMateri sejarah dan struktur  atom ppt
Materi sejarah dan struktur atom ppt
 
Mater ikatan kimia ppt
Mater ikatan kimia pptMater ikatan kimia ppt
Mater ikatan kimia ppt
 

Ähnlich wie High load2007 scaling-web-applications-rus

Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, PerconaOntico
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Yandex
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераDaniel Podolsky
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Olga Lavrentieva
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricksSveta Bozhko
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)Alexander Gornik
 

Ähnlich wie High load2007 scaling-web-applications-rus (20)

Пётр Зайцев, Percona
Пётр Зайцев, PerconaПётр Зайцев, Percona
Пётр Зайцев, Percona
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"Сергей Чистович "Подходы к кешированию на UGC-сервисе"
Сергей Чистович "Подходы к кешированию на UGC-сервисе"
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 
Спасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного ХецнераСпасение 6 миллионов файлов в условиях полного Хецнера
Спасение 6 миллионов файлов в условиях полного Хецнера
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)Опыт использования NoSQL-хранилищ (Андрей Новиков)
Опыт использования NoSQL-хранилищ (Андрей Новиков)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
разработка бизнес приложений (9)
разработка бизнес приложений (9)разработка бизнес приложений (9)
разработка бизнес приложений (9)
 

High load2007 scaling-web-applications-rus

  • 1. Техники масштабирования Веб-приложений Петр Зайцев pz@mysqlperformanceblog.com
  • 2. Проблемы производительности • Время отклика – Страница долго грузится, даже для одного активного пользователя • Типично обрабатывается много данных • Пропускная способность (req/sec) – При большом числе активных пользователей время отклика растет и система не справляется • Пути решения могут быть разные 2
  • 3. В чем еще сложности? • Число запросов часто растет вместе с объемом данных – O(N) алгоритмы требуют O(N^2) ресурсов • Данные в памяти в 1000 раз быстрее чем на диске. • Блокировки на уровне приложения, базы данных, операционной системы 3
  • 4. Что масштабируем? • Динамический контент • Статический контент • Базу данных 4
  • 5. Динамический контент • Пропускная способность – Решается увеличением числа Web серверов – Для одной и той же задачи может использоваться в 10 раз больше железа – Оптимизация скорости важна для эффективности, но не жизни проекта • Время отклика – Изменение алгоритма – Оптимизация, например модули на C – Параллельные алгоритмы (на разных уровнях) 5
  • 6. Статический контент • Достаточность памяти и пропускной способности дисков • nginx/lighttpd легко отдают 20.000+ маленьких объектов в секунду на сервер • Типичная проблема – завязка на одну большую файловую систему – Разделить через proxy-rewrite – Или не иметь проблему изначально • Photobucket – Отдавать напрямую лучше, чем через NFS 6
  • 7. База данных • Обычно наиболее сложный для масштабирования компонент • Особенно сложно, если приложение создано без оглядки на масштабирование • Очень важно кэширование (как впрочем и на других уровнях) 7
  • 8. Пути масштабирования БД • Купить более мощный сервер – Хороший подход, если результаты нужны быстро, а никакой возможности изменить приложение нет – Часто не решает проблемы времени отклика – Возможности роста ограничены – Финансово неэффективно • Особенно учитывая, что нужен второй такой же сервер (для надежности) 8
  • 9. Репликация • Относительно простое решение – Не так много изменений в приложении • Достаточно большой предел для ряда приложений – YouTube еще год назад имела одну базу данных • Важно ограничить запись • Обеспечить данные в памяти • Репликация не параллельна в MySQL 9
  • 10. Потабличное разбиение • Выделяются компоненты и их таблицы располагаются на разных серверах – И часто реплицируются – Например “сервер регистрационных данных”, “форумы” итд • Относительная легкость изменения • Не всегда легко выделить малозависимые компоненты • Ограниченная масштабируемость 10
  • 11. “Шардинг” – разбиение данных • Данные распределены на много серверов – Которые обычно реплицируются • На одном сервере может быть больше, чем один “шард” – Легкость балансировки, меньше блокировки • Требует правильного разбиения данных • Может требоваться более одного разбиения 11
  • 12. Какой путь для вас? • Оцените требования приложения к росту • Объем базы данных • Интенсивность записи • Возможности кэширования • Навыки персонала • Временные рамки и бюжет разработки 12
  • 13. Как разбивать данные • Старые приложения – Так, чтобы минимизировать модификации • Часто схема полностью дублируется, включая имена баз данных, и добавляется логика определения нахождения объекта • Новые приложения – Для обеспечения лучшей производительности и сопровождаемости • Несколько баз данных на сервере с разными именами 13
  • 14. Критерий разбиения • Хэш разбиение для объектов – Четные на сервер 1, нечетные на сервер 2 – Просто, но очень негибко • Таблица привязки для каждого элемента – Требуется обращение к словарю – Гибко, удобно балансировать данные • Блочная структура – 1024 блока, которые приписаны к серверам – Гибко, но “блоки” можно переносить физически 14
  • 15. Кластеризация разбиения • Минимизация операций, требующих доступа ко многим (всем) группам • Зависит от приложения – типично пользователь, сайт – Или группа – регион, школа итд • Может требоваться несколько разбиений и дублирование данных – “Пользователь” и “Фильм” • Некоторые приложения допускают произвольное разбиение 15
  • 16. Проблемы с разбиением данных • JOIN с системными/глобальными таблицами – “ручной join” • Нередко это бывает даже быстрее – “репликация” системных/глобальных таблиц на все сервера • Хорошо, если данных мало и меняются нечасто – Federated Storage Engine • Иногда работает, обычно мееедленно • Сложности с обеспечением доступности при падении мастера 16
  • 17. Агрегация данных по всем разбиениям • Действительно ли этого не избежать? – Дублирование данных – Пре-генерация данных итд • Вручную пробегать все группы – Простое решение, работает для группировки • UNION ALL VIEW на Federated Tables – Хорошо работает, когда время получения ответа не важно 17
  • 18. Агрегация данных по всем разбиениям • Самописные системы параллельной агрегации – Особенно хорошо, когда групп ограниченное число • Technorati Web Services Layer • HiveDB (система для решения этой проблемы) • Sphinx – “Неожиданно” оказался полезным для глобальной агрегации далеко за пределами полнотекстового поиска 18
  • 19. А как же MySQL Cluster? • Зачем мучаться с разбиением данных вручную, давайте поставим MySQL Cluster и он все за нас сделает автоматически? • Хорошо в теории, но плохо работает на практике для многих задач – Сложности с выполнением сложных запросов (по меньшей мере пока) – Не работает с большими наборами данных, даже в версиях 5.1.x – Достаточно хорошо работает, например, для хранения сессий в Web приложениях 19
  • 20. Веб 2.0 мантра – кэшировать и еще раз кэшировать • Набор технологий для избежания тяжелой работы по генерации данных – Классическое кэширование – Прегенерация статических данных – Таблицы содержащие суммарные данные итд • Избежать работы лучше, чем ее оптимизировать! 20
  • 21. Кэширование на всех уровнях • “Железные” CPU Cache, RAID Cache • Память как кэш – Файловый кэш и внутренние кэши БД – Требуют аккуратной настройки для лучшей производительности – Часто определяют размер данных, с которыми сервер будет эффективно справлятся • MySQL Query Cache – Кэш результатов запросов (вместо исходных данных) 21
  • 22. Кэши уровня приложения • Кэширование результатов ф-ий, объектов, малоизменяемых данных – APC/eAccelerator/xcache как кэш данных • высокая скорость, малый объем, локальность • Могут быть проблемы с блокировками и фрагментацией – MemCache • Распределенный “сетевой” кэш – единая копия данных и больше объем. Медленно – Диск (локальный или разделенный) – “Обернутый диск” – например BDB с memcache интерфейсом 22
  • 23. HTTP и выше • Прегенеренные статические данные – Можно хитрить и генерить по 404 и стирать при инвалидации. • SQUID и аналоги – Распределенный. TTL или инвалидация • Кэш браузера – Правильно выставлять expires, etag – Если новой версии объекта давать новый URL, можно не беспокоится об инвалидации 23
  • 24. Политика кэширования • Как избежать позавчерашних новостей? – TTL – объект имеет ограниченное время жизни • Просто, но менее эффективно чем могло бы быть – Инвалидация обновленных данных • Более сложно, но эффективно и оперативно • Часто используется с TTL “на всякий случай” – “Контроль версий объектов” • Знаем, что версия пользователя равна 1000 – значит, считаем недействительными все более старые зависимые объекты 24
  • 25. Боремся с сетевыми задержками • Получить больше данных за одно обращение – Не считывать таблицу строку за строкой – Использовать multi_get в memcache итд • Делать запросы параллельно – Параллельная работа с внешними Web сервисами • Избегать ненужных обращений • “Отложенные операции” – Можно ли это сделать после того, как страница уже отдана? 25
  • 26. Вот и все, или немного рекламы • Percona Ltd – Мы занимаемся консалтингом в области MySQL, оптимизациями, дизайном архитектуры, обслуживанием MySQL • Приходите к нам работать – Интересная работа для активных экспертов в Web технологиях и MySQL • pz@mysqlperformanceblog.com • http://www.mysqlperformanceblog.com 26