Skip to content

Instantly share code, notes, and snippets.

@dz-s
Forked from maximov-m/System design framework.md
Created September 15, 2023 07:48
Show Gist options
  • Save dz-s/cb61b197ad7023db6ed662c5298e0316 to your computer and use it in GitHub Desktop.
Save dz-s/cb61b197ad7023db6ed662c5298e0316 to your computer and use it in GitHub Desktop.
System design framework part-1

System Design Framework

Цель интервью

  1. Дать достаточное кол-во сигналов для интервьюеру, что вы можете колаборировать, работать в команде проектировать и делать это сообща вместе
  2. Можно ли интервьюер представить вас в качестве члена команды? Сделать так что бы смог

L5-L6 отличаются интервью: На Л6 уровне нужно добавлять знания и показывать ваш личный экспирианс Систем дизайн это про общение с интервьюером

Первое что нужно сделать это выработать навык общения с интервьюером Интервьюер самый главный фактор при прохождении систем дизайн интервью

Try exponent - manager - сервис с курсами, моками, коучами для подготовки к систем дизайн интервью


Спрашивайте вопросы, уточняйте и разъесняйте все непонятные вещи в задаче в начале.

Основная задача:

  • Нарисовать хай левел дизайн

После:

  • Спускаться в глубь тех или иных аспектов

В конце

  • Ответы на вопросы от интервьюера или ваши вопросы

Microphones:

https://rode.com/en/microphones/usb/nt-usb-mini https://www.shure.com/en-GB/products/microphones/mv7

Mocks:


Когда дают задание "например задизайнить твиттер"? Ожидают что с вашей стороны последует ряд вопросов по разъяснению функциональный не функциональных требований! В противном случае (если вы начнете сразу рисовать хай левел дизайн) интервью будет провалено

Всегда задавайте вопросы про функциональные требования! Всегда! Выясняйте есть ли у системе трейдофы! (вещи на которые мы не можем повлиять)

  • Интерграции

L6 вопросы включают более широкое виденье:

  • Команда
  • Бюджет
  • Прайваси
  • Есть ли екзекьютив мемберы которые уже имели опыт с похоже задачей

В конце задайте уточняющий вопрос:

  • Есть ли что то что я пропустил?
  • Все ли реквайременты вы включили?
  • Хотите ли вы видеть реквайременты как АПИ или углубиться в "рисование"?

Нужно понять критичность и задел на скайлабилити

https://systemdesignthinking.thinkific.com/courses/system-design-for-interviews-and-beyond


Один из самых популярных вопросов к интервьюеру:

Какой уровень availability имеет наша система?

Каждый компонент системы должен учитывать уровень availability! 100% availability is not possible

https://abseil.io/resources/swe-book

Нужно держать в голове должны ли вы делать упор на high availability (HA) в данном компоненте или части системы


  • Скорее всего: Сервисы и базы данных должны находится в разных местах желательно далеко друг от друга (AZ and regions)
  • Fallback - рекавери сценарий при краше (можем ли построить fallback в том или ином сценарии)
    • Вариант ответа на вопрос а что если что-то упадет? - Fallback сценарий
  • Gossip protocol (peer service discovery)
  • Rate limiting, load shading, sharding способы справиться с нагрузкой и предоставить то же высокий уровень HA
  • Timeouts, circuit breaker, idempotency - спосибо избежать перформанс дегродейшена
  • SLO->SLA - постайм метрики, мы не можем говорить об этих политиках основываясь на текущих данных, мы рассчитываем их с использованиям исторических данных

Совет: Записывайте все вопросы/ответы во время сбора требований


Fault Tolerance - это 0 downtime (Банки, биржи, финтех, медицина и тд) |300


https://www.amazon.co.uk/Scalability-Startup-Engineers-Artur-Ejsmont/dp/0071843655

Cкайлебилити отвечает на вопросы: может ли система справиться с нагрузкой? и как она может с нагрузкой с той или иной нагрузкой?

  • Что бы понимать уровень нагрузки нужно собирать метрики
  • Один из способов скейлинга который часто забывают - вертикальный
  • Elasticity: автоскейлинг + скейлинг для peak hours
    • peak hours - про прогнозирование повышенной нагрузки в те или иные часы или дни

Вопросы от интрвьюера:

  • Как мы можем улучшить сетевую составляющую? (Может быть он хочет другой протокол или уровень)
  • Перформанс улучшения на сервер сайде:
    • кеши
    • алгоритмы
    • Меймори вс диск
  • Какие персентили важны
    • p50
    • p75
    • p90
    • p95
    • p99

В гугл могут часто задавать вопросы по поводу квотирования


Дюрабилити:

  • Бекапы
    • фулл
    • Диффириншиал
    • Инкрементал
  • Репликации
    • multi levels!
  • Рейдмассивы (https://www.youtube.com/watch?v=U-OCdTeZLac)
    • RAID 1
    • RAID 10 Проверка дьюрабилити - чексумма

Консистенси выбор между слабой и строгой Понять ожидания по перформенсу исходя из которых мы можем выбрать уровень консистентности в том числе


Single point of failure - pay attention to it!

Нужно проектировать систему с учетом того что мы должны избегать SPOF

  • Maitainents - APM

L6 - затрагивать cost management если еще есть время




Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment