Программирование [Михаил Смарщок] Системный дизайн для интервью и не только (2023)

  • Автор темы Amerikano
  • Дата начала
Amerikano
Amerikano
Модератор
Сообщения
19,445
Реакции
365,358
Автор: Mikhail Smarshchok
Название: Системный дизайн для интервью и не только (2023)
1683574684515

Описание:

Учебная программа курса

1. Введение

1.1. Введение в курс
1.2. Кто и как получит пользу от курса
1.3. Обзор курса


2. Как определить системные требования
2.1. Системные требования
2.2. Функциональные требования
2.3. Высокая доступность
2.4. Отказоустойчивость, отказоустойчивость, надежность
2.5. Масштабируемость
2.6. Производительность
2.7. Долговечность
2.8. Согласованность
2.9. Ремонтопригодность, безопасность, стоимость
2.10. Краткое изложение системных требований


3. Как достичь определенных качеств системы с помощью аппаратного обеспечения
3.1. Регионы, зоны доступности, центры обработки данных, стойки, серверы
3.2. Физические серверы, виртуальные машины, контейнеры, бессерверная связь
3.3. Основы надежной, масштабируемой и быстрой связи
3.4. Синхронная и асинхронная связь
3.5. Асинхронные шаблоны обмена сообщениями
3.6. Сетевые протоколы
3.7. Блокирующий и неблокирующий ввод-вывод
3.8. Форматы кодирования данных
3.9. Подтверждение сообщения

4. Как повысить производительность системы с помощью кэширования
4.1. Кэш дедупликации
4.2. Кэш метаданных

5. Важность очередей в распределенных системах
5.1. Очередь
5.2. Проблемы с заполнением и опустошением очередей
5.3. Начните с чего-нибудь простого
5.4. Блокирующая очередь и шаблон производитель-потребитель
5.5. Пул потоков
5.6. Архитектура больших вычислений

6. Внутреннее устройство хранилища данных
6.1. Журнал
6.2. Индекс
6.3. Данные временных рядов
6.4. Простая база данных ключ-значение
6.5. Индекс B-дерева
6.6. Встроенная база данных
6.7. RocksDB
6.8. LSM-дерево против B-дерева
6.9. Кэш страницы

7. Как построить эффективную коммуникацию в распределенных системах
7.1. Push vs pull
7.2. Обнаружение хоста
7.3. Обнаружение сервиса
7.4. Обнаружение одноранговых узлов
7.5. Как выбрать сетевой протокол
7.6. Сетевые протоколы в реальных системах
7.7. Видео по HTTP
7.8. CDN
7.9. Технологии Push и pull
7.10. Технологии Push и pull в реальных системах
7.11. Крупномасштабные push-архитектуры

8. Как надежно предоставлять данные
8.1. Что еще нужно знать для создания надежных, масштабируемых и быстрых систем
8.2. Время ожидания
8.3. Что делать с неудачными запросами
8.4. Когда повторить попытку
8.5. Как повторить попытку
8.6. Гарантии доставки сообщений
8.7. Компенсации потребителям

9. Как быстро предоставлять данные
9.1. Пакетирование
9.2. Сжатие
10. Как предоставлять данные в больших масштабах
10.1. Как масштабировать потребление сообщений
10.2. Разделение в реальных системах
10.3. Стратегии разделения
10.4. Маршрутизация запросов
10.5. Перебалансировка разделов
10.6. Согласованное хеширование
11. Как защитить серверы от клиентов
11.1. Перегрузка системы
11.2. Автоматическое масштабирование
11.3. Проектирование системы автоматического масштабирования
11.4. Сброс нагрузки
11.5. Ограничение скорости
11.6. Как защитить клиентов от серверов
11.7. Синхронные и асинхронные клиенты
11.8. Автоматический выключатель
11.9. Принцип безотказного проектирования
11.10. Перегородка
11.11. Разделение в случайном порядке

12. Эпилог
12.1. Конец (но не совсем)


Программа курса
Системные требования (функциональные и нефункциональные требования)
Функциональные требования (как определить, подход, работающий в обратном направлении)
Высокая доступность (доступность на основе времени и количества пользователей, принципы проектирования, лежащие в основе высокой доступности, процессы, лежащие в основе высокой доступности, SLO, SLA)
Отказоустойчивость, упругость, надежность (ошибка, failure, отказоустойчивость, отказоустойчивость, игровой день против разработки хаоса, ожидаемые и неожиданные сбои, надежность)
Масштабируемость (вертикальное и горизонтальное масштабирование, эластичность против масштабируемости)
Производительность (задержка, пропускная способность, процентили, как увеличить запись и пропускную способность, полоса пропускания)
Долговечность (резервное копирование (полное, дифференциальное, инкрементное), RAID, репликация, контрольная сумма, доступность в сравнении с долговечностью)
Согласованность (модели согласованности, конечная согласованность, линеаризуемость, монотонные чтения, операции чтения после записи, последовательные чтения с префиксом)
Ремонтопригодность, безопасность, стоимость (аспекты ремонтопригодности (режимы сбоев и их устранение, мониторинг, тестирование, развертывание), аспекты безопасности (триада CIA, управление идентификацией и разрешениями, защита инфраструктуры, защита данных), аспекты затрат (проектирование, обслуживание , аппаратное обеспечение, программное обеспечение))
Краткое изложение системных требований (единый список наиболее популярных нефункциональных требований)
Регионы, зоны доступности, центры обработки данных, стойки, серверы (как аппаратное обеспечение помогает достичь определенных качеств)
Физические серверы, виртуальные машины, контейнеры, бессерверная связь (плюсы и минусы различных вычислительных сред, для чего они хороши)
Синхронная или асинхронная коммуникация (синхронные модели и асинхронный запрос-ответ, асинхронный обмен сообщениями)
Шаблоны асинхронного обмена сообщениями (постановка в очередь сообщений, публикация / подписка, конкурирующие потребители, обмен сообщениями с запросом / ответом, очередь приоритетов, проверка заявок)
Сетевые протоколы (TCP, UDP, HTTP, HTTP-запрос и ответ)
Блокирующий и неблокирующий ввод-вывод (сокет (блокирующий и неблокирующий), соединение, поток на модель соединения, поток на запрос с неблокирующей моделью ввода-вывода, модель цикла событий, параллелизм против параллелизма)
Форматы кодирования данных (текстовые и двоичные форматы, параметры совместного использования схемы, обратная совместимость, прямая совместимость)
Подтверждение сообщения (безопасные и небезопасные режимы подтверждения)
Кэш дедупликации (локальный или внешний кэш, добавление данных в кэш (явно, неявно), удаление данных из кэша (на основе размера, на основе времени, явно), истечение срока действия или обновление)
Кэш метаданных (шаблон удаления из кэша, шаблоны чтения и сквозной записи, шаблон обратной записи)
Очередь (ограниченные и неограниченные очереди, кольцевой буфер) и его приложения)
Проблемы с заполнением и опустошением очереди (сброс нагрузки, ограничение скорости, что делать с неудачными запросами, противодавление, эластичное масштабирование)
Начните с чего-нибудь простого (сходство между концепциями одиночной машины и распределенной системы, совет по проведению интервью).
Блокирующая очередь и шаблон производитель-потребитель (шаблон производитель-потребитель, ожидание и уведомление, семафоры, приложения с блокировкой очереди)
Пул потоков (плюсы и минусы, задачи, связанные с процессором и вводом-выводом, плавное завершение работы)
Архитектура больших вычислений (модель пакетных вычислений, смущающе параллельные задачи)
Журнал (соотношение памяти и диска, сегментация журнала, положение сообщения (смещение))
Индекс (как внедрить эффективный индекс для системы обмена сообщениями)
Данные временных рядов (как хранить и извлекать данные временных рядов в масштабе и с низкой задержкой)
Простая база данных ключ-значение (как создать простую базу данных ключ-значение, сжатие журналов)
Индекс B-дерева (как базы данных и системы обмена сообщениями используют индексы B-дерева)
Встроенная база данных (встроенная или удаленная база данных)
RocksDB (memtable, журнал с опережением записи, таблица отсортированных строк (SSTable))
LSM-tree vs B-tree (структура данных с логической структурой, слияние с деревом, усиление записи, усиление чтения)
Кэш страниц (как увеличить пропускную способность диска (пакетирование, копирование с нулевым копированием читать))
Push vs pull (плюсы и минусы обеих моделей)
Обнаружение хоста (DNS, anycast)
Обнаружение служб (шаблоны обнаружения на стороне сервера и клиента, реестр служб и его приложения)
Обнаружение одноранговых узлов (параметры обнаружения одноранговых узлов, проблемы с членством и обнаружением сбоев, начальный узел, как работает протокол gossip и его приложения)
Как выбрать сетевой протокол (когда и как выбирать между TCP, UDP и HTTP)
Сетевые протоколы в реальных системах (тест: какой сетевой протокол вы бы выбрали для различных задач системного проектирования)
Видео через HTTP (адаптивная потоковая передача)
CDN (как его использовать, как это работает, точка присутствия (POP), преимущества)
Технологии Push и pull (короткий опрос, длительный опрос, websocket, события, отправляемые сервером)
Нажимные технологии в реальных системах (тест: какую технологию вы бы выбрали для решения различных задач системного проектирования)
Крупномасштабные push-архитектуры (проблемы C10K и C10M, примеры крупномасштабных push-архитектур, наиболее заметные проблемы обработки долговременных соединений в больших масштабах)
Что еще нужно знать для создания надежных, масштабируемых и быстрых систем (список распространенных проблем в распределенных системах, список концепций системного дизайна, которые помогают решать эти проблемы, трехуровневая архитектура)
Тайм-ауты (быстрые сбои, медленные сбои, тайм-ауты подключения и запроса)
Что делать с неудачными запросами (стратегии обработки неудачных запросов (отмена, повторная попытка, переход на другой ресурс, запасной вариант))
Когда следует повторить попытку (проверка на идемпотентность: какие сбои AWS API можно безопасно повторить)
Как повторить попытку (экспоненциальное отклонение, дрожание)
Гарантии доставки сообщений (максимум один раз, по крайней мере один раз, ровно один раз)
Компенсации потребителям (системы обмена сообщениями на основе журналов, контрольные точки)
Пакетирование (плюсы и минусы, как обрабатывать пакетные запросы)
Сжатие (плюсы и минусы, алгоритмы сжатия и компромиссы, которые они делают)
Как масштабировать потребление сообщений (один потребитель против нескольких потребителей, проблемы с несколькими потребителями (порядок обработки сообщений, двойная обработка))
Разделение в реальных системах (плюсы и минусы, области применения разделения)
Стратегии разделения (стратегия поиска, стратегия диапазона, стратегия хэширования)
Маршрутизация запросов (физические и виртуальные сегменты, параметры маршрутизации запросов)
Перебалансировка разделов (как перебалансировать разделы)
Согласованное хеширование (как реализовать, преимущества и недостатки, виртуальные узлы, приложения согласованного хеширования)
Перегрузка системы (почему важно защитить систему от перегрузки)
Автоматическое масштабирование (политики масштабирования (основанные на показателях, расписании, прогнозные))
Проектирование системы с автоматическим масштабированием (как спроектировать систему с автоматическим масштабированием)
Сброс нагрузки (как реализовать это в распределенных системах, важные соображения)
Ограничение скорости (как использовать знания, полученные на курсе, для решения проблемы ограничения скорости (пошаговое руководство))
Синхронные и асинхронные клиенты (системы контроля допуска, блокирующие клиенты ввода-вывода и неблокирующие клиенты ввода-вывода)
Автоматический выключатель (автомат конечного состояния автоматического выключателя, важные соображения)
Принцип безотказного проектирования (проблемы с медленными сервисами (цепные реакции, каскадные сбои) и способы их решения)
Переборка (как реализовать этот шаблон в распределенных системах)
Сегментирование в случайном порядке (как реализовать этот шаблон в распределенных системах)
Конец (список тем, которые мы рассмотрим в следующем модуле курса)

Подробнее:

Скачать:

 
Последнее редактирование модератором:
I
io36
Премиум PRO
Сообщения
6
Реакции
0
Обновите пожалуйста ссылку
 
Flesh
Flesh
Модератор
Сообщения
75,183
Реакции
628,588
Обновил
 
  • Мне нравится
Реакции: io36
I
io36
Премиум PRO
Сообщения
6
Реакции
0
Спасибо
 
Сверху