Глубокое погружение в проектирование: чат, уведомления и лента
В этом уроке мы отрабатываем ответы на такие вопросы собеседования, как: построение чата, ленты (список обновлений ваших друзей, как в соцсетях) и уведомлений (сообщения, которые всплывают на телефоне). Мы простыми словами говорим о fanout (рассылка одного и того же обновления сразу многим людям, ка
System Design (планирование того, как построить крупное работающее ПО) похож на планирование города: дороги, которые двигают трафик, склады для хранения, светофоры, которые управляют нагрузкой, и ремонтные бригады, которые устраняют проблемы, — чтобы город продолжал гладко работать даже в самый плотный час пик.
- Системы реального времени и ленты
- Классический вопрос, который отрабатывается в этом уроке: проектирование систем реального времени — чат, лента (список обновлений друзей) и уведомления. Мы разбираем fanout (рассылка одного обновления сразу многим людям), упорядочивание (порядок, в котором появляются сообщения), гарантии доставки (подтверждение того, что сообщение дошло) и push (отправка оповещения на телефон).
- Компромисс
- Компромисс — это осознанный выбор между двумя хорошими вещами, когда нельзя полностью получить обе, — как выбор между быстрым и дешёвым. Цена есть всегда, и на собеседовании вы проговариваете её вслух интервьюеру.
- Эксплуатационная метрика
- Число, которое показывает, действительно ли решение работает для реальных пользователей (на продакшене — в работающей системе). Например: задержка (сколько времени занимает получение ответа), доля ошибок (доля запросов, которые завершаются неудачей), отставание очереди (сколько работы скопилось в очереди) или доля попаданий в кэш (как часто в быстрой памяти уже был ответ).