К основному содержимому
#Architecture

[2/3] System Design for Interviews and Beyond - Курс на Leetcode (Рубрика Architecture)

#Architecture #Software #DistributedSystems #SystemDesign #Engineering

Я продолжаю рассказ про крутой курс с Leetcode, в котором доступно и понятно рассказывали о том, что такое system design interview и что он призван проверять у кандидатов. В предыдущем посте мы обсудили работу с требованиями, важные архитектурные характеристики, инфраструктуру, кеширование и очереди. В этой части мы продолжим говорить про хранение данных,  взаимодействие компонентов системы

6. Data store internals. Здесь автор кратко рассматривает тему хранения данных:

  • Log - самый простой способ сохранения данных, но вот читать их сложно в таком виде (full scan на любой запрос)
  • Index - индексы в качестве способа подготовки данных для эффективных запросов на чтения
  • Time series data - отдельный тип данных, которые полезны, например, при мониторинге
  • Simple key/value database - автор объясняет как будет работать база с простейшей моделью данных
  • B-Tree index - автор рассказывает про вездесущие b-tree индексы, как они устроены и для каких сценариев подходят оптимально
  • Embedded databases - иногда удобно встроить базу прямо в процесс приложения, например, так могут LevelDB, RocksDB, DuckDB
  • RocksDB - автор рассказывает как устроена эта база и тут речь про memtable, write-ahead log и SSTables
  • Сравнение LSM-tree и B-Tree - автор показывает компромиссы каждого из подходов и сравнивает их границы применимости
  • Page cache - заканчивает автор рассказом о том, как все это приземлить на файловую систему внутри OS. Без этих знаний многое из описанного выше не будет хорошо работать

7. How to build efficient communication in distributed systems. В этой части автор говорит про классику коммуникаций

  • Push vs pull модели взаимодействия
  • Как выглядит host и service discovery (тут появляется DNS), а также peer discovery
  • Как выбирать сетевой протокол под задачу (UDP, TCP, HTTP) и как они ведут себя на практике
  • Как обычно передается видео-поток и что такое CDN (content delivery network)
  • Что такое short pooling, long pooling, web-socket, server-sent events, зачем они нужны и как они ведут себя на практике
  • В конце раздела автор показывает как могут работать пуши на клиентов на большом масштабе (аля Netflix)

8. How to delivery data reliably. Этот раздел начинается с известного списка fallacies of distributed systems, а дальше автор переходит к практическим средствам обеспечения надежности

  • Таймауты и стратегии действий с неуспешными запросами: cancel, retry, failover, fallback
  • На конкретных примерах автор разбирает когда и как делать retries
  • Дальше наступает время обсудить гарантии доставки сообщений: at most once, at least once, exactly once
  • Дальше автор рассматривает как работают log-based message queues (аля Kafka) и что такое consumer offset

9. How to deliver data quickly Здесь автор рассказывает про подходы к батчингу и компрессии данных, что обеспечивает лучшую пропускную способность.

10. How to deliver data at large scale В этой части наступает время обсудить вопросы масштабирования обработки данных. Автор рассказывает про

  • Партиционирование (шардирование) и рассматривает стратегии: lookup strategy, range strategy, hash strategy
  • Как партиционирование работает в реальном мире и какие плюсы/минусы имеет
  • Как выглядит роутинг запросов
  • Что делать с ребалансировкой шардов
  • Что такое consistent hashing

Продолжение обзора будет в следующем посте.

#Software #Architecture #DistributedSystems #SystemDesign #Engineering