highload весна 2014 лекция 6
TRANSCRIPT
![Page 1: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/1.jpg)
Проектирование высоконагруженны
х систем
Лекция №6
Быков Александр
![Page 2: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/2.jpg)
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
2
Дисковая подсистема
HighLoad. Лекция №6
![Page 3: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/3.jpg)
3
HighLoad. Лекция №2
Latency numbers every programmer should know (Jeff Dean)
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns
Mutex lock/unlock 25 ns
Main memory reference 100 ns
Compress 1K bytes with Zippy 3,000 ns
Send 2K bytes over 1 Gbps network 20,000 ns
SSD random read 150,000 ns
Read 1 MB sequentially from memory 250,000 ns
Round trip within same datacenter 500,000 ns 0.5 ms
Read 1 MB sequentially from SSD* 1,000,000 ns 1 ms
Disk seek 10,000,000 ns
10 ms
Read 1 MB sequentially from disk 20,000,000 ns 20 ms
Send packet CA->Netherlands->CA 150,000,000 ns
150 ms
![Page 4: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/4.jpg)
4
Особенности
HighLoad. Лекция №6
• Быстрое линейное чтение
• Медленный случайный доступ
• Конкуренция за диск уменьшает
производительность
• SATA – для логов
• SAS – для баз данных
• SSD – для кеширования
![Page 5: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/5.jpg)
5
Redundant Array of Independent Disks
HighLoad. Лекция №6
RAID 0 – Striping
RAID 1 – Mirroring
RAID 5 – Parity
RAID 6 – Double Parity
RAID 10 – Mirrored+Striped
![Page 6: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/6.jpg)
6
Hardware RAID
HighLoad. Лекция №6
Software RAID
• Не создает нагрузку на систему
• В дорогих вариантах батарейка для записи
кеша
• Пропиетарный формат дисков
• Немного медленнее дорогого аппаратного
• Открытость и совместимость со всем
![Page 7: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/7.jpg)
7
Особенности RAID
HighLoad. Лекция №6
• «Вылетевший» диск увеличивает нагрузку на
остальные
• Синхронизация диска увеличивает нагрузку на
остальные
• Под повышенной нагрузкой может сломаться
второй в паре
• Скорость синхронизации можно регулировать
![Page 8: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/8.jpg)
8
Файловые системы
HighLoad. Лекция №6
Ext4
• Mainline
• Быстрее работа с метадатанными и мелкими
файлами
XFS
• Для работы с большими массивами
• Много багов с производительностью и
стабильностью
• Узкие места активно фиксятся
![Page 9: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/9.jpg)
9
Logical Volume Manager
HighLoad. Лекция №6
• Дополнительный слой виртуализации
• Позволяет делать snapshot раздела на лету
• Snapshot создается в режиме copy-on-write
• Удобно использовать для бэкапа баз данных
• Под нагрузкой откладка снапшота тормозит
![Page 10: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/10.jpg)
10
Базы данных
HighLoad. Лекция №6
PostgreSQL
• Полнофункциональная база данных
• Исправлены проблемы масштабируемости
• Плохо подходит для интенсивной онлайн-нагрузки
MySQL
• Примитивная и быстрая
• Хорошо держит нагрузку
• Репликация
![Page 11: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/11.jpg)
11
MySQL: MyISAM
HighLoad. Лекция №6
• Предельно простая
• Очень быстрое чтение
• Очень быстрая запись в конец
• Table-level lock
• Простой бинарный формат
• Отдельные файлы для формата, индекса, данных
• Бьются данные на пропаже питания
• Потом долгий myisamchk
![Page 12: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/12.jpg)
12
MySQL: MyInnoDB
HighLoad. Лекция №6
• Поддержка транзакций и прочих полезностей
• Сложные запросы лучше не использовать
• Row-level lock
• По-умолчанию все таблицы в одном файле
• Можно включить file-per-table
• Проблемы с hot-backup и переносом между
серверами
• В целом более медленная чем MyISAM
![Page 13: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/13.jpg)
13
MySQL: Репликация
HighLoad. Лекция №6
• Дублирование запросов над базой на ведомом
сервере
• Команды выполняются в один поток (медленно)
• Существует «отставание реплики»
• Реплика является горячим резервом
• С реплики можно снимать бекап
• С реплики можно читать данные (с задержкой от
мастера)
![Page 14: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/14.jpg)
14
MySQL: ALTER TABLE
HighLoad. Лекция №6
• На нагруженной базе невозможен – очень долго
• Делаем ALTER TABLE на реплике
• Блокируем master на запись
• Ждем когда реплика «догонится»
• Переключаем нагрузку на реплику
• Делаем бывший master репликой
![Page 15: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/15.jpg)
15
MySQL: Альтернатива ALTER TABLE
HighLoad. Лекция №6
• Храним все данные объекта в одном JSON-поле
• Индексы по полям делаем в виде отдельных таблиц
• Индексы заполняем программно после данных
• Индексы могут быть сквозными при шардинге
• Хранятся на отдельных шардах
![Page 16: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/16.jpg)
16
Проблема «одной большой базы»
HighLoad. Лекция №6
• Слишком большое кол-во запросов в секунду
• Слишком большое кол-во соединений
• Данные не влезают в диски
• Workset не влезает в оперативную память
• Медленный поиск по большим индексам
• Блокировки на таблицах/строках
• Блокировки на синхронизации
![Page 17: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/17.jpg)
17
Шардинг (Partitioning)
HighLoad. Лекция №6
• По функциям / По идентификаторам
• Создаем одинаковые таблицы на N серверах
• Разбиваем данные на N частей
• Части должны быть достаточно маленькими
• По определенному правилу ходим на нужны сервер
• Появляются понятия «мувить» и «сплитать»
![Page 18: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/18.jpg)
18
Общие правила
HighLoad. Лекция №6
• Не использовать JOIN
• Не использовать транзакции
• Не использовать кеш запросов
• Не использовать хранимые процедуры и триггеры
• Денормализация
• Поиск только по индексу
• Шардинг по Primary Key
• Шардинг по функциям
![Page 19: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/19.jpg)
19
Масштабирование DB-driven проекта
HighLoad. Лекция №6
Рассмотрим на примере LiveJournal:
• Проект с открытым исходным кодом
• Много информации по устройству
• Один из первых крупных проектов на MySQL
![Page 20: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/20.jpg)
LiveJournal: One Server
HighLoad. Лекция №6
20
![Page 21: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/21.jpg)
LiveJournal: One Server - Problems
HighLoad. Лекция №6
21
![Page 22: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/22.jpg)
LiveJournal: Two Servers
HighLoad. Лекция №6
22
![Page 23: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/23.jpg)
LiveJournal: Two Servers - Problems
HighLoad. Лекция №6
23
![Page 24: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/24.jpg)
LiveJournal: Four Servers
HighLoad. Лекция №6
24
![Page 25: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/25.jpg)
LiveJournal: Four Servers - Problems
HighLoad. Лекция №6
25
![Page 26: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/26.jpg)
LiveJournal: Five Servers
HighLoad. Лекция №6
26
![Page 27: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/27.jpg)
LiveJournal: Replication Implementation
HighLoad. Лекция №6
27
![Page 28: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/28.jpg)
LiveJournal: More Servers
HighLoad. Лекция №6
28
![Page 29: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/29.jpg)
LiveJournal: Where we at….
HighLoad. Лекция №6
29
![Page 30: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/30.jpg)
LiveJournal: Problems with Architecture
HighLoad. Лекция №6
30
![Page 31: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/31.jpg)
LiveJournal: Problems with Architecture
HighLoad. Лекция №6
31
![Page 32: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/32.jpg)
LiveJournal: Spreading Writes
HighLoad. Лекция №6
32
![Page 33: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/33.jpg)
LiveJournal: Introducing User Clusters
HighLoad. Лекция №6
33
![Page 34: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/34.jpg)
LiveJournal: User Clusters
HighLoad. Лекция №6
34
![Page 35: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/35.jpg)
LiveJournal: User Cluster Implementation
HighLoad. Лекция №6
35
![Page 36: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/36.jpg)
LiveJournal: Where We At….
HighLoad. Лекция №6
36
![Page 37: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/37.jpg)
LiveJournal: Caching
HighLoad. Лекция №6
37
![Page 38: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/38.jpg)
LiveJournal: Where to cache ?
HighLoad. Лекция №6
38
![Page 39: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/39.jpg)
LiveJournal: memcached
HighLoad. Лекция №6
39
![Page 40: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/40.jpg)
LiveJournal: What to cache ?
HighLoad. Лекция №6
40
![Page 41: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/41.jpg)
LiveJournal: Caching Disadvantages
HighLoad. Лекция №6
41
![Page 42: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/42.jpg)
LiveJournal: Data Integrity
HighLoad. Лекция №6
42
![Page 43: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/43.jpg)
LiveJournal: Persistent Connection Woes
HighLoad. Лекция №6
43
![Page 44: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/44.jpg)
44
HighLoad. Лекция №6
Литература
http://www.danga.com/words/2005_oscon/oscon-2005.p
df
http://www.addsimplicity.com/downloads/eBaySDForum2
006-11-29.pdf
http://qconlondon.com/dl/qcon-london-2008/slides/Rand
yShoup_eBaysArchitecturalPrinciples.pdf
http://www.slideshare.net/tcng3716/ebay-architecture
http://friendfeed.com/bret/dd79a583/how-friendfeed-use
s-mysql-to-store-schema-less
![Page 45: HighLoad весна 2014 лекция 6](https://reader034.vdocuments.net/reader034/viewer/2022051616/555e1a43d8b42a99188b584f/html5/thumbnails/45.jpg)
45
HighLoad. Лекция №6
Домашнее задание №4
В группах по 3 человека провести анализ архитектуры
крупного интернет-проекта на выбор и сделать доклад
http://www.alexa.com/topsites/global - Alexa Top 500 Sites
Зарезервировать за своей группой проект по ссылке:
https
://docs.google.com/spreadsheet/ccc?key=0AowTSGGf6bJMd
DhITzJvS3FBR3BZVDY5aHVwSjZqMEE&usp=
sharing