highload systems: tips & tricks

19
Высоконагруженные проекты: что нужно знать, чтобы этим заниматься Божко Светлана, Adform BY

Upload: svetlana-bozhko

Post on 23-Jul-2015

297 views

Category:

Software


3 download

TRANSCRIPT

Page 1: HighLoad systems: tips & tricks

Высоконагруженные  проекты:  что  нужно  знать,  чтобы  этим  

заниматься

Божко  Светлана,Adform  BY

Page 2: HighLoad systems: tips & tricks

Кто  я?• Scala  Backend  Developer• Data  Processing  Team

Page 3: HighLoad systems: tips & tricks

BigData  &  HighLoad

Page 4: HighLoad systems: tips & tricks

Service-­‐oriented  Architecture  (SOA)  &  Microservices• Каждая  часть  отвечает  за  что-­‐то  одно.  Они  разделены.• Один  упал  -­‐>  продолжаем  работать  без  него.

• Почта.• Профили.• Лента.• Видео.

Page 5: HighLoad systems: tips & tricks

Функциональная  декомпозиция

Page 6: HighLoad systems: tips & tricks

Кеширование

• Эффективность  кеша.• Hit  ratio.• Какова  вероятность  того,  что  требуемые  данные  попадут  в  кеш?• Устаревание  и  когерентность  кеша.

Page 7: HighLoad systems: tips & tricks

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

Page 8: HighLoad systems: tips & tricks

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

• Не  имеющие  ничего  общего  исполнители.• Выступают  как  единая  сущность.• Равноправные.• Не  храним  состояния.• Нет  общих  узлов.• Нет  единой  точки  отказа.

Page 9: HighLoad systems: tips & tricks

Балансировщики  нагрузки

• Domain  Name  System  (DNS).• Алгоритм  Round  Robin.• Различные  программные  или  аппаратные  решения,  а  также  их  комбинации.

Page 10: HighLoad systems: tips & tricks

Децентрализованные  распределенные  системы• Принцип  «равный  равному»  (peer-­‐to-­‐peer,  P2P).• Компонентам  системы  не  нужно  знать  об  общей  структуре  всей  сети.  • Распространение  информации  внутри  системы  возможно  по  принципу  «молвы»,  то  есть  цепного  распространения  через  «соседей».• BitTorrent.• Gossip  protocol  (Cassandra).• Алгоритмы  консенсуса:  Raft,  Paxos,  Byzantine.• Net  split,  split  brain.• CAP.

Page 11: HighLoad systems: tips & tricks

Асинхронность,  очереди  задач• Множество  задач  не  требует  немедленного  выполнения  (статистика,  почта,  обновление  френдленты)• Парадигма  «подписка/публикация»• Шина  данных• Для  выполнения  ресурсоемких/длительных  задач  (конвертация  фото/видео)• Независимость  от  ЯП

Page 12: HighLoad systems: tips & tricks

Шардинг

• Разделение  данных  на  уровне  ресурсов.  Концепция  шардинга  заключается  в  логическом  разделении  данных  по  различным  ресурсам  исходя  из  требований  к  нагрузке.• F(key)  =  hash(key)  %  nSrv.• Виртуальный  шардинг.• Альтернатива  – центральный  диспетчер,  который  умеет  разбивать  запросы  пользователей.

Page 13: HighLoad systems: tips & tricks

Репликация

• Синхронное/асинхронное  копирование  данных  с  ведущих  серверов  на  ведомые  (или  возможно  тоже  ведущие)  сервера.  • Ведущие  сервера  называют мастерами (master),  ведомые  —слейвами (slave).  

• Введение  избыточности:  NoSql (профили) +  RDBMS  (для  статистики).

Page 14: HighLoad systems: tips & tricks

Денормализация  данных

• Какие  данные  нужны  сервису?• Как  часто  он  будет  их  запрашивать?• Например,  анкета,  где  малая  часть  полей  показывается  везде.• Избыточные  данные.• Например,  разная  логика.  Настолько,  что  таблицы  нужно  по-­‐разному  оформить.

Page 15: HighLoad systems: tips & tricks

Партиционирование  таблиц

• Разбиение  больших  таблиц  на  логические  части  по  выбранным  критериям.• Чтение  в  большинстве  случаев  приходится  только  на  самую  последнюю  часть  таблиц  (т.е.  активно  читаются  те  данные,  которые  недавно  появились).• Блог  — на  первую  страницу  (это  последние  5…10  постов)  приходится  40…50%  всей  нагрузки.  Или  новостной,  или  системы  личных  сообщений.

Page 16: HighLoad systems: tips & tricks

Потоки  данных

• Параллельное  выполнение.• Например,  поисковик.  Как  думаете,  сколько  машин  выполняют  ваш  запрос?• Дерево  ответственностей. Разделение  чтения  и  записи.  CQRS.• MapReduce.  

Page 17: HighLoad systems: tips & tricks

О  чем  думать  при  проектировании/разработке?• Бизнес-­‐логика.  Что  может  делать  пользователь/клиент?  Правила  обработки  информации.• Что  является  проблемой?  Какие  особенности  движения  данных  будем  использовать?• Объем  хранимых  данных.  Скорость  их  прироста.  Соотношение  чтения/записи.• Чем  можно  пренебречь?  Допустимая  деградация  системы.• Не  забыть  сломать  систему!J Load/Crash  Testing

Page 18: HighLoad systems: tips & tricks

Что  почитать  по  теме?

• http://book.mixu.net/distsys/

Page 19: HighLoad systems: tips & tricks

Спасибо  за  внимание!  Вопросы!

• Светлана  Божко• [email protected][email protected]• @SBozhko• http://devzen.ru/