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 - 1 reviews range from 0 to 5

HighLoad

Виды кластеров

HP

High Performance

HA

High Availability

HL

High Load

Enterprise vs WebSphere

Бесплатный софт

Огромное количество машин, накладные расходы

Открытый софт

manageable

нет полностью готовых решений, всё собирается как из конструктора

Относительно дешёвое железо

Основные проблемы и вызовы

Большая нагрузка (тысячи и миллионы хитов)

Высокие ставки

Потребность в быстрой разработке, Высококонкурентное окружение

Высокие риски, резкий рост нагрузок, Высокая надёжность, DDoS

Большая ответственность на разработчике

Зоопарк технологий и сервисов

Большая команда

Хороший проект

Технический менеджмент

Системное администрирование

Поддержка

Разработка

Ловушки

не масштабируемая архитуктура, высокая степень связности, данные, компоненты

"полурешения", накапливаемые риски

"горе от ума", теоретики vs практики

Уровни зрелости высоконагруженного проекта

Рост проекта

Один сервер

Несколько серверов

Много серверов (сотни, тысячи)

Много ДЦ

Переход между уровнями -- обычно кризис

Ключевое значение -- масштабируемая архитектура

Грамотное многоуровневое проектирование

Масштабируемость и производительность должна учитываться на всех уровнях, Софт, Библиотеки, СУБД, ФС, hardware: диски, память, сеть, CPU

Как будем повышать пропускную способность?

P = C / t

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

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

Оптимизация, premature optimization, 80% опт. алгоритма, 15% опт. кода, 5% отп. машинного кода, замеряйте прежде чем менять!

Кэширование

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

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

Масштабирование, График: затраты / профит, Почти никогда не бывает полностью линейным, Overhead, Блокировки, Разделяемые / общие ресурсы, Затраты на коммуникацию / синхронизацию, Алгоритмический overhead, web-серверов, баз-данных, Способы масштабирования, scale up (вертикальное), Больше ядер CPU / больше памяти, ограничения горизонтального масштабирования, scale out (горизонтальное), Уменьшаем связность, компонентная архитектура (связность в пространстве / монолитность), RPC, асинхронная обработка (связность во времени)

Масштибирование web-серверов

Ловушки / проблемы

share nothing, примеры: общие данные на NFS: сессии, код, минимум доступа к разделяемым ресурсам, share accuretely

общий кэш, больше cache hits

Frontend / акселлератор

Двухуровневая система: frontend / backend, принципиально разные задачи у frontend и backend, Разве повар вместо официанта принимает заказ?

Преимущества, Медленные клиенты (spoon feeding), Большое количество соединений (> 100000), Раздача статики, Кэширование динамики, Шифрование, Сжатие трафика, Аутентификация, Интеллектуальная обработка / доп. логика, nginx-perl

Примеры, nginx, haproxy, lighttpd

Способы распределения нагрузки

DNS-LB, TTL

IP AnyCast, BGP

IP-LB (Layer-4), Linux IPVS, FreeBSD CARP, M$ NLB

http-проксирование / reverse proxy (Layer-7)

http-переадресация

технологии CDN

Масштабирование баз данных

scale up (более мощное железо)

Больше CPU, Ограниченная масштабируемость большинства СУБД, Особенно mysql

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

Нелинейный эффект от вложения денег

Репликация

Виды, Синхронная / асинхронная, master-master / master-slave

Проблемы, Выигрыш нелинейный, Большой overhead на синхронизацию, иерархия серверов, maatkit, Неконсистентные данные, Репликация в один тред, Запись не масштабируется!, master / master, сложно, ненадёжно

Как роутить чтение между серверами, proxy, mysqlproxy, pgproxy, "sql proxy" от slonik_v_domene

Вертикальное масштабирование

Выделение ролей для серверов (разные таблицы на разных серверах), Проблемы, Всё равно упираемся в пределы физической машины, Ограниченный профит, До свиданья джойны...

Partitioning (разные куски таблицы / разные таблицы на разных дисках), Можно физически хранить на разных storage..., Минусы, Узким местом всё равно становится CPU / масштабируемость СУБД

Горизонтальное масштабирование

Плюсы, Неограниченное масштабирование

Как разделять данные, Статически, По "первой букве", Хэш-функции, Остаток от деления, По дате, По диапазону ID PK, Проблемы -- слишком жёсткие правила, неудобно добавлять серверы, "Математические трюки": 12, 24..., Динамически, добавление новых машин, замена, перенос, балансировка – без изменения кода, Минус: SPOF, высокая нагрузка, Роутинг, proxy, координирующий сервер

Решения, Вручную, внутри приложения, Нужно писать прослойку для работы с данными, proxy, PL/Proxy, mysqlproxy, LUA

Минусы, Нельзя JOINs, Усложняется доступ к данным

Алгоритмы

Очереди

Всё что можно сделать потом -- делаем потом

Примеры, Почта: двойная асинхронность, Комментарии к постам в блоге, Счётчик комментариев

Реализации, PgQ, Gearman, RabbitMQ

Плюсы, Сглаживает пики нагрузки, Меньше требования к мощностям, Уменьшает время отклика

Минусы, Нет транзакций, Данные неконсистентны, Применяем внимательно и точечно

Асинхронный ввод-вывод

Perl-библиотеки, AnyEvent, Coro, POE, IOl::Lambda

Механизмы ОС, неблокирующиеся сокеты, epoll, kqueue, WaitForMultipleObjects

Распределённая обработка данных

Алгоритмы, MapReduce

Реализации, Hadoop, HDFS, HBase, Cassandra

Хранение данных

CAP-теорема (теорема Брюера)

Принципы, Consisency, Availability, Partition tolerance

Рабочие комбинации, CA, ACID-СУБД, LDAP, CP, AP, DNS, eventually consystent, weak consistent, BASE, Basically Available, в случае сбоев страдает только часть системы / сессий, Soft-state, возможность жертвовать долговременным хранением состояния сессий, Eventually consistent, обеспечении согласования в практически обозримое время

Транзакционная целостность

ACID, Atomicity, что никакая транзакция не будет зафиксирована в системе частично, commit / rollback, Consistency, Согласованность данных, Isolation, другие процессы не должны видеть данные в промежуточном состоянии, Durability, успешные транзакции обязаны быть сохранены

Альтернативы реляционным СУБД / NoSQL

Ключ-значение key / value

Основные особенности, Хорошее горизонтальное масштабирование, Partitioning, Простые API, Отказ от транзакционной целостности, Нетабличная структура

Примеры, memcached, BerkleyDB, MemcacheDB, Redis, MongoDB, tarantool, CouchDB, Membase

Протоколы, UnQL, Unstructured Query Language

Полнотекстовый поиск

sphynx

apache solr

Объектные БД

Caché

Column-based СУБД

Плюсы, Каждую колонку можно отсортировать по своему, Не нужны индексы, Эффективное сжатие данных, Уже посчитанная статистика

примеры, Infobright, InfiniDB, MonetDB

Гибридные механизмы

HandlerSocket