highload осень 2012 лекция 6

Post on 15-Jun-2015

83 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Проектирование ПО для высоконагруженных систем

Лекция №6

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

Лекция 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

Лекция 6

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

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

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

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

• SATA – для логов

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

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

Особенности

Лекция 6

Redundant Array of Independent Disks

RAID 0 – Striping

RAID 1 – Mirroring

RAID 5 – Parity

RAID 6 – Double Parity

RAID 10 – Mirrored+Striped

Лекция 6

Hardware RAID

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

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

кеша

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

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

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

Лекция 6

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

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

остальные

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

остальные

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

второй в паре

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

Лекция 6

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

Ext4

• Mainline

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

файлами

XFS

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

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

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

Лекция 6

Logical Volume Manager

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

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

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

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

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

Лекция 6

Базы данных

PostgreSQL

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

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

• Плохо подходит для интенсивной онлайн-

нагрузки

MySQL

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

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

• Репликация

Лекция 6

Базы данных

MySQL: MyISAM

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

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

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

• Table-level lock

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

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

данных

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

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

Лекция 6

Базы данных

MySQL: InnoDB

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

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

• Row-level lock

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

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

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

серверами

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

Лекция 6

MySQL Репликация

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

сервере

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

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

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

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

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

мастера)

Лекция 6

MySQL Alter Table

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

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

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

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

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

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

Лекция 6

Альтернатива Alter Table

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

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

таблиц

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

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

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

Лекция 6

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

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

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

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

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

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

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

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

Лекция 6

Шардинг (Partitioning)

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

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

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

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

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

сервер

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

Лекция 6

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

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

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

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

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

триггеры

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

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

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

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

Лекция 6

Шардинг и репликация

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

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

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

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

Лекция 6

LiveJournal: One Server

Лекция 6

LiveJournal: One Server - Problems

Лекция 6

LiveJournal: Two Servers

Лекция 6

LiveJournal: Two Servers - Problems

Лекция 6

LiveJournal: Four Servers

Лекция 6

LiveJournal: Four Servers - Problems

Лекция 6

LiveJournal: Five Servers

Лекция 6

LiveJournal: Replication Implementation

Лекция 6

LiveJournal: More Servers

Лекция 6

LiveJournal: Where we at….

Лекция 6

LiveJournal: Problems with Architecture

Лекция 6

LiveJournal: Problems with Architecture

Лекция 6

LiveJournal: Spreading Writes

Лекция 6

LiveJournal: Introducing User Clusters

Лекция 6

LiveJournal: User Clusters

Лекция 6

LiveJournal: User Cluster Implementation

Лекция 6

LiveJournal: Where We At….

Лекция 6

LiveJournal: Caching

Лекция 6

LiveJournal: Where to cache ?

Лекция 6

LiveJournal: memcached

Лекция 6

LiveJournal: What to cache ?

Лекция 6

LiveJournal: Caching Disadvantages

Лекция 6

LiveJournal: Data Integrity

Лекция 6

LiveJournal: Persistent Connection Woes

Лекция 6

Домашнее задание №3

• Нагрузочное тестирование вашего веб-сервера

• Будем выполнять на следующей лабораторной

работе

Спасибо за вниманиеАлександр Быков

bykov@corp.mail.ru

top related