highload весна 2014 лекция 6
TRANSCRIPT
Проектирование высоконагруженны
х систем
Лекция №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
2
Дисковая подсистема
HighLoad. Лекция №6
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
4
Особенности
HighLoad. Лекция №6
• Быстрое линейное чтение
• Медленный случайный доступ
• Конкуренция за диск уменьшает
производительность
• SATA – для логов
• SAS – для баз данных
• SSD – для кеширования
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
6
Hardware RAID
HighLoad. Лекция №6
Software RAID
• Не создает нагрузку на систему
• В дорогих вариантах батарейка для записи
кеша
• Пропиетарный формат дисков
• Немного медленнее дорогого аппаратного
• Открытость и совместимость со всем
7
Особенности RAID
HighLoad. Лекция №6
• «Вылетевший» диск увеличивает нагрузку на
остальные
• Синхронизация диска увеличивает нагрузку на
остальные
• Под повышенной нагрузкой может сломаться
второй в паре
• Скорость синхронизации можно регулировать
8
Файловые системы
HighLoad. Лекция №6
Ext4
• Mainline
• Быстрее работа с метадатанными и мелкими
файлами
XFS
• Для работы с большими массивами
• Много багов с производительностью и
стабильностью
• Узкие места активно фиксятся
9
Logical Volume Manager
HighLoad. Лекция №6
• Дополнительный слой виртуализации
• Позволяет делать snapshot раздела на лету
• Snapshot создается в режиме copy-on-write
• Удобно использовать для бэкапа баз данных
• Под нагрузкой откладка снапшота тормозит
10
Базы данных
HighLoad. Лекция №6
PostgreSQL
• Полнофункциональная база данных
• Исправлены проблемы масштабируемости
• Плохо подходит для интенсивной онлайн-нагрузки
MySQL
• Примитивная и быстрая
• Хорошо держит нагрузку
• Репликация
11
MySQL: MyISAM
HighLoad. Лекция №6
• Предельно простая
• Очень быстрое чтение
• Очень быстрая запись в конец
• Table-level lock
• Простой бинарный формат
• Отдельные файлы для формата, индекса, данных
• Бьются данные на пропаже питания
• Потом долгий myisamchk
12
MySQL: MyInnoDB
HighLoad. Лекция №6
• Поддержка транзакций и прочих полезностей
• Сложные запросы лучше не использовать
• Row-level lock
• По-умолчанию все таблицы в одном файле
• Можно включить file-per-table
• Проблемы с hot-backup и переносом между
серверами
• В целом более медленная чем MyISAM
13
MySQL: Репликация
HighLoad. Лекция №6
• Дублирование запросов над базой на ведомом
сервере
• Команды выполняются в один поток (медленно)
• Существует «отставание реплики»
• Реплика является горячим резервом
• С реплики можно снимать бекап
• С реплики можно читать данные (с задержкой от
мастера)
14
MySQL: ALTER TABLE
HighLoad. Лекция №6
• На нагруженной базе невозможен – очень долго
• Делаем ALTER TABLE на реплике
• Блокируем master на запись
• Ждем когда реплика «догонится»
• Переключаем нагрузку на реплику
• Делаем бывший master репликой
15
MySQL: Альтернатива ALTER TABLE
HighLoad. Лекция №6
• Храним все данные объекта в одном JSON-поле
• Индексы по полям делаем в виде отдельных таблиц
• Индексы заполняем программно после данных
• Индексы могут быть сквозными при шардинге
• Хранятся на отдельных шардах
16
Проблема «одной большой базы»
HighLoad. Лекция №6
• Слишком большое кол-во запросов в секунду
• Слишком большое кол-во соединений
• Данные не влезают в диски
• Workset не влезает в оперативную память
• Медленный поиск по большим индексам
• Блокировки на таблицах/строках
• Блокировки на синхронизации
17
Шардинг (Partitioning)
HighLoad. Лекция №6
• По функциям / По идентификаторам
• Создаем одинаковые таблицы на N серверах
• Разбиваем данные на N частей
• Части должны быть достаточно маленькими
• По определенному правилу ходим на нужны сервер
• Появляются понятия «мувить» и «сплитать»
18
Общие правила
HighLoad. Лекция №6
• Не использовать JOIN
• Не использовать транзакции
• Не использовать кеш запросов
• Не использовать хранимые процедуры и триггеры
• Денормализация
• Поиск только по индексу
• Шардинг по Primary Key
• Шардинг по функциям
19
Масштабирование DB-driven проекта
HighLoad. Лекция №6
Рассмотрим на примере LiveJournal:
• Проект с открытым исходным кодом
• Много информации по устройству
• Один из первых крупных проектов на MySQL
LiveJournal: One Server
HighLoad. Лекция №6
20
LiveJournal: One Server - Problems
HighLoad. Лекция №6
21
LiveJournal: Two Servers
HighLoad. Лекция №6
22
LiveJournal: Two Servers - Problems
HighLoad. Лекция №6
23
LiveJournal: Four Servers
HighLoad. Лекция №6
24
LiveJournal: Four Servers - Problems
HighLoad. Лекция №6
25
LiveJournal: Five Servers
HighLoad. Лекция №6
26
LiveJournal: Replication Implementation
HighLoad. Лекция №6
27
LiveJournal: More Servers
HighLoad. Лекция №6
28
LiveJournal: Where we at….
HighLoad. Лекция №6
29
LiveJournal: Problems with Architecture
HighLoad. Лекция №6
30
LiveJournal: Problems with Architecture
HighLoad. Лекция №6
31
LiveJournal: Spreading Writes
HighLoad. Лекция №6
32
LiveJournal: Introducing User Clusters
HighLoad. Лекция №6
33
LiveJournal: User Clusters
HighLoad. Лекция №6
34
LiveJournal: User Cluster Implementation
HighLoad. Лекция №6
35
LiveJournal: Where We At….
HighLoad. Лекция №6
36
LiveJournal: Caching
HighLoad. Лекция №6
37
LiveJournal: Where to cache ?
HighLoad. Лекция №6
38
LiveJournal: memcached
HighLoad. Лекция №6
39
LiveJournal: What to cache ?
HighLoad. Лекция №6
40
LiveJournal: Caching Disadvantages
HighLoad. Лекция №6
41
LiveJournal: Data Integrity
HighLoad. Лекция №6
42
LiveJournal: Persistent Connection Woes
HighLoad. Лекция №6
43
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
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