System Design с Валерием Бабушкиным | Выпуск 3 | Собеседование | karpov.courses

  Рет қаралды 47,036

karpov.courses

karpov.courses

Күн бұрын

Пікірлер: 48
@IlyaLeontyev-r7i
@IlyaLeontyev-r7i 9 ай бұрын
Мастер-класс по расчетам в уме ) Респект!
@ВладиславИванов-в6ш
@ВладиславИванов-в6ш 2 жыл бұрын
Этот лев чистый тигр
@dmit100
@dmit100 2 жыл бұрын
умение планировать место на доске тоже надо оценивать
@ДенисАсалханов-к1ц
@ДенисАсалханов-к1ц 2 жыл бұрын
Крутой чувак, показал мастер класс как надо! Мотивирует)
@alexeykurdukov7951
@alexeykurdukov7951 11 ай бұрын
Очень крутое интервью. Захватывающее. Спасибо команде за выпуск.
@oeaoo
@oeaoo 2 жыл бұрын
Забурился в функционал, но очень интересно! Спасибо за урок!
@dmitryshepelev8125
@dmitryshepelev8125 2 жыл бұрын
А quadtree будет хранится в памяти и дублироваться во всех поднятых подах "го сервисов" или как это будет работать? Как будет происходить уведомление о пересчитывании quadtree при смене коодинат водителя, допустим, раз в 15-30 секунд?
@ramzeszaev
@ramzeszaev 2 жыл бұрын
Очень круто получилось! С точки зрения обучения такие видео более релевантные, чем когда приглашают новичков и они пытаются пук пук пук все готово сделать, мы же в унике не проходим как какой-тоизвестный ученый пытался в юношестве что-то делать, мы проходим уже плоды его работ. Тут уже чётко запоминаешь поинты на которые стоит обратить внимание.
@nizhib
@nizhib 2 жыл бұрын
Хочется верить, что для обучения именно прохождению самих интервью в скором времени появятся отдельные материалы. Цель же этой серии в моем понимании не столько научить их проходить, сколько дать понимание, насколько разный может быть результат в заивисимости от подготовки как общей, так и к этому формату в частности, и что в целом к такому формату лучше готовиться.
@pavelnikalayeu1514
@pavelnikalayeu1514 2 жыл бұрын
Валера, спасибо огромное за видео! Систем дизайн с опытными ребятами очень увлекательно смотреть. Что-то понятно, чему-то можно научиться. Видно, что Евгений натренирован в подобных собесах, даже по времени практически уложился. А я правильно понял, что Quadtree и весь этот GeoBackend описывает эффективный способ расчета географического расстояния, которое совсем не равно расстоянию по автодорогам? Можно ли было бы в данном случае сказать что-то вроде:"Я не уверен, какой наилучший способ найти ближайших водителей. Кажется, что географическое расстояние не совсем подходит, потому что дороги есть не везде. Плюс время пути по одним дорогам больше, чем по другим. Возможно, имело бы смысл выбрать 10 ближайших водителей, а дальше с помощью google maps API или чего-то подобного посчитать время пути, выбрать одного или несколько ближайших водителей, и им отправить уведомление"? Достаточно ли это хороший ответ? И еще вопрос: какой именно мониторинг нужно было упомянуть? Мониторинг системы на ошибки? Метрики, вроде времени поиска заказов и прочего? Что-то еще?
@ValeriiBabushkin
@ValeriiBabushkin 2 жыл бұрын
Да, Uber в свое время тратил довольно много денег за вызов API Гугл Карт для расчета времени прибытия. Как только есть географически близкие точки - дальше их можно отранжировать по времени прибытия Мониторинги в первую очередь здоровья сервиса, 99 перцентиль времени запроса, процент ошибок и тп
@whysage8024
@whysage8024 2 жыл бұрын
Что будет если пошеход находится возле границы самого большого квадрата смежной с другим таким квадратом? Мы получим при поиске водителей только с одной стороны от пешехода (в его квадрате) и не получим остальных водителей из соседнего большого квадрата даже если они ближе к пешеходу?
@anutavsesuper
@anutavsesuper 2 жыл бұрын
крутой выпуск! нравится! будет еще? жду!!!!
@fur1ous112
@fur1ous112 11 ай бұрын
29:24, а почему это правда, у нас же у водителей из общего квадрата все "верхние" квадраты общие и их не нужно хранить для каждого, разве не так?
@ИванБрагин-ш9ш
@ИванБрагин-ш9ш 2 жыл бұрын
Спасибо, очень круто, особенно что не очередной youtube/twitter..., по такси моков хороших не найти, только описание после подготовки. По требованиям получился монолог, это норма, или нужно на каждое предположение спрашивать? Например те же рейтинги, если бы Евгений уточнил делать это или нет, это был бы плюс или кандидат должен сам понимать какой функционал успеет задизайнить? Или более того нфт, где могут быть какие то особые требования, вероятно надо уточнять хотим ли мы прозрачность цен а не предлагать от себя. Еще часто вижу противоречия у разных блогеров, одни говорят что после каждого шага надо переспрашивать туда ли движемся, другие говорят наоборот, если что то не так, тебя перебьют. Тут вопросов от Евгения не было, так получилось или советуете что так лучше?
@fuegopuro5933
@fuegopuro5933 2 жыл бұрын
Ля, кайфы смотреть интервью по систем дизайн.
@aidarsiraev5729
@aidarsiraev5729 2 жыл бұрын
Валера крутой выпуск спасибо. Когда будет выпуск про то как банку такую накачать?
@ValeriiBabushkin
@ValeriiBabushkin 2 жыл бұрын
зачем мне конкуренты
@пакетгавна
@пакетгавна 2 жыл бұрын
@@ValeriiBabushkin банки - зачет! муж такие же хочет! но мучает вопрос: ты можешь сам себе спину почесать?
@arutyuso5692
@arutyuso5692 Жыл бұрын
По поводу GeoApp, 2 байта на позицию пользователя, поскольку 40КМ диаметр мск. При предложенной архитектуре на каждый город будет своя такая структура?
@danjilov3965
@danjilov3965 2 жыл бұрын
28:03 Как-то не закрыли этот вопрос, по поводу «запасного» бита. А вот если подумать, то одного бита будет недостаточно, т.к представим что у нас всего 10 битов в распоряжении, чтобы закодировать уточняющий адрес: 00|01|11|00|00 И тут уже непонятно, либо все число является адресом(00|01|11|00|00) Либо лишь та часть, после которой идут нули(00|01|11) Тут есть несколько решений: 1. Изменить способ хранения адреса, например если мы уточнили следующим образом(верхний левый квадрат -> нижний левый квадрат: 00|11|00|00|00, то вместо того чтобы хранить таким образом, будем хранить лишь числовой номер этой комбинации - т.к наше искомое число - 4(т.к самый последний номер с первой четвёрки) 2. Ну выделить отдельные 3 бита, которые будут фактически указывать на то, до какой двойки бит следует считывать данный адрес(до 1/2/3/4/5 двойки бит) Например в нашем случаем всё это дело выглядело бы след. образом: 00|01|11|00|00 010 Т.е указывает смотреть до 3-й двойки бит(начинаем отсчёт с нуля, чтобы его значение тоже использовать)
@nizhib
@nizhib 2 жыл бұрын
В той части действительно была проблема со способом указания, что глубже идти не надо, но как-то заговорились. Самым простым было бы использовать больше бит на 1 уровень, использовать троичное кодирование, или закодировать вообще все комбинации, как вы правильно предложили, но не просто пронумеровать их, т.к. слишком "тяжелым" может быть номер, а применять разные длины кодов в зависимости от популярности, что-то типа арифмитического сжатия по сути.
@timmyyyyyyyyyyyydimkakoopa5732
@timmyyyyyyyyyyyydimkakoopa5732 2 жыл бұрын
вопрос по поводу connection-service в случае, когда клиент_x_ водитель могли держать связь. 1) если я правильно понимаю, для такого высоко-нагруженного приложение будет невероятно дорого обходиться ресурс открытия/держания сокет-соединения для КАЖДОГО активного отношения клиент-водитель. 2) как технически разрешается решение, где на load-balancer/api-gateway с constant hashing (для распределения на правильный инстанс) нужно с открытого сокета слать ответы? я имею ввиду вопрос, где клиент шлёт HTTP, а затем ему нужно будет в режиме Socket соединения получать ответы (в обход всех сложных механизмов с constant hashing) спасибо за отличный мастер класс​ @Evgeny Nizhibitsky :)
@ValeriiBabushkin
@ValeriiBabushkin 2 жыл бұрын
Один сервер легко держит десятки тысяч соединений, кажется здесь нет проблемы
@timmyyyyyyyyyyyydimkakoopa5732
@timmyyyyyyyyyyyydimkakoopa5732 2 жыл бұрын
@@ValeriiBabushkin предположим у нас tomcat (блокирующий веб-сервер), у которого ограниченное кол-во потоков. Каждое сокет-соединение жрет по 1 потоку на отношение клиент_х_водитель, для поддержки такого функционала придётся скейлить много серверов с поддержкой сокетов, не так ли? [я говорю об открытом сокет-соединении]
@wimp825
@wimp825 2 жыл бұрын
Про ценообразование как то совсем мельком упомянули, казалось бы довольно важная часть и для пешехода и водителя, и для бизнеса
@nizhib
@nizhib 2 жыл бұрын
Ценообразование это уже скорее ML System Design. Было упомянуто, что неплохо бы его сделать прозрачным в отличие от известных примеров.
@batnasn
@batnasn 2 жыл бұрын
Женя жесткий
@wskeal86
@wskeal86 2 жыл бұрын
Спасибо за видео. Самое интересное из трех видео серии. Собеседуемый парень оч. крутой. Верно ли я понял, что на каждом шаге мы рассчитываем центр квадрата для определения того, какому из четырех квадратов принадлежат искомые координаты (пешехода). Т.е. при глубине в 12, у нас будет 12 вычислений, чтобы получить "адрес" квадрата, по которому мы уже получим множество айдишников водителей? Т.е. для экономии занимаемого места дерева, координаты каждого угла каждого квадрата мы в дереве не храним?
@nizhib
@nizhib 2 жыл бұрын
Все эти вычисления легко сделать прямо на стороне клиентского приложения, и тогда клиент при общении с сервером уже будет оперировать в терминах бинарных адресов в дереве сразу. Для «оптимизации» и на стороне клиента эту информацию можно кешировать и обновлять только последние биты адреса, т.к. пешеход не будет телепортироваться обычно, хотя на клиенте такой оптимизацией заниматься скорее бессмысленно.
@fur1ous112
@fur1ous112 11 ай бұрын
13:31 откуда 100к секунд?
@DeamondGod865
@DeamondGod865 Ай бұрын
просто принятое округление секунд в сутках чтобы не считать, если считать точно то около 86к
@elleonoraa
@elleonoraa Ай бұрын
@@DeamondGod865 а как считать?
@DeamondGod865
@DeamondGod865 Ай бұрын
@@elleonoraa 60*60*24 = 86400 округляют до 100к или 10^5
@stasgafarov
@stasgafarov 2 жыл бұрын
Запишите меня на System design курс пожалуйста, можно прям в первый поток
@СергейЮров-б6е
@СергейЮров-б6е 2 жыл бұрын
Оператор-джан, в таком непростом случае все же выбирай целую голову спикера, а не ровный фон. Фиг с ним. Мы слушаем ЧТО говорят умные люди, а не как выглядит фон))
@DataEngTi
@DataEngTi 2 жыл бұрын
Круто, интересно, что в систем дизайне никак не затрагивают тему безопасности данных, защиты и т.п.
@dmit100
@dmit100 2 жыл бұрын
да, кстати, почему?
@BorysMinaiev
@BorysMinaiev 2 жыл бұрын
Интересно, что вы обсудили 10 QPS на поиск в QuadTree, но совсем не обсудили как обновляются в нем данные. Например, если 100k онлайн водителей будут каждую секунду слать свою позицию, и ее нужно будет обновлять в QuadTree, то "просто сервис на го" уже вряд ли такое выдержит. Понятно, что можно слать не раз в секунду, а реже, но все равно, во время заказа такси, пользователь хочет увидеть, что машина к нему плавно едет, а не магически становится ближе раз в минуту. В любом случае кажется запросов на запись в эту систему будет значительно больше чем на чтение, и стоит подумать как это обрабатывать.
@ValeriiBabushkin
@ValeriiBabushkin 2 жыл бұрын
​ @Evgeny Nizhibitsky мне почему то кажется что мы обсуждали такое, ты не помнишь?
@fameismyname
@fameismyname 2 жыл бұрын
"машина к нему плавно едет" это уже после мэтчинга, там можно p2p слать координаты а для самого мэтчинга можно и реже обновлять
@nizhib
@nizhib 2 жыл бұрын
1. Все 100k RPS не нужно давать на все инстансы сервиса сразу, можно шардирование сделать с привязкой к геолокации, условно 1k RPS давать на Мытищинский «сервис на го», и 3k RPS на инстанс для Хамовников, а между ними иногда синкаться, тогда не нужна сиюсекундная консистентноть между всеми сервисами, ведь такси из Мытищ в Хамовники не телепортируется быстро. 2. «Плавность передвижения» осуществляется частично за счёт предсказания движения, а не большого RPS - так же навигатор будет некоторое время считать, что вы едете по предлагаемому маршруту, хотя уже свернули по своей воле куда-то ещё. 3. Во время поиска передвижение обычно вообще не показывается, только периодически увеличивается радиус опроса, поэтому обновлять и не надо.
@nizhib
@nizhib 2 жыл бұрын
@@ValeriiBabushkin про обновление мы обсуждали точно, что нужно сделать количество операций, линейно зависящее от глубины,т.е. фактически константные несколько десятков удалений и записей, т.к. машина обычно успевает только в соседний квадрат переехать, а значит задеты максимум 2 записи на каждом уровне дерева.
@gunslinger_9x19
@gunslinger_9x19 2 жыл бұрын
Quadtree тут скорее пример как не надо делать на собеседовании. Человек погрузился в детали реализации, без необходимости (чем было обосновано это погружение? я не услышал). Ну и по факту отдельная структура нафиг не нужна, БД умеют делать пространственные запросы, стоят сами quadtree индексы. Сделать запрос в БД водителей, выбрать свободных водителей в таком то радиусе ерунда для БД. Мы же обычно не изобретаем велосипед с другими индекасами, не изобретаем свои БД, без необходимости? Должно быть серьезное обоснование зачем нам изобретать велосипед на этапе поверхностного дизайна.
@slavanikulin8069
@slavanikulin8069 Жыл бұрын
позерство, скорее всего. мол, я знаю, что это, и как оно работает
@vy500
@vy500 11 ай бұрын
"есть графана" - без графана вы про фана... ладно сойдет за обе стороны - хотя по виду тихий ужас - "карго культ" - оба господина об этом.
@OOOJohnJ
@OOOJohnJ 2 жыл бұрын
по-моему очень глупая затея не говорить про мастер-слейв. Это из разряда "не говорить про папа-мама, используя родитель1-родитель2",
Google system design interview: Design Spotify (with ex-Google EM)
42:13
IGotAnOffer: Engineering
Рет қаралды 1,2 МЛН
Публичное интервью по System Design. Александр Поломодов.
1:38:45
System Design Interview: A Step-By-Step Guide
9:54
ByteByteGo
Рет қаралды 782 М.