highload systems: tips & tricks

Post on 23-Jul-2015

297 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

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