Михайло Міхальов
Software Engineer в Amazon
31.03.2023 — 25.05.2023
На курсі ви дізнаєтесь, як світові компанії ладнають із великим трафіком, і навчитеся вибирати та проєктувати відповідні архітектурні рішення під задачі бізнесу.
щоби розробляти дизайн систем так, аби вони могли легко масштабуватися, зберігаючи компроміс між надійністю, ресурсами та часом.
щоби зрозуміти, як великі світові компанії ладнають із високим навантаженням, розробити власну Highload-архітектуру та навчитися вибирати відповідні рішення з огляду на завдання бізнесу.
щоб отримати фундаментальні знання в галузі системного дизайну, зрозуміти, які технології застосовувати в тій чи іншій ситуації, та оцінювати витрати на реалізацію складних рішень.
Як розробляти системи, які зможуть витримати мільйони користувачів одночасно і коректно працювати за цих обставин, знає Михайло Міхальов. Останні 5 років він розробляє Highload-дизайни. Зараз в Amazon, а до цього ― в одному з найбільших світових сервісів із доставлення їжі Delivery Hero. На курсі Михайло поділиться досвідом та навчить проєктувати системи на старті так, щоб вони могли масштабуватись у будь-який момент і водночас коректно працювати.
Ви отримаєте фундаментальні знання у галузі системного дизайну, розберете кейси відомих компаній, навчитеся застосовувати та адаптувати сучасні Highload-практики. За підсумками ― спроєктуєте власну систему, яка витримає трафік ≥ 1 млн користувачів щодня.
Дізнаєтесь, які технології лежать в основі відмовостійких систем та як світові компанії готують ресурси до напливу трафіку. Навчитеся застосовувати та адаптувати сучасні Highload-практики.
Навчитеся знаходити правильні рішення щодо архітектури фічі, компонента, сервісу або програми в цілому. Самостійно проєктуватимете та розроблятимете системи, які можуть витримати > 1 млн користувачів щодня.
Зможете оптимізувати роботу наявних систем на вашій поточній позиції та навчитеся визначати вартість впровадження того чи іншого рішення під задачі бізнесу.
Дізнайтеся, що таке Highload та Data-Intensive Apps. Розберіться в завданнях, які стоять перед архітектором високонавантажених систем, та з якими проблемами він стикається у своїй роботі. Познайомтеся з основними принципами, що допомагають побудувати систему від 0 до мільйонів користувачів. Навчіться робити грубі розрахунки архітектури додатків. Зробіть першу чернетку 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 до вашого дизайну.
Дізнайтеся, навіщо потрібен моніторинг, та навчіться налаштовувати оповіщення. Розберіться в метриках та дізнайтеся, у чому відмінність метрик та логів. Опишіть метрики для одного з компонентів системи.