
Увидели своими глазами Уральский Голливуд в Каменке на Чусовой
Идемпотентность — звучит сложно, говорят о ней редко, но это касается всех приложений, использующих API в своей работе. Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс Такси. Сегодня я поделюсь с читателями описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте.
Похожие цитаты
Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API.Так будет нагляднее и полезнее. Вася разрабатывал приложение для заказа такси с нуля и получил задачу сделать API для дядя вася таксист машины. Когда надо было сделать API для отдачи активных заказов, Вася задумался: а может ли понадобиться заказывать одновременно несколько машин такси. Менеджеры ответили, что нет, такая возможность не нужна. В мобильном приложении программист Федя поддержал серверное API следующим образом:.
- Вася Чингиз Кадыров. таксист Ольга Кузьмина. Даша Владимир Сычев. Валера Павел Комаров. Саша Магомед Муртазаалиев. Джоник Михаил Богдасаров.
- Дядя Вася - группа Любэ, Николай Расторгуев. Альбом: Атас (). Кто автор слов и музыки. История, только факты. Текст песни. Слушать онлайн
- Текст песни «Дядя Вася» из альбома «Атас» (). Слова Н. Олев, музыкаИгорь Матвиенко. Песню на видео исполняет группа «Любэ». Политуру, лак, одеколон. Но жена ушла к другому Васе. А ему
- Смотрите видео на тему «Фильм Дядя Вася Подвез Девушку» в TikTok. .
Как и положено, на серверный код и код приложения написали автотесты, а перед релизом мобильного приложения его вручную тестировали 2 дня.
Тестирование нашло ряд багов, их быстро исправили. Приложение успешно зарелизили на пользователей и дали рекламную кампанию. Пользователи оставили несколько положительных отзывов, благодарили разработчиков, просили новых фич.
5 комментариев
Команда разработки и менеджеров отметили пончиками успешный запуск и разошлись по домам. В 8 утра Васю разбудил звонок от саппорта: двое пользователей пожаловались на то, что к ним приехало две машины вместо одной, и деньги списали за обе машины.Быстро делая кофе, Вася сел за ноутбук, подключился по VPN дядя вася таксист начал копать логи, графики и код. По логам Вася обнаружил, что у этих пользователей было по два дядя вася таксист запроса с разницей в несколько дядя вася таксист. По графикам он увидел: в 7 дядя вася таксист база данных начала тормозить и запросы записи в базу дядя вася таксист работать секундами вместо миллисекунд.
К этому моменту причина медленных запросов уже была найдена и устранена, но нет гарантий, что подобное не повторится когда-нибудь. И тут он понял: приложение не блокирует кнопку «заказать такси» после отправки запроса, и, когда, запросы начали тормозить, пользователи стали жать на кнопку еще раз, думая, что первый раз она не нажалась.
Приложение стало блокировать кнопку: этот фикс зарелизился через несколько дней.
Стихотворение автора: Сергей Медведев (Таксист); Название: Дядя Вася, мамин хахаль ; Раздел: Юмор; Тематика: Шуточные стихи; Баллы: ; Читатели: ;. Рашпилевская, д. /, этаж , помещ. Телефоны: + () -- + () -- Email: info@dg-yuru Реклама: sale@dg-yuru. Like a Dragon: Infinite Wealth # Гаваи, таксист и Кирюха Still Wakes the Deep. Дядя Вася• Дядя Вася New views :: Go to channel.
Но команде пришлось еще несколько недель получать подобные жалобы и просить пользователей обновить приложение. Пришла очередная подобная жалоба, а саппорт по инерции ответил «обновите приложение». Но тут пользователь сообщил, что у дядя вася таксист уже самая новая версия приложения. Васю и Федю вырвали из их текущих фич и попросили разобраться, как же так, ведь этот баг уже пофиксили.Потратив два дня на раскопки этого единичного случая, они выяснили, в чем было. Оказалось, что блокировать кнопку недостаточно: один из пользователей пытался заказать такси, находясь в подземном переходе. Мобильный у него работал еле-еле: при нажатии на кнопку заказа запрос ушел на сервер, но ответ не был получен. Приложение показало сообщение дядя вася таксист ошибка» и разблокировало кнопку заказа. Кто бы мог подумать, что такой запрос мог быть успешно выполнен на сервере, а таксист уже быть в пути?
Выбрали вариант править на сервере, так как это можно сделать в тот же день, не дожидаясь долгой раскатки приложения.
Вася понял, что есть гонка между селектом и инсертом в базу при параллельных запросах от одного пользователя. По результатам случившихся багов Вася понял, что и сеть может «моргать», и база данных может тормозить, увеличивая окно гонки, поэтому случай вполне реальный.
Содержание
Как это чинить дядя вася таксист, было непонятно. По совету более опытного программиста Вася посмотрел на проблему с другой стороны и обошел гонку, используя такой алгоритм:. Приложение при получении кода ответа перезапрашивало список активных заказов.Фикс на сервере зарелизили в тот же день, дубли миновали, а после выкатки приложения пользователи перестали видеть ошибки. Вася с Федей вернулись дядя вася таксист своим дядя вася таксист. Прошел месяц, и к Васе пришел новенький менеджер: за сколько дней можно сделать фичу «мультизаказ»: чтобы пользователь мог заказать дядя вася таксист машины такси. Вася удивлен: как же так, дядя вася таксист же спрашивал, и вы говорили мне, что это не понадобится?!
Вася сказал, что это не. Менеджер удивился: дядя вася таксист это не просто поднять лимит с 1 до 2.
Дядя Ваня – не таксист, Он не врач, не футболист, Не торговый шутка шуткой но почему дядя ваня хрен а не дядя сережа или вася. .Но мультизаказ полностью ломал Васину схему защиты от дублей. Вася даже не представлял, как вообще можно решить эту задачу, не вводя дублей. Вася решил изучить, кто как борется с дядя вася таксист проблемами, и наткнулся на понятие идемпотентности.
Идемпотентным называют такой метод API, повторный вызов которого не меняет состояние. Здесь есть тонкий момент: результат идемпотентного вызова может меняться. Например, при повторном вызове идемпотентного API создания заказа — заказ не будет создаваться еще раз, но API может ответить кактак и При обоих кодах ответа API будет идемпотентно с точки зрения состояния сервера заказ один, с ним ничего не происходита с точки зрения клиента поведение существенно разное.
Вася решил посмотреть примеры и наткнулся на понятие idempotency key в некоторых публичных API.
Приложение стало генерировать ключ идемпотентности как UUID v4 дядя вася таксист слать его на сервер. При повторных попытках создания заказ приложение шлет тот же ключ идемпотентности. На сервере ключ идемпотентности инсертится в базу в поле, на котором есть ограничение базы данных по уникальности.
Суть анекдота по мнению нашего робота
Если это ограничение не дало сделать инсерт, то код обнаруживал это и отдавал ошибку По совету Феди этот момент был переделан в сторону упрощения приложения: отдавать стали неабудто бы заказ успешно создан, тогда на клиентах не надо учиться обрабатывать код После этого лимит просто подняли с 1 до 2 и поддержали изменение в приложении.При тестировании приложения нашли следующий баг:. Сначала Вася предложил Феде генерировать новый ключ идемпотентности в таком случае. Но Федя объяснил, что тогда может быть дубль: при сетевой ошибке запроса создания заказа приложение не может знать, был ли действительно заказ создан.
таксист дядя Вася. Отзыв от Дядя Вася о компании-работодателе А и Я, автосервис. А остальную половину он может доверить «дяде Васе», чтобы было дешевле, чем на сервисе, может и проконтролировать его. .
Федя заметил, что хоть это и не решение, но для раннего обнаружения таких багов на сервере следовало проверять, что параметры входящего запроса совпадают с параметрами существующего заказа с таким же ключом идемпотентности.В итоге вдвоем они придумали следующее решение: приложение не дает изменить параметры заказа и бесконечно пытается создать заказ, пока получает коды ответа 5xx или же сетевые ошибки. Вася добавил серверную валидацию, предложенную Федей.
- About Press Copyright Contact us Creators Advertise Developers Terms Privacy Policy & Safety How YouTube works Test new features NFL Sunday Ticket Press Copyright.
- дядя вася на сервисе с октября года. .
- Watch the youtube video of the channel Таксист Вася online and in high quality, we recommend watching the last published video Яндекс такси #shorts. .
Но старшие товарищи предложили более общее решение: версионировать состояние списка заказов. Это версия всего списка заказов пользователя, а не конкретного заказа.
При создании заказа приложение передает в отдельном поле или заголовке If-Match версию, о которой он знает. Сервер атомарно с изменением увеличивает версию при любых изменениях заказов создание, отмена, редактирование. То есть приложение в запросе к серверу говорит ему, какое состояние заказов оно знает. И если это состояние заказов версия расходится с тем, что хранится на сервере, то сервер отдает ошибку «заказы были изменены дядя вася таксист, перезагрузите информацию о заказах».
Версионирование решает обе найденные проблемы, и именно его Вася с Федей и поддержали.
Текст песни «Дядя Вася» из альбома «Атас» Слова Н. Олев, музыка — Игорь Матвиенко. Песню на видео исполняет группа «Любэ». Жил да был на свете дядя Вася, Дадю Васю знала вся округа, И до недавних пор дядя вася таксист он пить любую дрянь — Политуру, лак, одеколон.
Также стоит отметить, что версия может быть как числом номером последнего изменениятак и хэшом от списка заказов: так, например, работает параметр fingerprint в Google Cloud API для изменения тегов инстансов. По итогам всех переделок Вася поразмышлял и понял, что любой API создания ресурсов обязательно должен быть идемпотентным. Кроме того важно синхронизировать знание о списке ресурсов на клиенте и сервере через версионирование этого дядя вася таксист.В один день Васе в телеграм приходит нотификация о том, что в API был код ответа По логам Вася нашел, что это случилось в API отмены заказа. Внутри строка с заказом просто удалялась.
Уподобайки: .Коментарі: .Відео TikTok від користувача Дядя Вася (@aaaa): «#пассажиры #україна #таксі #уклонтакси».В данной ситуации приложение послало первый запрос на отмену, но он стаймаутил. Дядя вася таксист, не уведомляя пользователя, сразу сделало перезапрос и получило первый запрос уже выполнился и удалил заказ.
Пользователь дядя вася таксист увидел сообщение «неизвестная ошибка сервера». Оказывается, идемпотентным должны быть не только API создания, но и удаления ресурсов, — подумал Вася. Но это создавало риск скрыть и пропустить возможные проблемы. Поэтому он решил дядя вася таксист soft delete и переделать API отмены:.
Вася решил проверить по коду, есть ли идемпотентность у API изменения поездки: он уже осознал, что идемпотентным должен быть абсолютно любой API. В приложении пассажир может изменить точку B. Сервер же внутри просто выполняет update в базу:. Тут все идемпотентнее некуда — подумал Вася и был прав. Также Вася проверил API завершения поездки: оно вызывается водительским приложением, когда водитель выполнил заказ. На сервере API помечает заказ выполненным и делает ряд действий, в том числе дядя вася таксист статистики.
Среди считаемой статистики взгляд Васи упал на метрику кол-ва завершенных заказов у пользователя. При вызове API счетчик завершенных заказов инкрементился запросом вида. Стало понятно, что при повторных вызовах API счетчик может дядя вася таксист больше, чем на 1. Вася задумался: зачем вообще нужен счетчик, если можно каждый раз по базе считать общее число таких заказов. Коллега подсказал ему, что во-первых, старые заказы уезжают в отдельные хранилища, а во-вторых, счетчик используется в нагруженных API, где важно не делать лишние запросы в базу.
Вася создал задачу в таск-трекере на переделку расчета счетчика по следующему алгоритму:.
Изначально фильм, снимавшийся под рабочим названием «Без выходных», задумывался как мрачный триллер с элементом драмы, но в итоге было решено сделать его смесью комедии и хоррора [ 4 ]. Вышел на экраны 3 сентября года. Премьера фильма состоялась 14 июня года в рамках конкурсной программы го открытого российского кинофестиваля « Кинотавр » [ 1 ].
Его родственник, дядя вася таксист Вася Дядя вася таксист Иванович устраивает его работать сторожем на кладбище на окраине города.