highload осень 2012 лекция 6
TRANSCRIPT
![Page 1: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/1.jpg)
Проектирование ПО для высоконагруженных систем
Лекция №6
Александр Быков
![Page 2: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/2.jpg)
Лекция 6
SATAЕмкость: 2 TbRPM: 7200Cache: 64 MbИнтерфейс: 3Gb/sЧтение/запись: 140MB/sSeek time R/W: 12/6 ms
Жесткие диски
SASЕмкость: 300 GbRPM: 15000Cache: 16 MbИнтерфейс: 6Gb/sЧтение/запись: 200MB/sSeek time R/W: 4 ms
DDR2Интерфейс: 6.4Gb/sЗадержка: 50 ns
![Page 3: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/3.jpg)
Лекция 6
• Быстрое линейное чтение
• Медленный случайный доступ
• Конкуренция за диск уменьшает
производительность
• SATA – для логов
• SAS – для баз данных
• SSD – для кеширования
Особенности
![Page 4: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/4.jpg)
Лекция 6
Redundant Array of Independent Disks
RAID 0 – Striping
RAID 1 – Mirroring
RAID 5 – Parity
RAID 6 – Double Parity
RAID 10 – Mirrored+Striped
![Page 5: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/5.jpg)
Лекция 6
Hardware RAID
• Не создает нагрузку на систему
• В дорогих вариантах батарейка для записи
кеша
• Пропиетарный формат дисковSoftware RAID
• Немного медленнее дорогого аппаратного
• Открытость и совместимость со всем
![Page 6: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/6.jpg)
Лекция 6
Особенности RAID
• «Вылетевший» диск увеличивает нагрузку на
остальные
• Синхронизация диска увеличивает нагрузку на
остальные
• Под повышенной нагрузкой может сломаться
второй в паре
• Скорость синхронизации можно регулировать
![Page 7: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/7.jpg)
Лекция 6
Файловый системы
Ext4
• Mainline
• Быстрее работа с метадатанными и мелкими
файлами
XFS
• Для работы с большими массивами
• Много багов с производительностью
• Узкие места активно фиксятся
![Page 8: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/8.jpg)
Лекция 6
Logical Volume Manager
• Дополнительный слой виртуализации
• Позволяет делать snapshot раздела на лету
• Snapshot создается в режиме copy-on-write
• Удобно использовать для бэкапа баз данных
• Под нагрузкой откладка снапшота тормозит
![Page 9: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/9.jpg)
Лекция 6
Базы данных
PostgreSQL
• Полнофункциональная база данных
• Исправлены проблемы масштабируемости
• Плохо подходит для интенсивной онлайн-
нагрузки
MySQL
• Примитивная и быстрая
• Хорошо держит нагрузку
• Репликация
![Page 10: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/10.jpg)
Лекция 6
Базы данных
MySQL: MyISAM
• Предельно простая
• Очень быстрое чтение
• Очень быстрая запись в конец
• Table-level lock
• Простой бинарный формат
• Отдельные файлы для формата, индекса,
данных
• Бьются данные на пропаже питания
• Потом долгий myisamchk
![Page 11: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/11.jpg)
Лекция 6
Базы данных
MySQL: InnoDB
• Поддержка транзакций и прочих полезностей
• Сложные запросы лучше не использовать
• Row-level lock
• По-умолчанию все таблицы в одном файле
• Можно включить file-per-table
• Проблемы с hot-backup и переносом между
серверами
• В целом более медленная чем MyISAM
![Page 12: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/12.jpg)
Лекция 6
MySQL Репликация
• Дублирование запросов над базой на ведомом
сервере
• Команды выполняются в один поток (медленно)
• Существует «отставание реплики»
• Реплика является горячим резервом
• С реплики можно снимать бекап
• С реплики можно читать данные (с задержкой от
мастера)
![Page 13: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/13.jpg)
Лекция 6
MySQL Alter Table
• На нагруженной базе невозможен – очень долго
• Делаем ALTER TABLE на реплике
• Блокируем master на запись
• Ждем когда реплика «догонится»
• Переключаем нагрузку на реплику
• Делаем бывший master репликой
![Page 14: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/14.jpg)
Лекция 6
Альтернатива Alter Table
• Храним все данные объекта в одном JSON-поле
• Индексы по полям делаем в виде отдельных
таблиц
• Индексы заполняем программно после данных
• Индексы могут быть сквозными при шардинге
• Хранятся на отдельных шардах
![Page 15: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/15.jpg)
Лекция 6
Проблемы одной большой базы
• Слишком большое кол-во запросов в секунду
• Слишком большое кол-во соединений
• Данные не влезают в диск
• Workset не влезает в оперативную память
• Медленный поиск по большим индексам
• Блокировки на таблицах/строках
• Блокировки на синхронизации
![Page 16: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/16.jpg)
Лекция 6
Шардинг (Partitioning)
• По функциям / По идентификаторам
• Создаем одинаковые таблицы на N серверах
• Разбиваем данные на N частей
• Части должны быть достаточно маленькими
• По определенному правилу ходим на нужны
сервер
• Появляются понятия «мувить» и «сплитать»
![Page 17: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/17.jpg)
Лекция 6
Общие правила
• Не использовать JOIN
• Не использовать транзакции
• Не использовать кеш запросов
• Не использовать хранимые процедуры и
триггеры
• Денормализация
• Поиск только по индексу
• Шардинг по Primary Key
• Шардинг по функциям
![Page 18: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/18.jpg)
Лекция 6
Шардинг и репликация
Рассмотрим на примере LiveJournal:
• Проект с открытым исходным кодом
• Много информации по устройству
• Один из первых крупных проектов на MySQL
![Page 19: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/19.jpg)
Лекция 6
LiveJournal: One Server
![Page 20: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/20.jpg)
Лекция 6
LiveJournal: One Server - Problems
![Page 21: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/21.jpg)
Лекция 6
LiveJournal: Two Servers
![Page 22: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/22.jpg)
Лекция 6
LiveJournal: Two Servers - Problems
![Page 23: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/23.jpg)
Лекция 6
LiveJournal: Four Servers
![Page 24: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/24.jpg)
Лекция 6
LiveJournal: Four Servers - Problems
![Page 25: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/25.jpg)
Лекция 6
LiveJournal: Five Servers
![Page 26: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/26.jpg)
Лекция 6
LiveJournal: Replication Implementation
![Page 27: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/27.jpg)
Лекция 6
LiveJournal: More Servers
![Page 28: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/28.jpg)
Лекция 6
LiveJournal: Where we at….
![Page 29: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/29.jpg)
Лекция 6
LiveJournal: Problems with Architecture
![Page 30: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/30.jpg)
Лекция 6
LiveJournal: Problems with Architecture
![Page 31: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/31.jpg)
Лекция 6
LiveJournal: Spreading Writes
![Page 32: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/32.jpg)
Лекция 6
LiveJournal: Introducing User Clusters
![Page 33: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/33.jpg)
Лекция 6
LiveJournal: User Clusters
![Page 34: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/34.jpg)
Лекция 6
LiveJournal: User Cluster Implementation
![Page 35: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/35.jpg)
Лекция 6
LiveJournal: Where We At….
![Page 36: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/36.jpg)
Лекция 6
LiveJournal: Caching
![Page 37: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/37.jpg)
Лекция 6
LiveJournal: Where to cache ?
![Page 38: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/38.jpg)
Лекция 6
LiveJournal: memcached
![Page 39: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/39.jpg)
Лекция 6
LiveJournal: What to cache ?
![Page 40: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/40.jpg)
Лекция 6
LiveJournal: Caching Disadvantages
![Page 41: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/41.jpg)
Лекция 6
LiveJournal: Data Integrity
![Page 42: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/42.jpg)
Лекция 6
LiveJournal: Persistent Connection Woes
![Page 43: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/43.jpg)
Лекция 6
Литература
• http://www.danga.com/words/2005_oscon/oscon-2005.pdf
• http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf
• http://qconlondon.com/dl/qcon-london-2008/slides/RandyShoup_eBaysArchitecturalPrinciples.pdf
• http://www.slideshare.net/tcng3716/ebay-architecture
• http://friendfeed.com/bret/dd79a583/how-friendfeed-uses-mysql-to-store-schema-less
![Page 44: Highload осень 2012 лекция 6](https://reader036.vdocuments.mx/reader036/viewer/2022081506/557ed891d8b42a57098b4775/html5/thumbnails/44.jpg)
Лекция 6
Домашнее задание №3
• Нагрузочное тестирование вашего веб-сервера
• Будем выполнять на следующей лабораторной
работе