Online Mind Mapping and Brainstorming

Create your own awesome maps

Online Mind Mapping and Brainstorming

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