Подготовка к интервью по системному дизайну (System Design Interview)

Часть 2.

Sergei Golitsyn
2 min readApr 6, 2020

Предыдущая статья : Часть 1. Прежде чем читать эту статью, рекомендую прочитать предыдущую, что бы было понятно о чем идет речь.

Шаг 3. Оценка масштаба системы.

Хорошей идеей будет оценить масштаб системы, которую мы будем разрабатывать. Это так же поможет позже, когда мы сфокусируемся на масштабировании, партиционировании, распределении нагрузки, кэшировании.

— Какое масштабирование ожидается от системы (например количество новых твитов, количество просмотренных твитов, как много новостных лент генерируется в секунду).

— Как много памяти нам понадобится? Это будет разное количество, если пользователи смогут иметь/прикреплять фото и видео к своим твитам.

— Какую пропускную способность сети мы ожидаем? Это будет критично в принятии решения о том как мы будем управлять трафиком и балансировать нагрузку между серверами.

Шаг 4. Определение модели данных.

Определение модели данных на разных на разных этапах позволит прояснить как данные будут передаваться/”течь” по разным компонентам системы. Позже, это будет являться гайдом для партиционирования и управления данными. Кандидат должен быть способен определить различные сущности системы, как они будут взаимодействовать друг с другом, а также определять различные аспекты управления данными, такие как хранилище данных, транспортирование данных, шифрование и другое. Дальше приведу несколько сущностей для нашего Twitter подобного сервиса:

User: UserID, Name, Email, DoB, CreationData, LastLogin, etc.
Tweet: TweetID, Content, TweetLocation, NumberOfLikes, TimeStamp, etc. UserFollowos: UserdID1, UserID2
FavoriteTweets: UserID, TweetID, TimeStamp

Какую базу данных базу данных мы будем использовать? Возможно NoSQL подобное решение типа Cassandra лучше всего соответствует нашим потребностям или мы должны использовать решение на подобии MySQL. Какой тип блочных хранилищ мы должны использовать для хранения фото и видео?

Надеюсь эти шаги были полезны для вас. В следующих статьях мы рассмотрим: высокоуровневый дизайн, детальный дизайн, определение и устранение узких мест (resolving bottlenecks)

--

--

Sergei Golitsyn
Sergei Golitsyn

Written by Sergei Golitsyn

7+ years of experience in building massively scalable systems (mostly using Java) both from scratch and diving into an existing codebase.

No responses yet