highload весна 2014 лекция 6

46
Проектирование высоконагруженных систем Лекция №6 Быков Александр

Upload: technopark

Post on 22-May-2015

286 views

Category:

Education


2 download

TRANSCRIPT

Page 1: HighLoad весна 2014 лекция 6

Проектирование высоконагруженны

х систем

Лекция №6

Быков Александр

Page 2: HighLoad весна 2014 лекция 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

Page 3: HighLoad весна 2014 лекция 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

Page 4: HighLoad весна 2014 лекция 6

4

Особенности

HighLoad. Лекция №6

• Быстрое линейное чтение

• Медленный случайный доступ

• Конкуренция за диск уменьшает

производительность

• SATA – для логов

• SAS – для баз данных

• SSD – для кеширования

Page 5: HighLoad весна 2014 лекция 6

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

6

Hardware RAID

HighLoad. Лекция №6

Software RAID

• Не создает нагрузку на систему

• В дорогих вариантах батарейка для записи

кеша

• Пропиетарный формат дисков

• Немного медленнее дорогого аппаратного

• Открытость и совместимость со всем

Page 7: HighLoad весна 2014 лекция 6

7

Особенности RAID

HighLoad. Лекция №6

• «Вылетевший» диск увеличивает нагрузку на

остальные

• Синхронизация диска увеличивает нагрузку на

остальные

• Под повышенной нагрузкой может сломаться

второй в паре

• Скорость синхронизации можно регулировать

Page 8: HighLoad весна 2014 лекция 6

8

Файловые системы

HighLoad. Лекция №6

Ext4

• Mainline

• Быстрее работа с метадатанными и мелкими

файлами

XFS

• Для работы с большими массивами

• Много багов с производительностью и

стабильностью

• Узкие места активно фиксятся

Page 9: HighLoad весна 2014 лекция 6

9

Logical Volume Manager

HighLoad. Лекция №6

• Дополнительный слой виртуализации

• Позволяет делать snapshot раздела на лету

• Snapshot создается в режиме copy-on-write

• Удобно использовать для бэкапа баз данных

• Под нагрузкой откладка снапшота тормозит

Page 10: HighLoad весна 2014 лекция 6

10

Базы данных

HighLoad. Лекция №6

PostgreSQL

• Полнофункциональная база данных

• Исправлены проблемы масштабируемости

• Плохо подходит для интенсивной онлайн-нагрузки

MySQL

• Примитивная и быстрая

• Хорошо держит нагрузку

• Репликация

Page 11: HighLoad весна 2014 лекция 6

11

MySQL: MyISAM

HighLoad. Лекция №6

• Предельно простая

• Очень быстрое чтение

• Очень быстрая запись в конец

• Table-level lock

• Простой бинарный формат

• Отдельные файлы для формата, индекса, данных

• Бьются данные на пропаже питания

• Потом долгий myisamchk

Page 12: HighLoad весна 2014 лекция 6

12

MySQL: MyInnoDB

HighLoad. Лекция №6

• Поддержка транзакций и прочих полезностей

• Сложные запросы лучше не использовать

• Row-level lock

• По-умолчанию все таблицы в одном файле

• Можно включить file-per-table

• Проблемы с hot-backup и переносом между

серверами

• В целом более медленная чем MyISAM

Page 13: HighLoad весна 2014 лекция 6

13

MySQL: Репликация

HighLoad. Лекция №6

• Дублирование запросов над базой на ведомом

сервере

• Команды выполняются в один поток (медленно)

• Существует «отставание реплики»

• Реплика является горячим резервом

• С реплики можно снимать бекап

• С реплики можно читать данные (с задержкой от

мастера)

Page 14: HighLoad весна 2014 лекция 6

14

MySQL: ALTER TABLE

HighLoad. Лекция №6

• На нагруженной базе невозможен – очень долго

• Делаем ALTER TABLE на реплике

• Блокируем master на запись

• Ждем когда реплика «догонится»

• Переключаем нагрузку на реплику

• Делаем бывший master репликой

Page 15: HighLoad весна 2014 лекция 6

15

MySQL: Альтернатива ALTER TABLE

HighLoad. Лекция №6

• Храним все данные объекта в одном JSON-поле

• Индексы по полям делаем в виде отдельных таблиц

• Индексы заполняем программно после данных

• Индексы могут быть сквозными при шардинге

• Хранятся на отдельных шардах

Page 16: HighLoad весна 2014 лекция 6

16

Проблема «одной большой базы»

HighLoad. Лекция №6

• Слишком большое кол-во запросов в секунду

• Слишком большое кол-во соединений

• Данные не влезают в диски

• Workset не влезает в оперативную память

• Медленный поиск по большим индексам

• Блокировки на таблицах/строках

• Блокировки на синхронизации

Page 17: HighLoad весна 2014 лекция 6

17

Шардинг (Partitioning)

HighLoad. Лекция №6

• По функциям / По идентификаторам

• Создаем одинаковые таблицы на N серверах

• Разбиваем данные на N частей

• Части должны быть достаточно маленькими

• По определенному правилу ходим на нужны сервер

• Появляются понятия «мувить» и «сплитать»

Page 18: HighLoad весна 2014 лекция 6

18

Общие правила

HighLoad. Лекция №6

• Не использовать JOIN

• Не использовать транзакции

• Не использовать кеш запросов

• Не использовать хранимые процедуры и триггеры

• Денормализация

• Поиск только по индексу

• Шардинг по Primary Key

• Шардинг по функциям

Page 19: HighLoad весна 2014 лекция 6

19

Масштабирование DB-driven проекта

HighLoad. Лекция №6

Рассмотрим на примере LiveJournal:

• Проект с открытым исходным кодом

• Много информации по устройству

• Один из первых крупных проектов на MySQL

Page 20: HighLoad весна 2014 лекция 6

LiveJournal: One Server

HighLoad. Лекция №6

20

Page 21: HighLoad весна 2014 лекция 6

LiveJournal: One Server - Problems

HighLoad. Лекция №6

21

Page 22: HighLoad весна 2014 лекция 6

LiveJournal: Two Servers

HighLoad. Лекция №6

22

Page 23: HighLoad весна 2014 лекция 6

LiveJournal: Two Servers - Problems

HighLoad. Лекция №6

23

Page 24: HighLoad весна 2014 лекция 6

LiveJournal: Four Servers

HighLoad. Лекция №6

24

Page 25: HighLoad весна 2014 лекция 6

LiveJournal: Four Servers - Problems

HighLoad. Лекция №6

25

Page 26: HighLoad весна 2014 лекция 6

LiveJournal: Five Servers

HighLoad. Лекция №6

26

Page 27: HighLoad весна 2014 лекция 6

LiveJournal: Replication Implementation

HighLoad. Лекция №6

27

Page 28: HighLoad весна 2014 лекция 6

LiveJournal: More Servers

HighLoad. Лекция №6

28

Page 29: HighLoad весна 2014 лекция 6

LiveJournal: Where we at….

HighLoad. Лекция №6

29

Page 30: HighLoad весна 2014 лекция 6

LiveJournal: Problems with Architecture

HighLoad. Лекция №6

30

Page 31: HighLoad весна 2014 лекция 6

LiveJournal: Problems with Architecture

HighLoad. Лекция №6

31

Page 32: HighLoad весна 2014 лекция 6

LiveJournal: Spreading Writes

HighLoad. Лекция №6

32

Page 33: HighLoad весна 2014 лекция 6

LiveJournal: Introducing User Clusters

HighLoad. Лекция №6

33

Page 34: HighLoad весна 2014 лекция 6

LiveJournal: User Clusters

HighLoad. Лекция №6

34

Page 35: HighLoad весна 2014 лекция 6

LiveJournal: User Cluster Implementation

HighLoad. Лекция №6

35

Page 36: HighLoad весна 2014 лекция 6

LiveJournal: Where We At….

HighLoad. Лекция №6

36

Page 37: HighLoad весна 2014 лекция 6

LiveJournal: Caching

HighLoad. Лекция №6

37

Page 38: HighLoad весна 2014 лекция 6

LiveJournal: Where to cache ?

HighLoad. Лекция №6

38

Page 39: HighLoad весна 2014 лекция 6

LiveJournal: memcached

HighLoad. Лекция №6

39

Page 40: HighLoad весна 2014 лекция 6

LiveJournal: What to cache ?

HighLoad. Лекция №6

40

Page 41: HighLoad весна 2014 лекция 6

LiveJournal: Caching Disadvantages

HighLoad. Лекция №6

41

Page 42: HighLoad весна 2014 лекция 6

LiveJournal: Data Integrity

HighLoad. Лекция №6

42

Page 43: HighLoad весна 2014 лекция 6

LiveJournal: Persistent Connection Woes

HighLoad. Лекция №6

43

Page 45: HighLoad весна 2014 лекция 6

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

Page 46: HighLoad весна 2014 лекция 6

СПАСИБО ЗА ВНИМАНИЕ

Быков Александр

[email protected]