Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

HighLoad — повышение пропускной способности by Mind Map: HighLoad —  повышение
пропускной способности
5.0 stars - 4 reviews range from 0 to 5

HighLoad — повышение пропускной способности

P = C / t

Пропускная способность в единицу времени = кол-во одновременно обрабатываемых запросов / время обработки одного запроса

Уменьшение времени отклика

Железо (scale up)

Мощнее процессор

Быстрее storage, SAS, SSD, Intel X25-E, $1000, Ограничения SSD, Ограниченное время жизни, MLC vs SLC, trim, Высокая стоимость, PCIx cards, FusionIO, ~ 6Gb/sec 1M IOPS, OCZ, ~1Gb/sec 100K IOPS, RAID, RAID-0, RAID-1, RAID-10, SAN / NAS, fibrechannel, в основном в enterprise-секторе

Память, Больше кэшей

Оптимизация

premature optimization, 80% опт. алгоритма, 15% опт. кода, 5% отп. машинного кода

"10/90", десять процентов кода "съедают" девяносто процентов производительности системы

замеряйте прежде чем менять!, профайлинг!!!, полноценный профайлер, контрольные точки, мониторинг времени выполнения запросов (к СУБД, внешним API и т.п.)

Работа с СУБД, оптимизация запросов, мониторим медленные запросы, mysql slow log, mk-query-digest, индексы, use EXPLAIN!, денормализация, осознанный отход от нормальных форм, – лишний join – сортировка – группировка – фильтрация – агрегация из разных источников – горизонтальное разбиение таблиц, хороший и правильный запрос к БД – тот, которого нет ;)

Кэширование

Что кэшировать?, Записи из СУБД, NO JOIN !, Результаты вычислений / значения фукнций, Сериализованные объекты, Информационные блоки страниц, HTTP-ответы целиком, Last-Modified / If-Modified-Since, nginx memcached_pass

Нюансы, Надо следить за актуальностью данных в кэше, при изменение данных удаляем ключ в кэше, самый простой способ, при изменении данных синхронно изменяем и в кэше и в БД, экономим один SQL-запрос, писать только в кэш, асинхронно писать в базу, можем всё потерять!, очень мало грузим СУБД, эффективность, соотношения hit / miss / set, "Разогрев" кэша, пока кэш не разогрет -- всё может тормозить, используйте сжатие больших значений, экономит память и сеть

Удаление старых значений, LRU, least recently used, last recently used, timeout expiration

как кэшировать?, memcached, LJ, slashdot, digg, facebook, multi-get, stats, время жизни, LRU и пролонгация, внутри процесса, в файлах, БД, многоуровневое кэширование

Выбор ключа кэширования, serialize($options), Если получаются длинные ключи?, hash($key)

Тюнинг ОС / СУБД / инфраструктурного ПО

Тюнинг ОС, настройки сокетов

Тюнинг СУБД, mysql, query cache, малоэффективен, если много записи, буферы, my-huge.cnf, MySQLTuner, настройки storage engines, innodb_flush_log_at_trx_commit, innodb_flush_method, мониторим, show global status, percona userstatv2 patch, maatkit, Сложно, клоны MySQL, MariaDB, XtraDB

Тюнинг ФС, XFS, ZFS

мониторим нагрузку!, iostat, dstat, top, atop, грамотный сисадмин / администратор СУБД решает!

Хитрости

постепенная генерация / отдача контента, Яндекс SERP на Perl

тяжелые действия асинхронно -- уже после отдечи ответа клиенту

Увеличение количества одновременно обрабатываемых запросов

Масштабирование (кластеры)

График: затраты / профит

Почти никогда не бывает полностью линейным, Overhead, Блокировки, Разделяемые / общие ресурсы, Затраты на коммуникацию / синхронизацию, Алгоритмический overhead

web-серверов

баз-данных

кэширующих серверов, Распределение нагрузки, builtin, обращаемся к любому серверу кластера, он отроутит, ручное, crc32($key) % srv_count, consistent_hash (кольцевой алгоритм), устойчивый к вылетанию нод кластера, нагрузка перераспределяется на "ближайшую" ноду, ketama, a consistent hashing algo for memcache clients

Способы масштабирования, scale up (вертикальное), Больше ядер CPU / больше памяти, ограничения горизонтального масштабирования, scale out (горизонтальное)

Уменьшаем связность, компонентная архитектура (связность в пространстве / монолитность), RPC, асинхронная обработка (связность во времени)

"Иерархия памяти"

с точки зрения скорости доступа

CPU < 1E-9 s

RAM < 1E-6 s

Net < 1E-5 s

Disk < 1E-4 s, "слабое звено", читать лучше помногу и последовательно, запись асинхронная, будущее за SSD