Plan

Формализация задачи

функциональные требования (что пользователь хочет от системы в виде сценариев, jobs to be done)

нефункциональные требования (главные архитектурные характеристики: sizing, rps)

circle-info

определить важность и интересность требований, которую разбирать на собесе

Границы системы

выбрать правильный способ интеграции системы: files, DB, API, messaging.

if (API) REST?, RPC?, GraphQL, AsyncAPI

выбрать сети и протоколы (TCP, UDP)

Балансировщики нагрузки (nginx, HAproxy)

обрабатываемые сценарии

NFR questions / aspects:
- DAU / MAU
- кол-во пользователей через 5-10 лет
- кол-во операций пользователем в день
- RPS, сетевой трафик, кол-во соединений
- CPU
- HDD / SSD (only 85% of disk space is available, 3-5% disks are destroyed over the year, do not forget about replication)
- $$$

~ 100_000 sec in a day (86400 accurately)
read 1MB sequentially from network ~ 10ms
read 1MB sequentially from disk ~ 30ms
Google SRE book with calcualtions (recommended to have a look)

TODO
- websocket vs long polling

Потоки данных и компоненты системы

happy path. Read / write path

corner cases (когда части системы отваливаются). Уточнить на собесе что именно т до какой глубины здесь прорабатывать

проговорить логи, мониторинг, миграцию данных

TODO:

  • stateless / stateful нагрузки (как разделять?)

  • how to store documents in document oriented dbs

  • repeat relations in DB ( 1 to many, etc)

  • K/V, document oriented, column oriented, graph

    • по конкретным базам проработать

      • понять гарантии. Какой диапазон нагрузок они потянут. Дрифты часов

  • DDD

  • Entity-Relationship diagram

  • twelve factor app

  • what is failure domains

  • как масштабировать stateless/stateful компоненты на чтение, на запись (с использованием оркестраторов, горизонтальное, вертикальное)

    • partitioning vs sharding

Важно:

  • задавать правильные вопросы

  • не комититься на задачи, которые не нужно решать

  • помнить о времени

  • не начинать проектировать сразу

  • делиться своими размышлениями на собесе

  • проявлять самостоятельность и проактивность в проектировании

  • реагировать на наводящие вопросы и уточнения

  • в конце спросить и почему вы именно эту задачу спрашиваете?

Systems to learn

for 10 euro here there are many of below systems designed LINKarrow-up-right

  1. tik tok

  2. url shortener

  3. доставка еды

  4. whatsup

  5. Pastebin.com LINKarrow-up-right

  6. web crawler LINKarrow-up-right

  7. key-value store for a search engine LINKarrow-up-right

  8. Amazon's sales ranking by category feature LINKarrow-up-right

Back of the envelope calculationsarrow-up-right (good example LINKarrow-up-right)

A lot of links are taken from herearrow-up-right

Great youtube channel Crushing Tech Educationarrow-up-right; Jordan has no lifearrow-up-right

Last updated