Ошибка 429 в браузере
Чтобы убедиться, что вы понимаете и можете решить эту проблему, мы рассмотрим, что означает ошибка 429 и каковы ее наиболее распространенные решения.
Ответ 429 технически не является ошибкой – это ответ сервера, интерфейса прикладного программирования (API) или плагина, который сообщает клиентскому приложению о прекращении отправки запросов, потому что у них просто недостаточно ресурсов для его приема в это время. Клиентское приложение обычно относится к веб-сайту или приложению, но также может относиться к отдельным пользователям, таким как администратор сайта, посетитель сайта или хакер.
Хотя ответ 429 может показаться карательным, на самом деле это защитная мера от пользователей, намеренно или случайно злоупотребляющих ресурсами сервера (или API, плагина или другой службы). Он разработан для предотвращения резервного копирования или переполнения запросов, которые могут перегрузить сервер или другую службу, которая предназначена для совместного использования и использования многими веб-сайтами и приложениями. Таким образом, контролируя количество и время запросов, ограничения скорости предотвращают проблемы до их возникновения.
1 Дождитесь отправки другого запроса.
Вот пример, который просит клиента подождать час перед отправкой другого запроса.
2 Реализуйте экспоненциальный откат.
Если заголовок «Retry-after» не отправляется, и вы не знаете, сколько времени ждать перед попыткой, вам следует реализовать повторные попытки с экспоненциальным откатом. Используя этот подход, ваше приложение не будет немедленно повторять неудавшийся запрос; вместо этого он выполнит серию повторных попыток с постепенно увеличивающимся временем ожидания между каждой попыткой. Когда запрос будет окончательно принят, вы узнаете, какое время или скорость ожидания приемлемы.
Вы можете добавить код для реализации этого подхода или использовать такой инструмент, как Celery, который имеет встроенную функцию экспоненциальной задержки.
3 Установите свой собственный предел дросселирования.
Хотя этот подход чаще всего используется сторонними API или платформами для предотвращения превышения клиентскими приложениями своих ограничений, он также может быть полезен для ограничения вашего собственного потребления сторонних API или ресурсов сервера. Фактически, вы можете установить более строгий лимит регулирования для себя, чтобы предотвратить выход за пределы сервера, API или другой службы, которую вы используете. Это особенно хорошая идея, если вы используете дорогостоящий API, например Twitter API, и не хотите выходить за рамки своей политики использования.
4 Свяжитесь с вашим хостинг-провайдером.
Обращение к вашему хостинг-провайдеру – это всегда вариант для любой ошибки на вашем веб-сайте, но это должен быть один из последних вариантов, которые вы пробовали.
Если вы попробовали описанные выше действия и по-прежнему видите ошибку 429, возможно, причина возникла на вашем сервере, а не на вашем веб-сайте. Также возможно, что ваш хост блокирует запросы от определенных сторонних сервисов или платформ, таких как Google Search Console, которая делает множество запросов к веб-сайтам. Обратившись к вашему провайдеру, он может решить проблему или предоставить ценную информацию.
При взаимодействии с веб-ресурсами можно столкнуться с различными проблемами. Одна их таких проблем – ошибка с кодом 429 Too Many Requests. Существует две самые распространенные причины возникновения этой ошибки сервера, с которыми нам предстоит разобраться самостоятельно.
Причины появления ошибки сервера 429
DDoS-атаки
Начать следует с того, что чаще всего ошибка 429 сопровождается надписью «The user has sent too many requests in a given amount of time», что означает превышение ограничений по запросам к сайту. Соответственно, именно так происходит предотвращение DDoS-атак, которые и являются основной причиной появления рассматриваемой проблемы. Помимо самого кода, вы увидите и несколько других параметров:
Общее количество запросов.
Запросы с конкретного IP-адреса в секунду.
Количество одновременных запросов.
Общее количество запросов с одного IP-адреса.
Если же сама ошибка появляется при использовании поисковых систем или сторонних онлайн-сервисов, которые запрашивают доступ к сайту, вполне возможно, что их блокировка осуществляется со стороны хостинга в связи с тем, что количество запросов превышает ограничение. Для ее решения вам потребуется обратиться напрямую в техническую поддержку с просьбой разрешить подобные запросы.
Некорректная работа плагинов WordPress
Вторая распространенная причина, которая может быть связана с регулярным появлением неполадки 429, – некорректное функционирование плагинов под управлением CMS WordPress. Для решения этой проблемы потребуется выполнить несколько несложных действий.
Для начала по очереди отключайте каждый установленный скрипт через меню управления этими компонентами. Параллельно проверяйте, появляется ли ошибка. Да, на выполнение этой задачи может уйти много времени, однако это самый эффективный метод выявления плагина, который является триггером. Отметим, что сразу несколько компонентов могут вызывать проблему, поэтому постарайтесь проверить их все.
Что касается использования плагинов, то тут всегда лучше подключать только проверенные и качественные решения. Со списком таких плагинов предлагаю ознакомиться в материале по следующей ссылке.
Если после проверки неполадка все еще не исчезла, переключитесь на стандартную тему WordPress, которая называется Twenty Seventeen. Это действие поможет понять, связана ли ошибка сервера 429 со скриптами, которые входят в пользовательский шаблон оформления сайта. В том случае, когда трудность действительно была связана с темой, придется переделать ее вручную или же подыскать новый вариант для своего веб-ресурса.
Действия со стороны обычного пользователя
Обычный пользователь, который сталкивается с неполадкой 429 при попытке просмотреть конкретный сайт, не сможет ничего предпринять самостоятельно, чтобы решить ее. Однако, если есть возможность, стоит обратиться напрямую к владельцу интернет-ресурса или администраторам, сообщив им о появившейся ошибке. Так вы дадите понять, что сайт работает не так, как это нужно, и ускорите процесс решения трудностей.
А еще тут будет парочка забавных (и не очень) пикч и анимаций на тему описанных ошибок. Хоть какое-то развлечение.
Ошибки со стороны клиента (4xx)
Для начала перечислим коды ошибок на стороне клиента. Вина за их появление ложится на плечи обоих участников соединения.
400 Bad Request
401 Unauthorized
402 Payment Required
Эта ошибка сообщает клиенту о том, что для успешного выполнения запроса ему необходимо оплатить доступ к серверу. Изначально код 402 должен был стать неким стандартом для цифровой валюты и оплаты контента в сети. Но не срослось. До сих пор нет единого решения по поводу того, как должны выглядеть платежи в сети. Также нет и единого решения по поводу того, как стоит использовать 402.
Все еще считается, что код существует с расчетом на будущее. Сейчас почти не используется и поддерживается не всеми браузерами.
403 Forbidden
Почти то же, что и 401. Сервер снова не разрешает к нему подключиться, хотя с запросом все в порядке. Просто нет доступа. Причем повторная авторизация с другими логином и паролем никак не помогут. Все вопросы к владельцам сервера (но не всегда). Инструкция по устранению ошибки.
Творчество на тему знаменитой киносаги
404 Not Found
Легендарная ошибка, ставшая популярным мемом. 404 оповещает клиента о том, что его запрос ведет в никуда. Код возникает, когда пользователь пытается попасть на страницу, которой не существует. Например, когда случайно ошибается при вводе ссылки и вводит ее с опечаткой. Или же пытается получить доступ к странице, которой на сайте уже нет.
В отличие от других кодов, страницу с 404 частенько кастомизируют, создавая для нее уникальный дизайн. Мало того, что это выглядит симпатичнее, так еще и полезнее для посетителей. Можно прямо на странице с ошибкой разъяснить, что произошло и как дальше действовать.
И таких вариаций тысячи. Каждый пытается добавить в оформление что-то свое.
405 Method Not Allowed
405 сообщает клиенту о том, что метод, используемый при запросе, не разрешен. В качестве примера можно привести попытку со стороны клиента ввести данные в форму с помощью GET, когда она работает только с POST. Ну и в таком же духе.
406 Not Acceptable
Ошибка 406 сообщает о том, что страница передает контент, который не может быть распознан клиентом. Возможно, проблема в методе сжатия или в формате страницы. Иногда сюда же приплетают неправильные настройки кодировки.
Этот код редко используют на практике, так как его появления можно избежать, предоставив пользователю информацию на сайте в том виде, который его браузер способен принять. Посетитель сайта по итогу получит не то, что ожидал, но хотя бы не ошибку.
407 Proxy Authentication Required
Этот код тоже похож на 401. Только на этот раз логин и пароль нужны не для основного сервера, а для прокси, который находится между клиентом и сервером. Обычно в теле ошибки содержится информация о том, как можно правильно пройти авторизацию и получить доступ к ресурсу.
408 Request Timeout
408 говорит нам о том, что сервер пожелал разорвать соединение с клиентом, потому что оно никак не используется. Происходит это в том случае, если сервер буквально устал ждать, пока наладится соединение с ним. Поэтому такую ошибку часто можно лицезреть после очень долгой и безуспешной загрузки какого-нибудь сайта.
409 Conflict
410 Gone
Своего рода аналог 404. Разница лишь в том, что 410 намекает на перманентность отсутствия страницы. Так что этот код стоит использовать, когда на 100% уверен, что страница ушла в небытие (ну или с текущего адреса) навсегда. В любом другом случае есть универсальный 404.
411 Length Required
411 оповещает пользователя о том, что сервер не желает принимать запрос со стороны клиента, потому что в нем не определен заголовок Content-Length. Да, это первый код в подборке, который смогут понять только люди, сведущие в настройке серверов. По-простому уложить сущность HTML-заголовков в этот материал не получится.
412 Precondition Failed
Еще один код, сообщающий о том, что сервер отклонил запрос пользователя и не разрешает доступ к выбранному ресурсу. Проблемы возникают при неправильной настройке работы методов, отличающихся от GET и HEAD.
413 Payload Too Large/Request Entity Too Large
Код 413 говорит нам, что запрос, который посылает клиент на сервер, слишком большой. Поэтому сервер отказывается его обрабатывать и разрывает соединение. Обычно это происходит при попытке загрузить на ресурс какой-то файл, превышающий ограничение, выставленное в настройках сервера. Соответственно, решается проблема изменением настроек сервера.
414 URI Too Long
Чем-то этот код похож на предыдущий. Здесь тоже идет речь о превышение лимита. Только теперь это касается не запроса со стороны клиента, а длины URI. То есть ссылки. Выходит, что адрес, используемый клиентом, больше, чем тот, что может обработать сервер. Как-то так.
Такая ошибка иногда выскакивает при попытке взломать ресурс. Сайт так реагирует на слишком частые попытки воспользоваться потенциальными дырами в безопасности.
415 Unsupported Media Type
Ошибка 415 возникает, когда клиент пытается загрузить на сервер данные в неподходящем формате. В таком случае сервер просто отказывается принимать посылаемые файлы и разрывает соединение. Как и в случае с 413.
416 Range Not Satisfiable
Подобный ответ можно ожидать, если клиент запрашивает у сервера определенные данные, но эти данные на сервере не соответствуют запросу. То есть, грубо говоря, вы просите у сервера какой-то набор данных с заранее заданным размером, а в итоге оказывается, что размер этих данных меньше, чем объем, указанный в запросе. Серверу ничего не остается, кроме как послать вас, ведь он не обучен поведению в таких ситуациях.
417 Expectation Failed
Такая ошибка высвечивается, когда ожидания сервера не совпадают с данными в запросе клиента. Сведения об ожиданиях прописываются в заголовке Expect заранее. Так что можно ознакомиться с ними, чтобы выяснить, как решить названную проблему.
418 I’m a teapot
Код 418 можно увидеть, если сервер откажется варить кофе, потому что он чайник. Это первоапрельская шутка. Естественно, 418 не используется нигде всерьез и просто существует как дань памяти программистам-юмористам, придумавшим это в 1998 году.
У Google получился такой симпатичный чайник
421 Misdirected Request
Появляется когда запрос клиента переправляется на сервер, который не может дать на него адекватный ответ. Например, если запрос был отправлен на ресурс, который вообще не настроен обрабатывать запросы извне.
422 Unprocessable Entity
423 Locked
Обычно на этот код напарываются, когда запрашиваемый ресурс оказывается под защитой. Используемые клиентом методы блокируются на уровне сервера. Это делается, чтобы обезопасить данные, хранящиеся на защищенной странице. Без логина и пароля выудить информацию с такого сервера не получится.
424 Failed Dependency
424 сообщает о том, что для выполнения запроса со стороны клиента успешно должна завершиться еще одна или несколько параллельных операций. Если какая-то из них «провалится», то «помрет» все соединение сразу, и обработать запрос до конца не получится. Аналогичное происходит, если некорректно был обработан один из предыдущих запросов.
425 Too Early
Появляется в ответ на запрос, который может быть моментально запущен заново. Сервер не рискует и не берется за его обработку, чтобы не подставиться под так называемую «атаку повторного воспроизведения».
426 Upgrade Required
Тут нам прямо сообщают, что сервер не желает с нами общаться, пока мы не перейдем на более современный протокол. Наткнуться на такую ошибку очень тяжело, но в случае появления, скорее всего, будет достаточно установить браузер посвежее.
428 Precondition Required
428 выскакивает, если пользователь отправляет запрос на сервер, но получает некорректные или неактуальные данные. Так ресурс оповещает о необходимости внести в запрос информацию о предварительных условиях обработки данных. Только так он сможет гарантировать получение клиентом нужной информации.
429 Too Many Requests
Здесь все просто. Ошибка появляется, когда клиент отправляет на сервер слишком много запросов в короткий промежуток времени. Очень похоже на поведение взломщиков. По этой причине запрос моментально блокируется.
431 Request Header Fields Too Large
Из названия понятно, что ошибка с кодом 431 появляется из-за того, что в запросе клиента используются слишком длинные заголовки (неважно, один или несколько из них). Исправляется это с помощью сокращения заголовков и повторной отправки запроса. В теле ошибки обычно отображается краткая информация о том, как пользователь может решить эту проблему самостоятельно.
444 No Response
Этот код вам вряд ли удастся увидеть. Он отображается в лог-файлах, чтобы подтвердить, что сервер никак не отреагировал на запрос пользователя и прервал соединение.
449 Retry With
Код используется в расширениях компании Microsoft. Он сигнализирует о том, что запрос от клиента не может быть принят сервером. Причиной становятся неверно указанные параметры. Сама 449 ошибка говорит о необходимости скорректировать запрос и повторить его снова, подготовив к работе с сервером.
450 Blocked by Windows Parental Controls
450 код увидят дети, попавшие под действие системы «Родительский контроль» компании Microsoft. По сути, ошибка говорит о том, что с компьютера попытались зайти на заблокированный ресурс. Избежать этой ошибки можно изменением параметров родительского контроля.
451 Unavailable For Legal Reasons
Этот код сообщает клиенту, что он не может попасть на запрашиваемый ресурс из юридических соображений. Скорее всего, доступ был заблокирован из-за каких-нибудь государственных санкций, нового законодательства или цензуры со стороны властей. В общем, все вопросы к государству и провайдеру связи.
429 слишком много запросов в Google Chrome:
429. Это ошибка.
Сожалеем, но вы недавно отправили нам слишком много запросов. Пожалуйста, повторите попытку позже. Это все, что мы знаем.
Если вы видите эту ошибку, это означает, что вы отправили слишком много запросов за заданный промежуток времени. В течение этого периода сервер не будет выполнять какие-либо запросы или вызовы, которые создаются сразу. Ваша учетная запись будет временно заблокирована устройством с целью уменьшения большого количества запросов к серверу, отправляемых за короткое время.
Причина ошибки 429
Ошибка 429 - ужасный опыт, но это не значит, что ограничение скорости - это плохо. Напротив, этот предел велик; он может защитить большинство используемых API от преднамеренного и случайного злоупотребления услугами. Вы должны знать, что ограничения скорости широко используемых API, включая Twitter и Instagram, строже, чем другие.
Эта часть покажет вам, как устранить ошибку 429 в браузере Google Chrome, очистив кеши и историю браузера.
- Дважды щелкните значок приложения на рабочем столе, чтобы открыть Google Chrome. (Вы также можете открыть его, дважды щелкнув исполняемый файл в папке установки или выбрав Google Chrome в меню «Пуск».)
- Найдите вариант с тремя точками в правом верхнем углу открытия Chrome; он используется для настройки и управления Google Chrome.
- выберите Настройки из раскрывающегося меню (это третий вариант снизу).
- Прокрутите вниз, чтобы найти Конфиденциальность и безопасность (Вы можете перейти туда напрямую, нажав Конфиденциальность и безопасность на левой боковой панели.)
- Щелкните по первому варианту: Очистить данные просмотра (очистить историю, файлы cookie, кеш и т. Д.) .
- Убедитесь, что Базовый вкладка выбрана вверху.
- Проверьте Файлы cookie и другие данные сайта и Кешированные изображения и файлы .
- Нажми на Очистить данные кнопку в правом нижнем углу и дождитесь завершения действия.
Если этот метод не помог, вы можете попробовать следующие шаги: прокрутите вниз в окне настроек -> нажмите на Продвинутый кнопку, чтобы увидеть раскрывающиеся параметры -> перейдите к Сброс и очистка раздел -> попробовать Восстановить исходные настройки по умолчанию или же Очистить компьютер характерная черта.
Как восстановить удаленную историю в Google Chrome - полное руководство
Есть 8 эффективных методов, рассказывающих вам, как самостоятельно восстановить удаленную историю в Google Chrome.
Ниже приведены некоторые распространенные типы регулирования, которые могут возникнуть в приложении логики.
Регулирование приложений логики
Служба Azure Logic Apps имеет собственные ограничения пропускной способности. Если приложение логики превышает эти ограничения, то регулируется ресурс этого приложения, а не только конкретного экземпляра или выполнения.
Чтобы найти события регулирования на этом уровне, проверьте панель Метрики приложения логики на портале Azure.
Откройте приложение логики в конструкторе приложений логики на портале Azure.
В меню слева в разделе Мониторинг выберите Метрики.
В разделе Заголовок диаграммывыберите Добавить метрику, чтобы добавить к существующей метрике еще одну.
В первой строке метрики в списке Метрики выберите События, регулируемые действием. Во второй строке метрики в списке Метрики выберите События, регулируемые триггером.
Для управления регулированием на этом уровне доступны следующие варианты.
Ограничьте количество экземпляров приложения логики, которые могут выполняться одновременно.
По умолчанию, если условие триггера приложения логики будет выполняться несколько раз одновременно, то несколько экземпляров триггеров для приложения логики выполняются параллельно, или одновременно. Это означает, что каждый экземпляр триггера срабатывает до завершения выполнения предыдущего экземпляра рабочего процесса.
Хотя количество экземпляров триггеров, которые могут выполняться одновременно, не ограничено, можно ограничить это число, включив параметр параллелизма триггера и при необходимости выбрав ограничение, отличное от значения по умолчанию.
Включение высокой пропускной способности.
Приложение логики имеет ограничение по умолчанию для количества действий, которые могут выполняться в течение 5-минутного интервала. Чтобы увеличить это ограничение до максимального количества действий, включите режим высокой пропускной способности в приложении логики.
Отключите режим депакетирования массива (параметр "Разделить на") в триггерах.
Если триггер возвращает массив для обработки оставшихся действий рабочего процесса, то параметр Разделить на для этого триггера разделяет элементы массива и запускает экземпляр рабочего процесса для каждого элемента массива, фактически выполняя несколько одновременных запусков до ограничения Разделить на. Для управления регулированием отключите поведение Разделить на, пусть приложение логики обрабатывает весь массив одним вызовом, а не по одному элементу за вызов.
Разбивайте действия на меньшие приложения логики.
Как говорилось выше, приложение логики ограничено количеством действий по умолчанию, которые могут выполняться в течение 5-минутного периода. Хотя это ограничение можно увеличить, включив режим высокой пропускной способности, есть также другой вариант — разбить действия приложения логики на более мелкие приложения логики, чтобы количество действий, выполняемых в каждом приложении, было в пределах ограничения. Таким образом вы сократите нагрузку на один ресурс приложения логики, распределив нагрузку между несколькими приложениями логики. Такое решение лучше подойдет для действий, которые обрабатывают большие наборы данных или запускаются для параллельного выполнения множества действий, итераций или действия в каждой итерации цикла, число которых превышает предел выполнения действия.
Например, такое приложение логики выполняет всю работу по получению таблиц из базы данных SQL Server и получает строки из каждой таблицы. Цикл for each параллельно проходит по каждой из таблиц, чтобы действие Получить строки возвращало строки для каждой таблицы. В зависимости от объема данных в таблицах такие действия могут превысить ограничение на количество выполнений.
После рефакторинга приложение логики разделится на родительское и дочернее приложения логики. Родительское приложение получает таблицы из SQL Server, а затем вызывает дочернее приложение логики для каждой таблицы, чтобы получить строки:
Ниже показано дочернее приложение логики, которое вызывается родительским приложением логики для получения строк для каждой из таблиц:
Регулирование соединителя
Каждый соединитель имеет собственные ограничения регулирования, которые можно найти на странице технического справочника по соединителю. Например, соединитель служебной шины Azure имеет ограничение регулирования до 6000 вызовов в минуту, в то время как соединитель SQL Server имеет ограничения регулирования, которые зависят от типа операции.
Чтобы узнать, поддерживает ли триггер или действие политику повтора, проверьте параметры триггера или действия. Чтобы просмотреть количество попыток триггера или действия, перейдите в журнал выполнения приложения логики, выберите запуск, который необходимо просмотреть, и разверните этот триггер или действие, чтобы просмотреть сведения о входных и выходных данных, а также обо всех повторных попытках. Например:
Хотя журнал повторных попыток содержит сведения об ошибках, возможно, это просто проблемы регулирования соединителя и регулирования назначения. В этом случае может потребоваться просмотр данных ответа или выполнение некоторых вычислений интервала регулирования, чтобы выяснить источник.
Для приложений логики в глобальной многоклиентской службе Azure Logic Apps выполняется регулирование на уровне соединения. Например, для приложений логики, выполняемых в среде службы интеграции (ISE), регулирование по-прежнему происходит для соединений, не связанных с ISE, так как они выполняются в глобальной многоклиентской службе Logic Apps. Но подключения ISE, созданные с помощью соединителей ISE, не регулируются, так как они выполняются в интегрированной среде сценариев.
Для управления регулированием на этом уровне доступны следующие варианты.
Настройте несколько подключений для одного действия, чтобы приложение логики секционировало данные для обработки.
Для этого варианта рассмотрите возможность распределения рабочей нагрузки путем разделения запросов действия на несколько соединений к одному назначению с использованием одних и тех же учетных данных.
Предположим, приложение логики получает таблицы из базы данных SQL Server, а затем получает строки из каждой таблицы. В зависимости от количества строк, которые необходимо обработать, можно использовать несколько соединений и несколько циклов for each, чтобы разделить общее количество строк на меньшие наборы для обработки. В этом сценарии используется два цикла for each для разделения общего количества строк пополам. Первый цикл for each использует выражение, которое получает первую половину. В другом цикле for each используется второе выражение, которое получает вторую половину. Например:
Выражение 1. Функция take() возвращает первую часть коллекции. Дополнительные сведения см. по функции take() .
@take(collection-or-array-name, div(length(collection-or-array-name), 2))
Выражение 2. Функция skip() удаляет начало коллекции и возвращает все остальные элементы. Дополнительные сведения см. по функции skip() .
@skip(collection-or-array-name, div(length(collection-or-array-name), 2))
Ниже приведен визуальный пример, демонстрирующий использование этих выражений.
Для каждого действия настраивайте собственное соединение.
Для этого рассмотрите возможность распределения рабочей нагрузки, распределив запросы от каждого из действий по собственному соединению, даже если действия подключаются к одной службе или системе и используют одни и те же учетные данные.
Предположим, приложение логики получает таблицы из базы данных SQL Server, а затем получает строки из каждой из таблиц. Можно разделить соединения так, чтобы для получения таблиц использовалось одно соединение, а для получения строк использовалось другое.
Измените параллелизм в цикле "for each".
По умолчанию итерации цикла "for each" запускаются одновременно до достижения предела по умолчанию. Если у вас есть соединитель, который регулируется внутри цикла "for each", то можно уменьшить количество итераций цикла, выполняемых параллельно. Дополнительные сведения см. в следующих статьях:
Служба или система назначения
Хотя соединитель имеет собственные ограничения регулирования, целевая служба или система, вызванная соединителем, может также иметь ограничения регулирования. Например, некоторые API в Microsoft Exchange Server имеют более широкие ограничения регулирования, чем соединитель Office 365 Outlook.
По умолчанию экземпляры приложения логики и любые циклы или ветви внутри этих экземпляров выполняются параллельно. Это означает, что несколько экземпляров могут одновременно вызывать одну и ту же конечную точку. Каждый из экземпляров не знает о существовании другого, поэтому попытки повторения неуспешных действий могут привести к состоянию гонки, когда несколько вызовов пытаются выполниться в одно и то же время, однако для их успешного выполнения эти вызовы должны поступить в целевую службу или систему до начала регулирования.
Предположим, имеется массив, содержащий 100 элементов. Для просмотра массива используется цикл "for each", и включение контроля параллелизмом цикла позволит ограничить количество параллельных итераций до 20 или до текущего ограничения по умолчанию. Внутри этого цикла действие вставляет элемент из массива в базу данных SQL Server, которая разрешает всего 15 вызовов в секунду. В этом сценарии возникает проблема регулирования, так как скапливается очередь невыполненных попыток повтора и поэтому выполнение не происходит.
В этой таблице описана временная шкала событий, происходящих в цикле, когда интервал повтора действия равен 1 секунде:
На момент времени | Количество выполненных действий | Количество невыполненных действий | Количество повторных попыток |
---|---|---|---|
T + 0 секунд | 20 вставок | 5 ошибок, из-за ограничения SQL | 5 повторов |
T + 0,5 секунд | 15 вставок, из-за предыдущих 5 попыток в ожидании | Все 15 завершатся ошибкой из-за того, что предыдущее ограничение SQL действует еще 0,5 секунды | 20 повторов (5 предыдущих + 15 новых) |
T + 1 секунда | 20 вставок | 5 ошибок плюс предыдущих 20 повторов, из-за ограничения SQL | 25 повторов (20 предыдущих + 5 новых) |
Для управления регулированием на этом уровне доступны следующие варианты.
Создайте приложения логики таким образом, чтобы каждое из них обрабатывало единственную операцию.
Продолжая пример сценария SQL Server, приведенный в этом разделе, можно создать приложение логики, которое помещает элементы массива в очередь, например очередь служебной шины Azure. А затем создать другое приложение логики, которое будет выполнять только операцию вставки для каждого элемента в этой очереди. Таким образом, только один экземпляр приложения логики будет выполняться в один момент времени, и либо будет завершена операция вставки и переход к следующему элементу в очереди, либо экземпляр получит ошибку 429 и не будет пытаться выполнять бесперспективные повторы.
Создайте родительское приложение логики, которое вызывает дочернее или вложенное приложение логики для каждого действия. Если родительскому приложению необходим вызов различных дочерних приложений исходя из результата, то можно использовать действие условия или переключателя, определяющее, какое дочернее приложение будет вызываться. Это позволит сократить количество вызовов или операций.
Предположим, есть два приложения логики, каждое с триггером опроса, проверяющим учетную запись электронной почты раз в минуту на конкретную тему, например "Успешно" или "Ошибка". Такая установка производит 120 обращений в час. Если вместо этого создать одно родительское приложение логики, которое тоже будет опрашивать раз в минуту, но вызывать дочернее приложение логики в зависимости от темы "Успешно" или "Ошибка", то в этом случае количество обращений удастся сократить вдвое (до 60 в час).
Настройка пакетной обработки.
Используйте версии веб-перехватчика для триггеров и действий, а не опрашивающие версии.
Таким образом, если целевая служба или система поддерживает веб-перехватчики или имеет соединитель с версией веб-перехватчика, то этот вариант является более предпочтительным, чем использование опрашивающей версии. Чтобы определить триггеры и действия веб-перехватчика, убедитесь, что они имеют тип ApiConnectionWebhook или не требуют указания периодичности. Дополнительные сведения см. в статьях Триггер APIConnectionWebhook и Действие APIConnectionWebhook.
Читайте также: