Визначте частоту блокування проксі для API-трафіку
Почніть з однієї точної частки: заблоковані API-запити, поділені на загальну кількість API-запитів, надісланих через проксі, для фіксованого маршруту й часового вікна. Звучить просто, але знаменник важливіший за чисельник. Якщо рахувати лише невдалі запити, показник бреше. Саме тому важливо правильно трактувати частота блокування проксі API, а не покладатися на поверхневі лічильники.
Для API-трафіку чисельник має включати жорсткі блокування, м’які відмови та неоднозначні збої, коли цільовий API явно не прийняв запит. Жорсткі блокування — найпростіші: 403 із повідомленням про блокування, 429, пов’язаний із політикою, або розрив з’єднання одразу після відправлення. М’які відмови складніші. Відповідь 200 з порожнім тілом, виклик на підтвердження токена або відповідь, що повторює шаблон «спробуйте ще раз», теж можуть означати блокування проксі, якщо API так і не повертає придатні дані.
Неоднозначні збої потребують правила ще до початку відстеження. Якщо тайм-аут стається через 12 секунд на одному маршруті, а той самий маршрут зазвичай відповідає за 300 мілісекунд, зараховуйте це як кандидата на блокування лише тоді, коли можете пов’язати збій саме з проксі-шляхом. Інакше ви змішуєте проблеми проксі з проблемами сервера. Таке змішування з’їсть цілий тиждень.
Один охайний спосіб записати формулу такий: частота блокування = заблоковані запити / усі спроби запиту, де «заблоковані» включає прямі відмови, м’які відмови та класифіковану неоднозначність. Не віднімайте повторні спроби, якщо і чисельник, і знаменник не дотримуються однакового правила щодо ретраїв. Запит, який двічі провалився, а потім успішно пройшов, усе одно має бути десь видно в журналі. Якщо його приховати, проксі виглядатиме здоровішим, ніж є насправді. Коли потрібно зрозуміти, як визначити блокування проксі для API, починайте саме з цієї формули.
Відокремте сигнали блокування від звичайних помилок API
Звичайні помилки API мають іншу форму, ніж блокування проксі. 400 через неправильний payload означає, що API побачив ваш запит і відхилив вміст. Блокування проксі часто стається ще до того, як застосункова логіка взагалі вмикається. Це важливо, коли ви аналізуєте блокування API запитів через проксі.
Слідкуйте за шаблонами кодів статусу, які повторюються в багатьох ендпойнтах з однакового проксі-пулу. Раптова група відповідей 403, 429, 451 або 5xx сама по собі ще не є доказом, бо деякі API використовують ці коди для звичайного перевантаження. Сильніший сигнал — сталість: той самий проксі блокується на ендпойнтах auth, search і write, тоді як інший проксі проходить ті самі виклики в ту саму хвилину.
Транспортні шаблони теж мають значення. Скидання TLS після ClientHello, розрив з’єднання ще до жодних заголовків відповіді або відмова proxy-auth одразу після пред’явлення облікових даних ближчі до блокування, ніж до помилки застосунку. Те саме стосується відповіді з правильним кодом статусу, але без придатного тіла й без кешованих заголовків. Це саме той вид збою, який виглядає ввічливо і все одно псує запуск.
Не плутайте rate limits із блокуванням проксі, якщо тільки шаблон відповіді не доводить, що виділяють саме цей проксі. Один клієнт, який отримує 429 на публічному API, — це не те саме, що один проксі-пул, який отримує 429, тоді як інший пул і далі має чистий доступ. Той самий код, інше значення.
Відстежуйте частоту блокування за класами маршрутів API
Розбийте API на класи маршрутів ще до того, як почнете щось рахувати. Використовуйте щонайменше чотири групи: auth, search, write та bulk operations. Якщо в API є вебхуки, завантаження файлів або ендпойнти експорту, виділіть і їх в окремі кошики. Один зведений показник приховує шкоду.
Маршрути auth часто обробляються інакше, ніж маршрути search. Search може витримувати більший обсяг, тоді як auth може запускати антизловживальні перевірки вже на першому сплеску. Маршрути write можуть падати з причин, схожих на блокування, але насправді це конфлікти стану. Bulk-завдання приносять свої проблеми, бо довгоживучі запити притягують правила тайм-ауту. Один кошик на одну функцію — і частоту блокування легше пояснити інженеру, який реально має це виправляти.
Відстежуйте кожен клас маршрутів із власним знаменником. Наприклад, якщо клас search мав 8 000 запитів і 640 кандидатів на блокування, частота блокування для цього класу — 8 відсотків. Те саме зробіть для auth, write і bulk. Потім порівняйте класи поруч. Якщо bulk має 22 відсотки, а search — 3 відсотки, у вас не одна проблема. У вас дві.
Класи маршрутів також показують дрейф політики. Постачальник може спочатку почати блокувати write, а через кілька днів поширити це й на search. Такий патерн легко пропустити, якщо дивитися лише на загальний обсяг. Коли маршрути розділені, це вже не так непомітно.
Розкладіть частоту блокування за відбитком запиту
Використовуйте відбиток запиту як набір перемикачів. Заголовки, user agent, спосіб авторизації, форма payload і частота запитів можуть окремо змінювати частоту блокування для того самого API. Тримайте API незмінним, а по черзі змінюйте один перемикач за раз. У цьому й сенс.
Найпростіше почати із заголовків. Відсутній заголовок Accept, дивне значення Accept-Language або порядок заголовків, який ніколи не збігається зі звичним шаблоном клієнта, можуть підняти частоту блокування. User agent теж має значення, особливо якщо проксі-трафік видає себе за браузер, але надсилає лише машинні заголовки. Деякі API ігнорують таку невідповідність. Інші — ні. Погані зазвичай не соромляться цього.
Спосіб авторизації — ще один корисний зріз. Порівнюйте API keys, bearer tokens, session cookies та підписані запити окремо. Якщо один спосіб блокується на 14 відсотках, а інший тримається біля 2 відсотків, не лише проксі під підозрою. Не менш важлива і форма payload. Компактне JSON-тіло може пройти, тоді як розріджений об’єкт із незвичною вкладеністю отримає прапорець. Частота запитів теж може схилити результат; десять викликів за 3 секунди — це не те саме, що десять викликів за 3 хвилини.
Для команд, які вже відстежують повторне використання ідентичності, посібник із найкращих практик автентифікації проксі може допомогти відокремити проблеми з обліковими даними від поведінки блокування. Таке розрізнення економить час. Багато часу.
Порівнюйте частоту блокування між проксі-пулами
Порівняння проксі-пулів — це місце, де цифри стають справді корисними. Сегментуйте за дата-центрами, residential, ISP, ASN, географією або пулом постачальника, щоб побачити, які класи проксі блокуються частіше. Не зводьте всі пули в одну середню. Середнє може прикрашати найгірший пул і карати найкращий.
Пули дата-центрів часто показують чистішу, але жорсткішу частоту блокування на чутливих API-маршрутах. Residential-пули можуть проходити частіше, але бути повільнішими й дорожчими. ISP-пули інколи опиняються посередині, хоча це залежить від цільового API та країни. Розбивка на рівні ASN може показати, що один провайдер у чорному списку, а сусідній — ні. Географія має значення, якщо API чутливий до правил країни або мовних налаштувань.
Сегментація за пулом постачальника важлива з практичних причин, а не для краси. Якщо в одного постачальника частота блокування 18 відсотків, а в іншого — 4 відсотки на тому самому класі маршрутів, у вас є рішення про закупівлю, а не загадка. Один пул також може провалюватися лише на POST-запитах, що натякає на поведінкову фільтрацію, а не на просту репутацію IP.
Якщо потрібне нагадування про типи пулів, сторінка глосарій VPN і проксі стане в пригоді, хоча реальна робота все одно та сама: рахувати, розділяти, порівнювати й повторювати.
Вимірюйте частоту блокування в часових вікнах
Часові вікна змінюють історію. Годинні зрізи ловлять сплески, добові — дрейф, а показники на рівні кампанії показують, чи короткочасне завдання стало причиною проблеми. Якщо проксі-пул тримається на 2 відсотках увесь тиждень, а о 14:00 у вівторок стрибає до 31 відсотка, у вас є підказка щодо часу, а не загальний збій.
Погодинний моніторинг добре працює для блокувань, спричинених сплесками. Деякі API терплять легкий трафік протягом дня, а потім жорстко затискають після короткого burst-періоду, який виглядає підозріло. Добові зрізи допомагають, коли політики змінюються поступово. Показники на рівні кампанії важливі, коли той самий проксі-пул використовується для довгого scraping-запуску, міграції або синхронізації даних. Обране вікно змінює висновок.
Використовуйте щонайменше три вікна одночасно: 1 година, 24 години та весь job або кампанія. Така трійка ловить раптові стрибки й повільне згасання. 1-годинний сплеск може зникнути в 24-годинному середньому. А 24-годинне середнє може приховати повільний витік, який зіпсує 7-денну кампанію.
Командам, які питають, які метрики показують частоту блокування проксі для API-запитів, зазвичай спершу потрібен саме такий поділ за часом. Без нього ви не зможете сказати, чи проксі заблокували через зміну політики опівдні, чи через накопичену підозру після 10 000 запитів.
Відрізняйте жорсткі блокування від відповідей, схожих на challenge
Жорсткі блокування зупиняють запит одразу. Відповіді, схожі на challenge, затягують збій і просять підтвердження, більше заголовків, оновлення токена або ще одну спробу. Обидва варіанти важливі, але їх не слід рахувати однаково, якщо потрібна придатна для роботи частота блокування.
Жорстке блокування зазвичай є прямою відмовою: 403 із повідомленням про відмову, скидання з’єднання при першому контакті або відповідь, яка взагалі не доходить до тіла застосунку. Відповідь, схожа на challenge, може виглядати м’якше: 401 із підказкою щодо токена, 429 із вікном повтору або повідомлення, що клієнт має зачекати перед новою спробою. Це може бути тимчасовий бар’єр, а не постійне блокування.
Вимірюйте їх окремо. Якщо жорсткі блокування становлять 9 відсотків, а відповіді, схожі на challenge, — 15 відсотків, у вас дві операційні проблеми. Одна потребує заміни проксі або зміни маршруту. Інша може вимагати корекції темпу, виправлення заголовків або іншого порядку запитів. Не звалюйте їх докупи лише тому, що обидва варіанти дратують.
Відповіді, схожі на challenge, часто з’являються після повторюваного ритму. П’ять викликів можуть пройти, а шостий отримає крок підтвердження. Це не випадковість. Це сигнал, і зазвичай він приходить раніше, ніж жорстке блокування.
Перетворіть висновки про частоту блокування на операційний чекліст
Тримайте набір метрик невеликим. Відстежуйте загальну кількість запитів, заблоковані запити, жорсткі блокування, відповіді, схожі на challenge, та частоту блокування за класом маршруту, проксі-пулом і 1-годинним вікном. Шести метрик достатньо для старту. Більше не завжди краще. Більше часто означає шум.
Подальші деталізації мають відповісти на три запитання саме в такому порядку: чи виходить із ладу проксі-пул, чи шаблон запиту провокує блокування, чи цільовий API змінив політику? Запитуйте саме так, бо від відповіді залежить виправлення. Якщо пул ламається на всіх класах маршрутів і всіх відбитках, замініть або перенаправте проксі. Якщо не проходить лише один відбиток, порівняйте заголовки, спосіб авторизації й частоту. Якщо збій одночасно з’являється на всіх пулах, вважайте, що API змінив правила, доки не доведено інше.
Практичний чекліст може виглядати так: по-перше, сповіщайте, коли будь-який пул перевищує свій нормальний рівень блокування на 3 пункти. По-друге, перевіряйте, чи сплеск обмежений одним класом маршрутів. По-третє, порівнюйте жорсткі блокування з відповідями, схожими на challenge. По-четверте, підтвердьте, чи той самий шаблон з’являється в іншій географії або ASN. Цих чотирьох кроків достатньо, щоб поганий день із проксі не став поганим тижнем.
Коли командам також треба змінювати форму трафіку, посібник із ротації проксі для веб-скрапінгу та SOCKS5-проксі проти HTTP-проксі стануть корисними орієнтирами для вибору правильного транспорту й темпу. Але саме моніторинг вирішує, чи спрацювало виправлення. Ця частина нікуди не зникає.
Ще одна звичка допомагає: ведіть простий рядок журналу для кожного заблокованого запиту з маршрутом, пулом, відбитком, часовим вікном і класом відповіді. Шість полів. Не більше. Коли наступна хвиля блокувань почнеться о 09:00, ця невелика таблиця відповість на більше запитань, ніж дашборд, повний зелених графіків.