Архітектура високих навантажень
Досвід та інсайти від інженера, який 12 років створює програмне забезпечення для Google
Ярослав Літус
Staff Software Engineer у Goo gle

Навчитеся розробляти дизайн систем так, щоби вони могли легко масштабуватися, зберігаючи компроміс між надійністю, ресурсами та часом.
Дізнаєтесь, як великі світові компанії ладнають із високим навантаженням, розробите власну Highload-архітектуру і навчитеся вибирати відповідні рішення з огляду на завдання бізнесу.
Отримаєте фундаментальні знання у галузі системного дизайну, зрозумієте, які технології застосовувати у тій чи іншій ситуації, та зможете оцінювати витрати на реалізацію складних рішень.

Через неправильно спроєктовані системи розпадаються команди, а проєкти завершуються навіть не почавшись. Як розробляти архітектуру, яка зможе витримати мільйони користувачів одночасно, знає Ярослав Літус. Останні 12 років він будує та інтегрує масивні розподілені Highload-системи в Google.
На курсі Ярослав поділиться досвідом та навчить проєктувати системи на старті так, щоби вони могли масштабуватись у будь-який момент і водночас коректно працювати.
Ви отримаєте фундаментальні знання у галузі системного дизайну, розберете кейси відомих компаній, навчитеся застосовувати та адаптувати сучасні Highload-практики.
Дізнаєтесь, які технології лежать в основі масштабованих і стійких до відмови систем і як світові компанії ладнають із високим навантаженням. Навчитеся застосовувати та адаптувати сучасні Highload-практики.
Зрозумієте важливість правильної архітектури систем на реальних кейсах, зокрема на прикладі Obamacare. Навчитеся проєктувати та розробляти системи, які можуть витримати >1 млн користувачів щодня.
Зможете оптимізувати роботу наявних систем на вашій поточній роботі та навчитеся визначати вартість впровадження того чи іншого рішення під завдання бізнесу.
5 студентів, які наберуть найбільше балів за підсумками самостійних завдань, пройдуть з Ярославом тестове технічне інтерв’ю.

Дізнайтеся, що таке Highload та Data-Intensive Apps. Розберіться в завданнях, які стоять перед архітектором високонавантажених систем, та зрозумійте, з якими проблемами він стикається у своїй роботі. Познайомтеся з основними принципами, що допомагають побудувати систему from 0 to millions users. Навчіться робити грубі розрахунки архітектури застосунків. Зробіть першу чернетку Highload-дизайну.
Розберіться в базових термінах, що застосовуються в Highload-архітектурі. Дізнайтеся trade-offs високонавантажених систем: як знайти компроміс між надійністю, можливістю масштабуватися та швидко відновлюватися після падіння. Навчіться збирати та складати вимоги до застосування.
Вивчіть глибинну різницю між форматами зберігання та передачі даних [JSON/XML/Binary]. Ознайомтеся з перевагами та недоліками кожного підходу та навчіться вибирати підхід з огляду на свої завдання та вимоги бізнесу.
Дізнайтесь, як працює комунікація програми із зовнішнім світом. Розберіться у відмінностях Load Balancer. Ознайомтеся з різними методами імплементації Rate Limiter. Навчіться обирати оптимальний варіант комунікації з огляду на вимоги бізнесу. Напишіть алгоритм Rate Limiter.
Ознайомтеся з моделями даних [Database-through model (Реєстр/RPC), Message-passing model]. Дізнайтеся про переваги та недоліки кожної моделі. Навчіться обирати модель з огляду на конкретні вимоги.
Ознайомтеся з моделями зберігання даних [Relational model та Document-based model]. Розберіть різницю між declarative query languages та imperative query languages. Вивчіть життєвий цикл Database Management System [DBMS]. Ознайомтеся з моделями графових даних. Навчіться обирати найкращий варіант зберігання даних з огляду на вимоги бізнесу.
Дізнайтесь, як влаштовані бази даних і в якому вигляді зберігається інформація. Знайдіть потрібну інформацію за допомогою індексів. Оберіть оптимальний варіант DBMS з огляду на вимоги бізнесу щодо зберігання даних.
Дізнайтесь, як зберігати дані для аналітики. Ознайомтеся з алгоритмом побудови Data Warehouse. Розберіться в особливостях та відмінностях Data Warehouse та Data Lake. Дізнайтесь, які фактори потрібно враховувати під час проєктування сховища під Big Data та для чого потрібні column-oriented storages. Напишіть key-value сховище даних з огляду на вимоги.
Дізнайтеся, для чого потрібно розподіляти дані та які проблеми розв'язує такий підхід. Дізнайтеся також, які проблеми можуть виникнути із цим підходом, та навчіться їх розв'язувати. Ознайомтесь із САР-теоремою та навчіться обирати найбільш відповідне рішення щодо розподілу з огляду на вимоги.
Вивчіть основи реплікації даних. Ознайомтеся зі стратегіями реплікації [Multi-leader replication]. Розгляньте переваги та недоліки кожної стратегії. Ознайомтеся з прикладами та готовими рішеннями ринку, які використовують ту чи іншу стратегію.
Вивчіть основи секціонування та зрозумійте, як воно пов'язане з реплікацією. Ознайомтеся зі стратегіями ребалансування та готовими рішеннями, які застосовують компанії на практиці. Продовжте роботу з key-value data warehouse.
Дізнайтеся, що таке ACID та для чого потрібні Isolation levels. Розберіться в особливостях кожного рівня та навчіться вибирати Isolation level з огляду на вимоги бізнесу.
Дізнайтеся, що таке цілісність даних у розподілених системах. Ознайомтеся з типами цілісності. На реальних прикладах розгляньте переваги та недоліки кожного типу. Навчіться обирати тип цілісності даних з огляду на вимоги бізнесу.
Дізнайтеся, що таке консенсус у розподілених системах. Познайомтеся з популярними алгоритмами консенсусу [Paxos та Raft]. Зрозумійте, як працюють популярні розподілені сховища даних з погляду консенсусу. Реалізуйте вибраний тип консенсусу.
Вивчіть особливості роботи пакетного режиму та потокового режиму. Ознайомтеся з моделлю MapReduce та дізнайтеся, для яких завдань її використовувати. Отримайте інформацію про різні Messaging systems, визначте їхні переваги та недоліки.
Розберіться в поняттях [state], [stream] та [immutability]. Дізнайтеся, що таке [event stream] і [event sourcing] та коли їх застосовувати. Додайте event stream або event sourcing до вашого дизайну.
Дізнайтеся, навіщо потрібен моніторинг, та навчіться налаштовувати оповіщення. Розберіться в метриках та дізнайтесь, у чому відмінність метрик та логів. Опишіть метрики для одного з компонентів системи.
Створіть та захистіть архітектуру вибраного [або свого] проєкту з огляду на те, що дизайн обов'язково має передбачати високе навантаження.