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

Post on 22-May-2015

284 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

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

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

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

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

bykov@corp.mail.ru

top related