Если вы только начали свое путешествие по системному проектированию, компиляция этой концепции поможет вам начать с основ.
Содержание
- Введение
- Модель клиент-сервер
- Сетевые протоколы
- Хранилище
- Задержка и пропускная способность
- Доступность
- Кэш
- Прокси
- Балансировщик нагрузки
- Хеширование
- База данных
- Хранилище пар «ключ-значение»
- Специализированные парадигмы хранения
- Репликация и сегментирование
- Выборы лидера
- Одноранговая связь
- Опрос и потоковая передача
- Конфигурация
- Ограничение скорости
- Ведение журнала
- Шаблон публикации/подписки — Поток
- Сокращение карты
- Безопасность
- Заключение
- Подробнее
вступление
Этот пост в блоге является продолжением шпаргалки Frontend Interview. Если вы еще этого не видели, посмотрите сначала 👇
Приведенный здесь список даст вам подробное введение в концепции собеседования по проектированию системы, которые вам, возможно, потребуется освоить. Надеюсь, вам понравится чтение, и не забудьте подписаться на меня в социальных сетях: medium и twitter
Если эта статья соберет 1000 аплодисментов 👏, я опубликую Шаблон интервью по системному дизайну, который упростит вам подготовку к собеседованию.
Модель клиент-сервер
- DNS — система доменных имен перенаправляет доменное имя на IP-адрес. Клиент отправляет запрос в DNS и возвращает IP-адрес;
- IP-адрес — числовой адрес для каждой машины, подключенной к Интернету; abcd (0–255). 192.0.0.1 — локальный. 192.169..кд
- Порт — прослушивание нескольких процессов без конфликтов. 0–65525. 2¹⁶. Порты 0–1023 используются системой (22: Secure Shell, 53: поиск DNS; 80: HTTP; 443: HTTPS)
Сетевые протоколы
- IP — Интернет-протокол — правила для связи между машинами в Интернете. Использование IP-пакетов
- TCP — протокол управления передачей — гарантирует, что пакеты будут доставлены по порядку, будет знать, если произошел сбой. По дополнительному заголовку TCP (информация о заказе), построение поверх IP
- IP-пакет — минимальная единица данных для связи между машинами. Состоят из заголовка (источник, получатель, размер пакета, версия протокола IPv4) и полезной нагрузки. Размер пакета ²¹⁶ байт. Не может гарантировать, что все пакеты получены и упорядочены HTTP->TCP->IP
Хранилище
- База данных — серверы, которые хранят данные на диске или в памяти. Запись и запрос;
- Диск — сохраняет и сохраняет данные, если процесс умирает. HDD — медленнее и дешевле. SSD — быстрее и дороже, энергонезависимый;
- Память — оперативная память быстрого доступа, энергозависимая, стирание данных при завершении процесса;
- Постоянные данные — сохраняет данные, если процесс умирает (отказ);
Задержка и пропускная способность
- Задержка —время, необходимое для завершения операции (мс):
1) Чтение 1 Мб из ОЗУ — 0,25 мс;
2) Чтение 1 Мб с SSD — 1 мс;
3) Передача 1 Мб по сети (1 Гбит/с) — 10 мс;
4) Чтение 1 Мб с HDD — 20 мс;
5) Передача 1 Мб межконтинентальная туда-обратно — 150 мс;
- Пропускная способность —количество операций, которые операционные системы могут обрабатывать в секунду (RPS, QPS).
Доступность — надежность
- Доступность — Доступ к сервису в определенный момент времени (за год); 1) 99% (87,8 ч); 2) 99,9% (8,8 ч); 3) 99,99 % (52,6 мин.) 4) 99,999 % (5,3 мин.) (5 девяток);
- Резервность — репликация системы для повышения доступности (убедитесь, что у вас нет единой точки отказа — используйте избыточность). Пассивное резервирование (2 машины, если одна выходит из строя, другая работает), активная избыточность (если одна выходит из строя, другая берет управление на себя)
- SLA (сервис — уровень — соглашение) гарантии сервиса, состоит из нескольких SLO
- SLO (сервис — уровень — задача) гарантии сервиса (доступность)
Кэш
- Что можно кэшировать — клиент, сервер, промежуточный (сервер-база данных), API, аппаратное обеспечение (ЦП). Операции, которые используются часто, тяжелые операции/вычисления;
- Кэш — аппаратное или программное обеспечение, хранящее данные для обеспечения более быстрого доступа (результат тяжелых вычислений, ответы API, запросы API);
- Запись через кеш — при синхронном обновлении кеша и памяти восстанавливать данные, если процесс умирает. Плюсы — проще и надежнее; минусы — лучше работает, когда не так много записей в кеш;
- Запись обратного кэша — когда кэш обновляется в кэше и памяти асинхронно;
- Если мы заботимся об устаревании кеша (точность данных) -› используем локальный кеш;если важна точность (просмотры, лайки) — используем сторонний кеш (Redis)
- Кэш Хит — найти запрошенные данные в кеше
- Промах кеша — не найден сохраненный кеш из-за чистого дизайна
- Политика вытеснения кэша — правила, когда кэшированные будут удалены (LRU (недавние), LFU (частые), FIFO (очередь))
- Сеть доставки контента (CDN) — сторонняя служба, которая кэширует ваш сервер (в зависимости от региона), что всегда снижает задержку. PoP (точка присутствия). Cloudflare, Google Cloud CDN.
Прокси — безопасность, надежность
- Форвард прокси —клиентский (скрытый IP) VPN;
- Обратный прокси —сервер-перехватчик (балансировка нагрузки, выбор лидера) (логирование, кэширование, фильтрация запросов, балансировка нагрузки, щит безопасности);
- Прокси-инструмент — Nginx
Балансировщик нагрузки — безопасность, надежность, производительность
- Распределяйте трафик по серверам. Несколько балансировщиков нагрузки с разными стратегиями выбора;
- Стратегия выбора сервера — (вес — если некоторые серверы мощнее) циклический, случайный выбор, на основе производительности, на основе IP, на основе пути API;
- Горячая точка — распределяет слишком много трафика на одну машину из-за неоптимальной функции ключа/хеширования сегментирования.
- Библиотека LB – Nginx;
Хеширование
- Хеширование —преобразование части данных в хэш — обычно целое число;
- Консистентное хеширование — сводит к минимуму количество переназначаемых ключей при изменении размера хэш-таблицы. (балансировщик нагрузки при добавлении или удалении сервера) (Rendezvous — самый высокий случайный хэш);
- SHA —защищенный хэш-алгоритм, набор хеш-функций. Популярный SHA-3.
База данных
- ACID — база данных (транзакции базы данных): ATOMICITY — все операции в транзакции все успешны или неуспешны, а не промежуточное состояние; CONSISTENCY — каждая транзакция гарантирует, что данные находятся в обновленном состоянии (строгая согласованность), (эвентуальная согласованность) будут обновлены через некоторое время; ИЗОЛЯЦИЯ — выполнение нескольких транзакций будет таким же, как если бы они выполнялись последовательно; ДОЛГОВЕЧНОСТЬ — транзакции находятся в энергонезависимом состоянии, они не могут рухнуть
- Реляционная база данных — база данных, организованная в виде таблиц, строк и столбцов, и отношения между ними.
- Нереляционная база данных — НЕ табличная, специально организованная для конкретных целей.
- SQL — язык структурированных запросов;
- SQL база данных —реляционная база данных, поддерживающая SQL;
- NoSQL — база данных, не поддерживающая SQL
- Индекс базы данных —структура данных, которая улучшает извлечение данных и замедляет запись данных (потому что создается индекс для столбцов);
- Сильная согласованность — относится к ACID. (каждая транзакция гарантирует обновление данных) — PostgreSQL;
- Эвентуальная согласованность — (транзакция в конечном итоге (позже) узнает обновленные данные);
Хранилище пар "ключ-значение"
- База данных NoSQL, используемая для кеширования и динамической настройки (Etcd — строгая согласованность, используемая для выбора лидера), (Redis — кэширование, ограничитель скорости), Zookeeper (строгая согласованность, выбор лидера, высокая доступность);
Специализированные модели хранения
- Blob Storage — хранилище пар ключ-значение Blob (бинарный большой объект) обычно медиа: изображения, аудио, видео (Google Cloud Storage, Amazon S3);
- База данных временных рядов — хранение и анализ индексированных по времени данных, создаваемых непрерывно (логирование, интернет вещей, акции): Prometheus, InfluxDB, Graphite;
- График базы данных — когда данные имеют глубокую взаимосвязь (социальная сеть) (Neo4j)
- Cypher — язык графовых запросов, созданный Neo4j, более простой, чем SQL.
- Пространственная база данных — местоположение, карта; использует quadtree для быстрого запроса (регион/местоположение); (гостиница, карта)
Репликация и сегментирование
- Репликация — дублирование данных с одного сервера на другой; (уменьшить единую точку отказа, уменьшить задержку), необходимо обновить основную базу данных и реплику (синхронизация, асинхронность);
- Шардирование — секционирование данных (когда база данных большая), разбиение базы данных на сегменты для увеличения пропускной способности. (по региону клиента, по типу данных (оплата), по хешу столбца). Может иметь горячую точку при неоптимальной стратегии сегментирования.
Выборы лидера — надежность
- Процесс, при котором серверы выбирают сервер-лидер, выполняющий первичные операции (системно-важные операции). А другие узлы знают, кто лидер, и после переизбрания;
- Алгоритмы консенсуса — выбираем лидера и синхронизируем все серверы Paxos, Raft. Etcd и Zookeeper — базы данныхключ-значение, реализующие выборы лидеров.
Одноранговая связь
- Машины разделяют рабочую нагрузку, увеличивают пропускную способность системы. (раздача файлов)
- Gossip Protocol — процесс связи между машинами для разделения нагрузки. Разделите файл на фрагменты данных (BLOB-объекты), создайте хэш-карту, чтобы сообщить, какой узел владеет каким фрагментом. Распределенная хеш-таблица. Кракен
Опрос и потоковая передача
- Случаи использования: чат, акции, температура.
- Опрос — выборка данных с интервалом (API);
- Поток —создание соединения, которое непрерывно извлекает (прослушивает) данные (API) Web Socket
Конфигурация
- JSON или YAML
- Может быть статическим — постоянным, плюсы постоянны, трудно сломать систему, минусы — требуется перестройка
- Динамический (хранится в KV — Redis) плюсы — гибкость, быстрота применения, минусы — может легко сломать систему, если нет теста
Ограничение скорости — безопасность, надежность
- Уменьшите систему рассылки спама, избегайте DoS и DDoS (распределенных) атак типа «отказ в обслуживании»;
- Реализован кеш, сложно использовать кеш сервера, потому что балансировщик нагрузки не будет знать, как перенаправить;
- Использовать внешние базы данных "ключ-значение" (Redis) в обратном прокси-сервере (Load Balancer);
- Правила Ограничение скорости могут быть простыми или более сложными (на основе уровней) в зависимости от системы;
Ведение журнала — надежность, рост
- Ведение журнала — сбор информации о событиях. Все события будут записываться в STDOUT, STDERR. Сохраните их в базу данных временных рядов: InfluxDB, Prometheus.
- Монитор — визуализация с помощью Grafana;
- Оповещение — если в системе мониторинга есть всплеск, создайте оповещение, например, разместите в slack;
- Ведение журнала важно во время роста системы
Шаблон публикации/подписки — поток
- Модель Pub/Sub;
- Случаи использования: сообщения в чате, лента новостей, курсы акций, уведомления;
- Гарантии: как минимум одна доставка, постоянное хранение, заказ, воспроизводимость;
- Сервер издателя (P) — Тематический канал (T) — Сообщение — Подписчик (P) -> (T) — m1 — m2 -> (S)
- Идемпотентная операция — иметь одинаковый результат независимо от того, сколько раз она вызывалась;
- Apache Kafka — система потоковой передачи от LinkedIn, Google Cloud Sub/Pub гарантируют как минимум одну доставку;
MapReduce — масштабируемость больших данных
- Файловая система — абстракция организации данных (иерархия, дерево — файловая система Unix). Распределенная файловая система — то же самое, но с разделением данных между машинами — Файловая система Google, Hadoop Распределенная файловая система;
- MapReduce — распространять данные: быстро, эффективно и отказоустойчиво; Набор данных разделен между несколькими машинами -› (Сопоставить) для каждого фрагмента с ключом: val -› (Перемешать) реорганизовать -› (Уменьшить) преобразовать к более значимым данным;
- Необходимое условие — у нас есть распределенная файловая система, у нас есть набор данных, разделенный на куски, разделенный между несколькими машинами, централизованный контроль (знание того, что происходит, и общение с работниками map/reduce); серверы отправляют сопоставленные данные;
- В случае сбоя центральный контроль повторно запускает карту/сокращение (идемпотентная операция).
Безопасность
- Атака «человек посередине» — перехват и изменение приватного IP-пакета от клиента к серверу. Шифрование и защита HTTPS;
- Симметричное шифрование — используйте один ключ для шифрования и расшифровки данных. Быстрее, чем асимметричный. Его алгоритмы являются частью Advanced Encryption Standard (AES);
- Advanced Encryption Standard —стандартныесимметричныеалгоритмы шифрования (AES — 128, AES — 192, AES — 256);
- Асимметричное шифрование — открытый и закрытый ключи для шифрования и расшифровки. Данные, зашифрованные с помощью открытого ключа (могут быть переданы), могут быть расшифрованы только с помощью закрытого ключа (должны быть безопасными). Медленнее, чем симметричный;
- HTTPS — безопасное соединение. Требуется, чтобы сервер имел SSL-сертификат и использовал TLS для связи (шифрования данных) между сервером-клиентом;
- TLS — протокол безопасности транспортного уровня, построенный поверх TCP;
- Сертификат SSL — серверу предоставлен цифровой сертификат Центром сертификации. Содержит открытый ключ сервера. Чтобы установить рукопожатие TLS в HTTPS-подключении;
- Центр сертификации —объект, который проверяет источник сертификата открытого ключа;
- TLS Handshake — установление безопасного соединения между клиентом и сервером. Клиент отправляет строку случайных байтов (client hello) -› сервер отправляет другую строку случайных байтов (server hello) + SSL-сертификат с открытым ключом -› клиент проверяет сертификат с центром сертификации и отправляет premaster secret, зашифрованный с помощью строки открытого ключа, состоящей из случайных байтов -› клиент и сервер используют приветствие клиента, приветствие сервера и секрет premaster для генерации сеансового ключа (с использованием симметричного шифрования) и шифрования все данные при общении;
Заключение
Повторение основ — это только первый шаг подготовки к собеседованию по системному дизайну. Следующим шагом будет изучение шаблона интервью по системному дизайну, которым я поделюсь, если вы поделитесь своей любовью ❤️, которая выглядит как 1000 👏 аплодисментов.
Следуйте за мной в среде и в Твиттере, чтобы получить больше материалов для подготовки к интервью и идеи.