Plan

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

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

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

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

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

выбрать правильный способ интеграции системы: 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 LINK

  1. tik tok

  2. url shortener

  3. uber LINK

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

  5. whatsup

  6. tinder Example

  7. Pastebin.com LINK

  8. web crawler LINK

  9. Mint.com LINK

  10. data structures for a social network LINK

  11. key-value store for a search engine LINK

  12. Amazon's sales ranking by category feature LINK

  13. Dropbox LINK

Back of the envelope calculations (good example LINK)

A lot of links are taken from here

Great youtube channel Crushing Tech Education; Jordan has no life

Last updated