highload systems: tips & tricks
Post on 23-Jul-2015
302 Views
Preview:
TRANSCRIPT
Высоконагруженные проекты: что нужно знать, чтобы этим
заниматься
Божко Светлана,Adform BY
Кто я?• Scala Backend Developer• Data Processing Team
BigData & HighLoad
Service-‐oriented Architecture (SOA) & Microservices• Каждая часть отвечает за что-‐то одно. Они разделены.• Один упал -‐> продолжаем работать без него.
• Почта.• Профили.• Лента.• Видео.
Функциональная декомпозиция
Кеширование
• Эффективность кеша.• Hit ratio.• Какова вероятность того, что требуемые данные попадут в кеш?• Устаревание и когерентность кеша.
Вертикальное масштабирование
Горизонтальное масштабирование
• Не имеющие ничего общего исполнители.• Выступают как единая сущность.• Равноправные.• Не храним состояния.• Нет общих узлов.• Нет единой точки отказа.
Балансировщики нагрузки
• Domain Name System (DNS).• Алгоритм Round Robin.• Различные программные или аппаратные решения, а также их комбинации.
Децентрализованные распределенные системы• Принцип «равный равному» (peer-‐to-‐peer, P2P).• Компонентам системы не нужно знать об общей структуре всей сети. • Распространение информации внутри системы возможно по принципу «молвы», то есть цепного распространения через «соседей».• BitTorrent.• Gossip protocol (Cassandra).• Алгоритмы консенсуса: Raft, Paxos, Byzantine.• Net split, split brain.• CAP.
Асинхронность, очереди задач• Множество задач не требует немедленного выполнения (статистика, почта, обновление френдленты)• Парадигма «подписка/публикация»• Шина данных• Для выполнения ресурсоемких/длительных задач (конвертация фото/видео)• Независимость от ЯП
Шардинг
• Разделение данных на уровне ресурсов. Концепция шардинга заключается в логическом разделении данных по различным ресурсам исходя из требований к нагрузке.• F(key) = hash(key) % nSrv.• Виртуальный шардинг.• Альтернатива – центральный диспетчер, который умеет разбивать запросы пользователей.
Репликация
• Синхронное/асинхронное копирование данных с ведущих серверов на ведомые (или возможно тоже ведущие) сервера. • Ведущие сервера называют мастерами (master), ведомые —слейвами (slave).
• Введение избыточности: NoSql (профили) + RDBMS (для статистики).
Денормализация данных
• Какие данные нужны сервису?• Как часто он будет их запрашивать?• Например, анкета, где малая часть полей показывается везде.• Избыточные данные.• Например, разная логика. Настолько, что таблицы нужно по-‐разному оформить.
Партиционирование таблиц
• Разбиение больших таблиц на логические части по выбранным критериям.• Чтение в большинстве случаев приходится только на самую последнюю часть таблиц (т.е. активно читаются те данные, которые недавно появились).• Блог — на первую страницу (это последние 5…10 постов) приходится 40…50% всей нагрузки. Или новостной, или системы личных сообщений.
Потоки данных
• Параллельное выполнение.• Например, поисковик. Как думаете, сколько машин выполняют ваш запрос?• Дерево ответственностей. Разделение чтения и записи. CQRS.• MapReduce.
О чем думать при проектировании/разработке?• Бизнес-‐логика. Что может делать пользователь/клиент? Правила обработки информации.• Что является проблемой? Какие особенности движения данных будем использовать?• Объем хранимых данных. Скорость их прироста. Соотношение чтения/записи.• Чем можно пренебречь? Допустимая деградация системы.• Не забыть сломать систему!J Load/Crash Testing
Что почитать по теме?
• http://book.mixu.net/distsys/
Спасибо за внимание! Вопросы!
• Светлана Божко• svt.bozhko@gmail.com• s.bozhko@adform.com• @SBozhko• http://devzen.ru/
top related