У меня более чем 15 лет опыта работы в индустрии, и в течение последних 9 лет я занимался созданием масштабируемых, высокодоступных и быстродействующих распределенных систем. Долгое время я задавался вопросом, как наиболее эффективно изучать системное проектирование. Хотя существует много отличных ресурсов для изучения отдельных концепций, но немногие предоставляют голистическое представление о том, как проектировать системы. И даже после того, как вы вложили много времени и получили много знаний, все еще трудно развивать истинное мышление системного проектирования. Мышление, которое помогает ответить на вопросы: с чего начать мой дизайн; куда идти дальше; как разбить эту большую неясную проблему на подзадачи, которые я знаю, как решить; и даже если я не знаю ответа, могу ли я сделать обоснованный предположение? Поэтому я бросил себе вызов создать курс, который может помочь развивать и улучшать мышление системного проектирования. И через два года вы можете увидеть результат этой работы.
Требования к системе (функциональные и нефункциональные требования)
Функциональные требования (как определить, метод «работать назад»)
Высокая доступность (доступность на основе времени и количества, принципы проектирования, процессы и метрики SLA и SLO)
Обеспечение сопровождаемости, безопасности и экономичности (аспекты сопровождаемости, аспекты безопасности (тройственность CIA, управление идентификацией и разрешениями, защита инфраструктуры и данных), аспекты экономичности (разработка, обслуживание, оборудование, программное обеспечение))
Список наиболее популярных нефункциональных требований
Регионы, зоны доступности, центры данных, стойки, серверы (как оборудование помогает достигать определенных качеств)
Физические серверы, виртуальные машины, контейнеры, серверы без серверов (преимущества и недостатки различных вычислительных сред, для чего они подходят)
Синхронное и асинхронное взаимодействие (модели синхронного и асинхронного запрос-ответа, асинхронная передача сообщений)
Асинхронные шаблоны обмена сообщениями (очередь сообщений, издатель/подписчик, конкурирующие потребители, запрос/ответ, приоритетная очередь, проверка прав)
Сетевые протоколы (TCP, UDP, HTTP, запрос и ответ HTTP)
Блокировка vs неблокировка I/O (сокет (блокировка и неблокировка), соединение, модель потока на соединение, модель потока на запрос с неблокировкой I/O, модель событийного цикла, параллелизм vs конкурентность)
Форматы кодирования данных (текстовые vs бинарные форматы, опции обмена схемами, обратная совместимость, прямая совместимость)
Подтверждение сообщений (безопасные и небезопасные режимы подтверждения)
Кэш дедупликации (локальный vs внешний кэш, добавление данных в кэш (явно, неявно), вытеснение кэш-данных (основанное на размере, основанное на времени, явное), истечение vs обновление)
Кэш метаданных (шаблон кэш-отложенного выполнения, шаблоны чтения и записи, запись с отложенным выполнением (отложенная запись))
Очередь (ограниченные и неограниченные очереди, циклический буфер (кольцевой буфер) и его применение)
Проблемы полной и пустой очереди (управление нагрузкой, ограничение скорости, что делать с неудачными запросами, обратное давление, эластичное масштабирование)
Начните с чего-то простого (сходство между концепциями одиночной машины и распределенной системы, совет для интервью)
Блокирующая очередь и шаблон производитель-потребитель (шаблон производитель-потребитель, ожидание и уведомление, семафоры, приложения блокирующей очереди)
Пул потоков (преимущества и недостатки, задачи, связанные с ЦП и вводом-выводом, плавное завершение работы)
Архитектура больших вычислений (модель пакетной обработки, задачи, легко распараллелимые)
Логи (память vs диск, сегментация лога, позиция сообщения (offset))
Индекс (эффективная реализация индекса для системы обмена сообщениями)
Хранение и извлечение данных временных рядов в масштабе и с низкой задержкой
Простая база данных "ключ-значение" (как построить простую базу данных "ключ-значение", компактификация логов)
B-дерево (как базы данных и системы обмена сообщениями используют B-деревья)
Встроенная база данных (встроенная vs удаленная база данных)
RocksDB (мемтаблица, журнал записи перед таблицей с отсортированными строками (SSTable))
LSM-дерево vs B-дерево (структура данных слияния логов, усиление записи, усиление чтения)
Кэш страницы (как увеличить производительность диска (пакетная обработка, чтение без копирования))
Push vs Pull (плюсы и минусы обеих моделей)
Обнаружение хоста (DNS, anycast)
Обнаружение сервиса (паттерны обнаружения на стороне сервера и клиента, реестр сервисов и его применение)
Обнаружение узлов (варианты обнаружения узлов, проблемы обнаружения и сбоев, seed-узел, применение протокола gossip и его применение)
Как выбрать сетевой протокол (когда и как выбирать между TCP, UDP и HTTP)
Сетевые протоколы в системах реальной жизни (тест: какой сетевой протокол вы выберете для различных проблем дизайна систем)
Видео через HTTP (адаптивное потоковое воспроизведение)
CDN (как использовать, как работает, точки присутствия (POP), преимущества)
Технологии Push и Pull (короткий опрос, длинный опрос, WebSocket, события, отправленные сервером)
Технологии Push и Pull в системах реальной жизни (тест: какую технологию вы выберете для различных проблем дизайна систем)
Архитектуры для передачи данных на больших масштабах (проблемы C10K и C10M, примеры архитектур, проблемы обработки долгоживущих соединений на большой масштабе).
Как создать надежные, масштабируемые и быстрые системы (список распространенных проблем в распределенных системах, список концепций проектирования систем, которые помогают решать эти проблемы, трехуровневая архитектура).
Таймауты (быстрые и медленные отказы, таймауты соединения и запроса).
Как обрабатывать неудачные запросы (стратегии обработки неудачных запросов (отмена, повтор, переключение, откат)).
Когда повторять (идемпотентность, тест: какие ошибки AWS API безопасны для повторной попытки).
Как повторять (экспоненциальная задержка, джиттер).
Групповая обработка запросов (плюсы и минусы, как обрабатывать групповые запросы).
Сжатие (плюсы и минусы, алгоритмы сжатия и компромиссы, которые они делают).
Как масштабировать потребление сообщений (один потребитель против нескольких потребителей, проблемы с несколькими потребителями (порядок обработки сообщений, двойная обработка)).
Разбиение в реальных системах (плюсы и минусы, применение разбиения).
33 Data store internals - Simple key-value database
Урок 34.
00:05:55
34 Data store internals - B-tree index
Урок 35.
00:04:05
35 Data store internals - Embedded database
Урок 36.
00:06:19
36 Data store internals - RocksDB
Урок 37.
00:04:37
37 Data store internals - LSM-tree and B-tree
Урок 38.
00:07:16
38 Data store internals - Page cache
Урок 39.
00:04:06
39 Push vs pull
Урок 40.
00:08:47
40 Host discovery
Урок 41.
00:06:32
41 Service discovery
Урок 42.
00:09:05
42 Peer discovery
Урок 43.
00:07:42
43 How to choose a network protocol
Урок 44.
00:09:53
44 Network protocols in real-life systems
Урок 45.
00:07:20
45 Video over HTTP
Урок 46.
00:05:15
46 CDN
Урок 47.
00:08:04
47 Push and pull technologies
Урок 48.
00:06:25
48 Push and pull technologies in real-life systems
Урок 49.
00:08:54
49 Large-scale push architectures
Урок 50.
00:04:58
50 What else to know to build reliable, scalable, and fast systems
Урок 51.
00:03:35
51 How to deliver data reliably - Timeouts
Урок 52.
00:05:40
52 How to deliver data reliably - What to do with failed requests
Урок 53.
00:06:21
53 How to deliver data reliably - When to retry
Урок 54.
00:03:49
54 How to deliver data reliably - How to retry
Урок 55.
00:06:51
55 How to deliver data reliably - Message delivery guarantees
Урок 56.
00:08:08
56 How to deliver data reliably - Consumer offsets
Урок 57.
00:07:25
57 How to deliver data quickly - Batching
Урок 58.
00:04:23
58 How to deliver data quickly - Compression
Урок 59.
00:08:07
59 How to deliver data at large scale - How to scale message consumption
Урок 60.
00:05:03
60 How to deliver data at large scale - Partitioning in real-life systems
Урок 61.
00:06:03
61 How to deliver data at large scale - Partitioning strategies
Урок 62.
00:06:28
62 How to deliver data at large scale - Request routing
Урок 63.
00:07:46
63 How to deliver data at large scale - Rebalancing partitions
Урок 64.
00:09:58
64 How to deliver data at large scale - Consistent hashing
Урок 65.
00:02:14
65 How to protect servers from clients - System overload
Урок 66.
00:04:38
66 How to protect servers from clients - Autoscaling
Урок 67.
00:05:10
67 How to protect servers from clients - Autoscaling system design
Урок 68.
00:09:11
68 How to protect servers from clients - Load shedding
Урок 69.
00:11:48
69 How to protect servers from clients - Rate limiting
Урок 70.
00:07:25
70 How to protect clients from servers - Synchronous and asynchronous clients
Урок 71.
00:04:08
71 How to protect clients from servers - Circuit breaker
Урок 72.
00:07:32
72 How to protect clients from servers - Fail-fast design principle
Урок 73.
00:04:57
73 How to protect clients from servers - Bulkhead
Урок 74.
00:07:27
74 How to protect clients from servers - Shuffle sharding
Урок 75.
00:00:41
75 Epilogue - The end (but not quite
Автор - Mikhail Smarshchok
Mikhail Smarshchok
Привет! Меня зовут Михаил Смарщок, я создатель канала System Design Interview на YouTube (https://www.youtube.com/c/SystemDesignInterview). Я программист и преподаватель, который увлечен обучением и наставничеством. У меня более 15 лет опыта работы в индустрии, из них последние 9 лет я работал над созданием масштабируемых, высокодоступных и систем с низкой задержкой. Я давно задумывался о том, как наилучшим образом изучать системный дизайн. Хотя
Back in 2015, when I was just starting with Android, I used Google Translate to study Chinese articles and improve my skills. Now, people are downvoting good content just because they don't like the accent. Crazy times.
levirgon
People downvoting this have never tried indian youtube tutorials lol. The content is good, And this guys knows what he's talking unlike many youtube bros
srummy123
Hey, looks like the download link is broken. can anyone please verify?
CourseHunter Team
srummy123
You can download it now!
gaurav.tcs15
Just curious where is the second module - can anyone help ?
Course ended at pretty abruptly - and there are no further lectures or updates
Anonymous
gaurav.tcs15
hasn't been released yet by the Author
kucherenko.web
Please, learn English if you use English, damn shame
Umaru
Great course! learned a lot
ThePentagramBurns
Михаил прошареный персонаж. Курс отличный.
vdevdn
Great content, thank you!
hazartilirot
Whyyyyyyyyyyyyyy are there so many dislikes? Is it somehow connected with the language the author speaks in? Oh Gosh.... Please, express yourself in any language you're comfortable with. I'm just curious about your reasoning.
vaduga
hazartilirot
exactly. He's not using the language he is comfortable with
hazartilirot
vaduga
I hope mate you are able to articulate in English as clear as he does in the video. Obviously, he has a strong Russian accent while speaking a foreign language, but his level is quite decent anyway. Share your video with us and we would judge how your English in comparison with the author's. I am looking forward to watching your video. Step into the light! Do not be shy. :D
vaduga
hazartilirot
просто заметил, без обид. Автору комфортно разговаривать на русском английскими словами. Не понимаю, как можно знать язык на таком уровне и совсем не попадать в интонации. Будто живую речь не слышал.
Команда внимательно читает ваши комментарии и оперативно на них реагирует. Вы можете спокойно оставлять запросы на обновления или задавать любые вопросы о курсе здесь.
Освойте собеседование по системному проектированию
Mastering the System Design Interview
Освойте собеседование по системному проектированию! Получите советы, хитрости и практические навыки у бывшего менеджера по найму из Amazon, который провел собеседования с тысячами программистов и нанял сотни. Фрэнк Кейн поделится секретами того, что ищет ваш собеседник, и технологиями, которые вы должны знать. Практика - залог успеха, поэтому вы также получите шесть имитированных собеседований по системному проектированию с вопросами из реальной
Собеседование по системному проектированию для архитекторов ПО
System Design Interview Guide for Software Architecture
Вы готовитесь к собеседованию по проектированию системы? Хотите научиться лучшим практикам и техникам проектирования масштабируемых и распределенных систем? Тогда вы попали по адресу! Курс по проектированию системы предназначен для того, чтобы дать вам всестороннее понимание ключевых концепций и фреймворков, которые помогут вам успешно пройти собеседование и достичь успеха в карьере.
Мастер-класс для всех, кто планирует, создает, развивает или усовершенствует дизайн-системы. Мы проведем вводную часть, знакомящую с анатомией дизайн-системы, и ряд активностей. Затем мы обсудим этапы здорового развития дизайн-системы, главные приоритеты и проблемы на каждом этапе, а также способы продвижения от одного этапа к другому. Этот мастер-класс поможет вам расширить свой взгляд за пределы технологий и инструментов, чтобы включить в него
По мере вашего роста как разработчика от вас все чаще будет требоваться умение выстраивать масштабируемые и оптимальные архитектуры для программных систем. Развитие этого навыка — отличный способ выделиться из массы других разработчиков. А еще интервью по System Design это обязательный этап собеседований в большие технологические компании. Его проходят при отборе как на инженерные позиции (Individual Contributor), так и на менеджерские (Eng
Course ended at pretty abruptly - and there are no further lectures or updates