Что нужно знать о собеседовании по системному дизайну

Это ужасное интервью по проектированию систем. Я помню, как мне задали первый вопрос о проектировании системы. «Создайте WhatsApp», - сказал он. Я не знала, с чего начать! Я был посвежее. Структуры данных и алгоритмы были единственным, что я знал. Я уверен, вы можете догадаться, как прошло то интервью. Затем, после достаточного количества исследований, я составил себе своего рода контрольный список компонентов, чтобы сориентировать меня на следующих собеседованиях по проектированию системы!

Так что я остановлюсь на болтовне и сразу перейду к делу!

Пользовательский интерфейс

Прежде всего, как пользователи взаимодействуют с вашей системой? Через мобильное приложение, ноутбук или смарт-телевизор? Это дает нам представление о том, с какими ограничениями и скрытыми требованиями мы имеем дело. Например, в случае мобильного пользователя нам, возможно, придется обрабатывать колеблющиеся сети, для сценария типа пользователя смарт-телевизора и ноутбука нам, возможно, придется поддерживать разные форматы файлов и разные разрешения и соотношения сторон.

Балансировщик нагрузки

Вы не можете спроектировать распределенную систему без балансировщика нагрузки. Балансировка нагрузки означает распределение запросов между различными узлами распределенной системы, чтобы уменьшить время отклика и улучшить использование ресурсов. Распределяя нагрузку между различными узлами, мы исключаем возможность возникновения единой точки отказа, а также гарантируем, что один узел не будет перегружен, в то время как другой сервер может простаивать.

Веб-сокеты

Или, если быть более конкретным, обработчик веб-сокетов и менеджер веб-сокетов. Я знаю, это нестандартные условия. Но это то, что я недавно наткнулся на видео на YouTube, и это имеет смысл. Обработчик веб-сокетов - это, по сути, сервер, который поддерживает открытое соединение веб-сокетов со всеми активными пользовательскими устройствами. Любой запрос от пользователя будет поступать в систему через обработчик веб-сокета, и любые уведомления или ответы пользователю также будут отправляться через обработчик веб-сокета. Теперь, если мы работаем над крупномасштабным приложением с пользователями, распределенными по разным локациям, нам потребуются обработчики веб-сокетов, распределенные по разным географическим локациям. Подумайте о низкой задержке. Теперь пользователи могут также переключаться между различными обработчиками веб-сокетов из-за, скажем, колебаний сети, или просто потому, что теперь они физически ближе к другому обработчику веб-сокетов. В этом случае нам нужен центральный репозиторий, чтобы отслеживать, какой пользователь подключен к какому обработчику веб-сокетов. Это делается с помощью диспетчера веб-сокетов.

База данных

Ну, не только базы данных, решения для хранения в целом. Если нам нужно сохранить изображения или файлы, нам понадобится хранилище BLOB-объектов, такое как Amazon S3, если мы храним платежные записи, нам нужно, чтобы оно соответствовало свойствам ACID и в таком случае нужна реляционная база данных. Если мы храним информацию о продукте на платформе, такой как Amazon, нам, вероятно, понадобится база данных документов, такая как Mongo DB. Если бы мы создавали Twitter или Facebook, мы не смогли бы разработать нашу систему без решения для кэширования, такого как Redis. При принятии решения о том, какое решение для хранения данных использовать, нужно учитывать множество вещей! Вот одна из лучших статей, с которыми я столкнулся во время подготовки - › Выбор лучшего решения для баз данных на собеседовании по проектированию системы от CodeKarle.

CDN

Опять же, если наши пользователи распределены географически, имеет смысл хранить копии часто используемых данных в центре обработки данных, расположенном ближе к местоположению пользователей. Например, большой трафик Scared Games на Netflix, вероятно, идет из Индии. Поэтому имеет смысл хранить данные в центре обработки данных недалеко от Индии, чтобы уменьшить задержку и улучшить взаимодействие с пользователем. Вот короткое видео от Akamai, в котором вкратце объясняется, что именно делает CDN - › Что такое CDN

Компоненты аналитики

Помните, что независимо от того, какую систему вы создаете, всегда есть возможности для аналитики. Это одна из тех вещей, которые никогда не вызываются во время сбора требований, но требуются всегда. Это когда мы используем программное обеспечение для потоковой обработки, такое как Kafka. Что бы ни происходило в системе, пользователь входит в систему или выходит из нее, прерывается после разговора, отменяет заказ, отменяет платеж, что угодно! Для нас это вся полезная информация! Всякий раз, когда происходит событие, его следует записывать в Кафку. В Kafka мы могли бы запускать несколько простых заданий потоковой передачи искр для обработки в реальном времени. Или мы могли бы просто выгрузить данные в кластер Hadoop, а затем запустить несколько необычных алгоритмов машинного обучения для детальной аналитики.

Подключаемые компоненты

Если бы мы создавали Twitter, длина поста - одно из ограничений, с которыми нам нужно справиться. Но что, если пользователь хочет поделиться ссылкой? Это заняло бы половину поста! Вот почему нам нужна служба сокращения URL. Независимо от того, какую систему вы создаете, всегда будет что-то или другое, о чем нужно сообщить пользователю. Здесь вам может понадобиться служба уведомлений. Службы уведомлений - отличный способ понять требования к подключаемости. Что, если в соответствии с нашим требованием нам нужно отправлять уведомления в приложении, если другу нравится изображение профиля на Facebook. Итак, мы встраиваем это в нашу систему. Теперь появилось новое требование - отправлять уведомления по электронной почте пользователям, которые не заходили в приложение более 3 дней. Мы не можем добавить еще одну службу для обработки уведомлений по электронной почте. Вот почему наша служба уведомлений должна быть подключаемой, чтобы мы могли добавлять обработчики по ходу работы и легко поддерживать новые методы уведомления.

Другим примером использования независимой службы в качестве отдельного компонента может быть служба доставки ресурсов. Если вы создавали что-то вроде Netflix, нам нужна система для загрузки видеоконтента в CDN в зависимости от входящего трафика, управления, какие разрешения и данные о соотношении сторон должны быть отправлены какому пользователю, позаботится о перекодировании основного файла во все другие поддерживаемые форматы файлов и т. д. Я прикреплю ссылку на одно из упомянутых мной видео, чтобы понять, как может работать система доставки активов.

Мониторинг и оповещение

Достигаете ли вы вехи? Соблюдение сроков? Ваша система работает должным образом? Будь то любое приложение, независимо от того, насколько хорошо оно спланировано или спроектировано, всегда есть шанс, что что-то пойдет не так. Может произойти сбой сторонней зависимости, один сервер может выйти из строя, возможно, загрузка ЦП одного сервера очень высока, а другой - недостаточно загружен, возможно, система не смогла достаточно масштабироваться во время распродажи в Черную пятницу! Разве не было бы здорово узнать об этом заранее?

Но как? Конечно же, отслеживая вашу систему! И настораживает. Все, что ведет себя неожиданно или достигает своего предела, должно быть вызвано ДО того, как оно выйдет из-под контроля. Это еще одна из тех вещей, которые не вызываются изначально, но очень важны при построении системы. Вот пример того, как это можно сделать.

Брауни Поинт

После того, как вы придумали решение, которое отвечает всем требованиям, предъявляемым на этапе сбора требований, настало ваше время действительно выделиться и выделиться среди других кандидатов. Это когда вы рассматриваете крайние случаи, которые люди обычно не рассматривают на собеседовании. Например, как Google обрабатывает спорные области, такие как границы Индии, Пакистана и Китая, на Картах Google? Или вы можете продемонстрировать, как можно расширить свое решение для поддержки гораздо большего масштаба, чем предполагалось. Например, можно ли расширить вашу систему видеоконференцсвязи для прямой трансляции мероприятия?

Ресурсы, на которые вы, возможно, захотите посмотреть

Что такое балансировщик нагрузки? - › https://medium.com/@itIsMadhavan/what-is-load-balancer-and-how-it-works-f7796a230034

Как выбрать лучшее решение для хранения данных на собеседовании по проектированию системы? - › https://www.codekarle.com/system-design/Database-system-design.html

Что такое CDN? - › https://youtu.be/l6X_IxyGHHU

Как масштабировать вашу систему с помощью Redis - › https://youtu.be/CtV-QymAeIc

Как работает система доставки активов (на примере Netflix) - › https://youtu.be/lYoSd2WCJTo

Вот еще одна средняя статья, которую я написал о выборе лучшей БД для собеседования по проектированию системы - › https://towardsdatascience.com/choosing-the-right-database-in-a-system-design-interview-b8af9c6dc525? source = friends_link & sk = d78ef7e0b0f4071636c57681b9fce1c8

Исчерпывающее руководство по взлому на следующем собеседовании по дизайну системы от CodeKarle - › https://www.codekarle.com/

Часто задаваемые вопросы на собеседовании по проектированию системы - › https://www.youtube.com/watch?v=EpASu_1dUdE&list=PLhgw50vUymyckXl3D1IlXoVl94wknJfUC

Я надеюсь, что это поможет вам составить собственный контрольный список, на который можно будет ссылаться во время следующего собеседования по проектированию системы. Думаете, я пропустил важный шаг? Дай мне знать в комментариях!