Ограничение на количество новых соединений (2019)
Что происходит
24 сентября «Дадата» начнёт использовать новую систему защиты от сетевых атак. В числе прочих мер, она запрещает создавать более 60 новых сетевых соединений в минуту.
Что это вообще значит
Когда ваша программа обращается к «Дадате», она создаёт сетевое соединение. Обычно программы не создают всё новые и новые соединения, а используют ограниченное количество уже созданных. У этого подхода есть разные названия — HTTP persistent connection, keepalive, «пул соединений» — но суть одна и та же: программа переиспользует сетевые соединения, а не создаёт новые на каждый запрос.
Создание большого количества сетевых соединений — типичное поведение злоумышленников, которые атакуют облачные сервисы. Поэтому система защиты «Дадаты» будет следить, чтобы количество новых соединений с каждого IP-адреса не превышало 60 в минуту.
Новое ограничение никак не связано с количеством запросов в секунду. Представим две ситуации:
- Программа выполняет 20 запросов в секунду, используя всего одно соединение.
- Программа выполняет 100 запросов в минуту, создавая новое соединение на каждый запрос.
У первой программы не возникнет проблем с новым ограничением, несмотря на большое количество запросов. А у второй — возникнет.
Как это отразится на вас
Если ваши пользователи работают через браузер, и вы не проксируете запросы к «Дадате» через свой сервер — никак не отразится, дальше можно не читать.
Если работаете через API, и ваша программа переиспользует сетевые соединения — изменение тоже пройдёт незамеченным. Повторное использование сетевых соединений считается хорошим тоном среди разработчиков. Большинство платформ (Java, .NET, Python) используют его по умолчанию. С большой вероятностью, ваша интеграция работает так же, поэтому ничего делать не придётся.
Но если ваша программа создаёт отдельное сетевое соединение на каждый запрос (чаще всего этим «грешат» программы на PHP), и вы делаете более 60 запросов в минуту — интеграция перестанет нормально работать.
Как понять, нужно ли вам что-то делать
Временно перенаправьте работающую интеграцию на сервер «Дадаты», который уже использует новую систему защиты. Для этого на сервере, с которого идут запросы к «Дадате», добавьте в hosts-файл такие записи:
186.2.163.83 dadata.ru 186.2.163.83 suggestions.dadata.ru
После этого перезапустите программу, которая выполняет запросы к «Дадате», и посмотрите, продолжит ли она нормально работать. Дайте ей поработать несколько минут, чтобы точно убедиться.
Не забудьте после проверки удалить записи в hosts-файле.
Как изменить программу, чтобы она не создавала новые соединения
Если используете PHP — посмотрите наши примеры для подсказок и стандартизации. В них написано, как повторно использовать сетевые соединения.
Если работаете с другим языком программирования — почитайте документацию библиотеки, которую используете для работы с HTTP. Там точно это есть.
В любом случае, придётся привлекать разработчика, чтобы менять код программы.
Что делать, если вы не готовы менять программу
Мы понимаем, что изменения, особенно в крупных компаниях — дело небыстрое. Поэтому пользователям платных тарифов готовы временно предоставить отдельный сервер, на котором ограничение будет отключено. Если:
- вы убедились, что интеграция не работает нормально с новой «Дадатой»,
- вы не готовы исправить программу до 24 сентября,
- у вас платный тариф,
— напишите нам, и мы предложим обходное решение.
Обходное решение будет работать ещё год, до 24 сентября 2020 года.
В любом случае, лучше как можно быстрее перейти на повторное использование сетевых соединений — это в целом более надёжный, быстрый и правильный способ работы.
Сервис поддержки клиентов работает на платформе UserEcho