Хакни System Design | algocode.io
763 subscribers
62 photos
1 video
45 links
Изучи System Design для собеседований и карьеры
Download Telegram
🔥 Собеседование по System Design: Как большинство кандидатов не раскрывают свой потенциал за 60 минут?


➡️ Домены


Давай я расскажу, что это и как применять


Без доменов — ты строитель без чертежей.

Но что такое "домен"? Проще говоря:

Домен = автономная бизнес-логика с чёткими границами.

Внутри — высокая связность, снаружи — минимум зависимостей.



Как прийти к доменам? Шаг за шагом:

1️⃣ Функциональные требования (ЧТО система делает):

Пример: "Трекинг заказов, сбор статистики, оплата товаров".

2️⃣ Нефункциональные требования (КАК она это делает):

Пример: "Нагрузка 10K RPS, 99.9% uptime для платежей".

3️⃣ Домены — мостик между ними!


Вот как это выглядит на практике:

Смотрим на картинку

▫️ Аналитика: группировка + выгрузка данных

▫️ Платежи: оплата + история + возвраты

▫️ Товары: показ + редактирование


Как проверить, что домены выделены верно?

✔️ Тест на независимость: Изменения в одном домене не ломают другие.

Пример: Новая выгрузка в «Аналитике» = ноль изменений в «Платежах».

✔️ Тест на простоту: Описываешь домен одной фразой без "и".

Плохо: "Отвечает за пользователей и рассылки".

Хорошо: "Управление жизненным циклом заказа".


🔪 Осторожно: 2 частые ошибки!

Слишком мелкие домены:

Ошибка: Домен "Отображение платежей" (слишком мелко!).

Решение: "Платежи" как единый домен.

Технические псевдодомены:

Ошибка: "Сервис кеша" или "Модуль БД".

Исключение: "Единый механизм бэкапов" — да, если это бизнес-требование.

А микросервисы?


🚫 НЕ путай домены с микросервисами!

— Домен = логическая единица бизнес-логики.

— Микросервис = физическая реализация.


Один домен может жить в:

• 1 микросервисе (простой домен)

• Нескольких сервисах (сложный домен, например "Платежи")

• Монолите (если не нужна изоляция).


💡 Фишка для собеса:

Говори: "Выделяю домен X, потому что он инкапсулирует логику Y и изолирует данные Z. Это позволит независимо масштабировать/менять его без влияния на систему!"

P.S. Нефункциональные требования — твой компас для масштабирования. 10K RPS при покупках? Усиливай «Платежи». Частые ошибки от внешних интеграций? Добавь fallback паттерны

А если хочешь заглянуть дальше доменов, то держи бесплатник на Stepik. В нем проходится вся база для проектирования, собирается система и разбирается собес по system-design
👍5🔥2
Как функциональные требования могут убить твою систему?🔪

Представь, что ты разработчик в Big Tech. И вот тебе выдали задачу, где общие требования:

1️⃣ DAU 50 mln
2️⃣ Важна минимальная задержка между обновлением данных в источнике и в нашей системе
3️⃣ В нашей системе любые задержки неприемлемы, так как для сервиса критичен response time


Иначе говоря, бизнес хочет максимальную согласованность между данными в источнике и на нашей стороне. Но в то же время мы не можем позволить себе ходить во внешние API.

И вот ты садишься, считаешь нагрузку, пытаешься что-то сделать день/два/три. А еще ты нервничаешь, что, наверное, не вывозишь задачу и вообще какое тебе место в Big Tech!😨

Но на самом деле все проще: нужно оспаривать бизнес по поводу их требований.

Как гласит CAP-теорема: невозможно сделать систему одинаково согласованной и доступной.


Так и здесь: нужно делать выбор — хотим ли мы 100% точности в системе или же нам важнее скорость. Так как скорость страдать не может, то жертвуем точностью🎯

А как аргументировать свой подход? — Об этом расскажу в следующей части🔜

#функциональныетребования #нагрузка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
А как говорить с Бизнесом, когда требования — фантастика? 🤯

Привет! В прошлый раз мы залипли на том, что хотеть 100% согласованности данных + нулевых задержек + бесконечной доступности — это как мечтать о вечном двигателе. Значит, нужно идти к Бизнесу и... спорить😱

Но кто этот ваш "Бизнес"? Чаще всего на другом конце — BizDev (Business Development). Их задача — растить рынок, завоевывать клиентов, заключать партнерства и ставить амбициозные цели. Технические детали — не их профиль (хотя бывают и приятные исключения!).

Проблема: Как донести до BizDev'а, что его "просто сделайте" — это путь в технический ад? 🤔 Всё зависит от его "технической просвещенности":

1. Тип "Вообще Не Шарю":

Как выглядит: Глаза стекленеют при словах "база данных", "репликация". Для него система — черный ящик: "Закинул данные -> получил результат".

Как аргументировать:

🔹 Аналогии из жизни: "Представь, ты хочешь, чтобы курьер мгновенно доставлял пиццу в любую точку города, абсолютно горячей, и при этом стоил копейки. Так не бывает? Вот и с данными так же: скорость, точность, цена (ресурсы) — выбирай два".

🔹 Фокус на бизнес-последствиях: "Если мы попробуем сделать именно так, как в требованиях, система будет падать каждый час, и пользователи уйдут к конкурентам. Готовы ли мы к такому риску?"

🔹 Простота: Никаких "CAP", "Paxos" или "кворумов". Только суть: "Скорость или точность? Выбирай приоритет".


2. Тип "Чуть-Чуть Шарю":

Как выглядит: Знает слова "API", "база", "нагрузка", но глубоко не копает.

Как аргументировать:

🔹 Упрощенная визуализация: Схемка потока данных, где видно узкое горлышко или источник задержек. "Видишь эту стрелочку? Вот здесь при таких требованиях будет пробка".

🔹 Оценка в цифрах (очень грубо): "Ты хочешь обновлять данные для 50 млн DAU мгновенно. Даже если мы сделаем магию и обновим 1 запись за 1 мс, на всех это займет ~14 часов. Это реалистично?"

🔹 Предложение конкретных альтернатив: "Мы не можем гарантировать мгновенную точность для всех. Но можем: а) Гарантировать для премиум-пользователей; б) Гарантировать точность с задержкой 5 сек для всех; в) Гарантировать, что 99.9% данных будут точны через 10 сек. Что важнее для реального сценария?"


Итого: Независимо от типа BizDev, твоя ключевая задача как инженера — перевести технические ограничения на язык бизнес-рисков и возможностей. Умение делать этот перевод — критически важный навык, который часто приходит с опытом. Многие junior-middle разработчики фокусируются только на технической стороне, упуская бизнес-контекст.


В конце накину еще пару примеров:

🔹 Вместо “из-за кеширования могу быть неточности в данных” → “Чтобы ответить пользователю максимально быстро, мы используем предварительно подготовленные данные. Это может приводить к небольшим задержкам в актуальности информации, но критично ускоряет работу сервиса.” (Фокус на цели "скорость" и компромисс)

🔹 Вместо “У нас Postgres в этих сервисах, поэтому мы не сможешь просто так шардировать” → “Текущая архитектура хранения данных оптимизирована под надежность и сложные запросы. Ее масштабирование для таких нагрузок потребует значительных изменений и времени, так как простое ‘разделение’ данных здесь неприменимо.” (Фокус на последствиях - время/ресурсы и причина - "надежность/сложность запросов")"

#bizdev #коммуникации #карьера #softskills
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👏4
Почему "это невозможно" — худшая фраза в диалоге с Бизнесом? 🚫

Привет! В прошлом посте мы разобрали стратегии общения с BizDev, когда их требования кажутся нереальными. Сегодня — о главной ловушке, в которую часто попадают инженеры: фраза "это невозможно".

Почему это проблема? 🤔
Помнишь, BizDev обычно не погружен в технические детали (это просто не их фокус!). Но когда они слышат "невозможно":

🔹 Это звучит как отказ без объяснений. Бизнес не понимает почему, чувствует нежелание искать решение.
🔹 Подрывает доверие. "Не может команда X, а команда Y смогла?" — подумают они. И да, скорее всего, они пойдут к другим командам за альтернативами.
🔹 Твоя команда теряет. Меньше интересных задач → меньше возможностей для роста. Зачем доверять сложные фичи тем, кто сразу говорит "нет"? 😟

Что сказать вместо "невозможно"?
Вспомни главный принцип из прошлого поста: переводи технические ограничения в бизнес-термины и предлагай альтернативы!

Пример:
"Невозможно сделать мгновенное обновление для 50 млн пользователей!"

"Прямое обновление для 50 млн DAU в реальном времени потребует огромных ресурсов и может сделать систему нестабильной (риск для пользователей!). Давай подумаем:
• Гарантированное обновление данных за 5 секунд для всех?
• Или мгновенно — но только для премиум-сегмента?
Что критичнее для сценария?"

Суть:
▫️ Фраза "Давай подумаем, как это реализовать в рамках ограничений":
→ Переводит диалог в конструктивное русло
→ Показывает твою экспертизу
→ Сохраняет доверие и задачи в твоей команде! 💪

#коммуникации #bizdev #карьера #softskills
👍5🔥2👏1
Ну, лента😅

Казалось, есть лента в любой социальной сети. Что там сложного: берёшь посты юзеров и накидываешь в общий пул постов. А ещё какую-нибудь рандомную сортировку — вообще великолепно.

Но не тут-то было

Во-первых, тебе нужно учитывать подписчиков пользователя. Во-вторых, тебе нужно понимать, что есть так называемые селебрити, у которых много подписчиков, а есть обычные пользаки. В-третьих, а что если пользователь давно не был в сети?

А ещё есть много способов доставки этих постов в ленту. Например, сравним 3 подхода:

- Храним все посты юзеров в кеше у Feed Service. При запросе ленты получаем подписчиков юзера и делаем feed-merge (подготовка ленты).

- Храним посты в кеше у Feed Service только для активных пользователей. А если неактивный: получить подписчиков и затем выгребать посты из сервиса постов.

- Храним посты в кеше у Feed Service, но делаем fallback strategy на Post Service, чтобы в случае отказа ленты у нас был запасной вариант. И ещё сюда можно прикрутить circuit breaker.

В чём и 〰️ подходов? Для первого требуется гигантский RAM, но меньше response time. Для второго меньше RAM, но потенциально выше response time. Третий более надежный, но требует более сложной логики и долгой настройки.

А ещё можно поставить кеш перед Feed Service, чтобы первые 10 постов были всегда готовы (допустим, для всех пользаков). И таким образом мы можем сначала отдать из кеша, а попутно запустить поток готовить ленту дальше.

Как ты видишь, даже у 1 элемента в системе можно набросать множество вариантов. Но у каждого будут свои сильные и слабые стороны. Это называют trade-off📎


В след посте расскажу, а почему важно уметь прорабатывать разные варианты, если ты хочешь получить senior и выше👆

#лента #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥81😎1
Хочешь стать senior в Яндексе — умей видеть несколько вариантов реализации системы

В прошлом посте я говорил, что важно видеть несколько вариантов реализации системы. Обязательно прочитай посты выше (если ещё не видел).

🔍 Разберём реальные ситуации:

1️⃣ Спроектировать MVP системы и реализовать её за месяц
2️⃣ Распилить монолит и превратить его в микросервисы
3️⃣ Полгода на проект — нужно сделать всё идеально с первого раза

📌 Кратко по шагам для каждого случая

🚀 Быстрое MVP
- Главный компромисс — сложность против скорости:
- Можно пожертвовать надёжностью (durability), чтобы уложиться в срок
- Не делать всю функциональность, а только необходимую часть
- Обязательно провести load testing

🔨 Разделение монолита
- Анализ нагрузки каждого модуля (чтение/запись/CPU)
- Проработка зависимостей между сервисами
- Чёткий план миграции (не растягивать на годы!)

Полугодовой проект
- Прописать fallback-стратегии
- Заложить peak multipliers
- Продумать rollout: сначала только на X городов/Y% пользователей
- Не забыть про observability

👉 Как видишь, разные задачи требуют разного подхода.

📚 Пример из обучения
Со студентами обсуждали выбор структур данных для геозон:
- GeoHash
- KD-Tree
- R-Tree
- Quad-Tree

💡 Вывод:
Любая система многогранна. Оценивай свой проект под этим углом — и увидишь множество путей реализации.

PS: если хочешь проверить свой уровень проектирования, то записывайся на бесплатную диагностику

#разработка #архитектура #советы
🔥1
Я считаю, что программисты должны только писать код🖥

Смелое заявление, которое делают некоторые люди. Давай посмотрим на это с разных сторон.

Если ты не прорабатываешь задачу, не рисуешь архитектуру от и до, не выбираешь подходы, не набрасываешь product manager'у контраргументы на его предложения — ты отвечаешь только за свой маленький кусочек. И если другие звенья уйдут в отпуск или уволятся, тебе будет сложно — и оценка на ревью окажется не такой прекрасной.

А что, если ты захочешь попасть в западный Big Tech или создать свой проект? Тебе нужно уметь смотреть на проект шире, чем «вот ТЗ — напиши по нему».

Помни, что работа должна развивать тебя как специалиста, чтобы ты не оказался позади рынка. А если ты бездумно выполняешь задачи по ТЗ, то о каком развитии может идти речь

Если согласен, то ставь палец вверх👍

#архитектура #yandex
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥1🤯1
Какой же алгоритм для прохождения system design?🔧

Очень часто меня просят рассказать про этапы собеса по system-design. А также, что стоит делать на каждом.

Я решил подготовить ультимативный шаблон для этой секции, где будут шаги и примеры.

Забирай по ссылке

Если оказалось полезным, то ставь ❤️

#собес #шаблон
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍2
Думаю устроить созвон через недельку где-то. Пообщаемся с вами на разные темы: от программирования до карьерных моментов.

Можете накидывать вопросы в комментах. По времени скажу чуть позже: в Екб в пятницу вечером лечу и будет +2 Мск

PS: если будешь, то ставь лайк (ну или как минимум хочешь зайти)
👍35
Live stream scheduled for
Решено) В это воскресенье в 11:00 по Мск проведем эфир. Я буду в Екб, там +2

Если кто-то живет в Екб, то можете писать мне в личку — увидимся лично.

PS: а если ты с Москвы, то тоже можешь писать мне. Можем лично увидеться и поболтать
👍6🔥5❤‍🔥2
Через минут 25 начнем эфир)

Если у кого-то есть конкретные вопросы, то кидайте в комменты
👍3