Интервью В декабре прошлого года команда разработчиков Python временно контролирует индекс пакетов Python (PyPI). отключен конечная точка поиска на своем XML-RPC API, потому что его инфраструктура перегружена «недобросовестными клиентами».

В результате поиск пакетов Python с пип, например: pip search ascii или же pip3 search png, невозможно, потому что этот API внутреннего поиска недоступен.

В марте API был отключен навсегда, что лишило разработчиков одного из нескольких способов программного поиска пакетов в PyPI. Результат был разочарование среди разработчиков программного обеспечения Python, поскольку API XML-RPC все еще широко используется (другие конечные точки API все еще активны).

Текущие данные об использовании не были доступны сразу, хотя в мае 2019 года конечная точка поиска XML-RPC API была сказал получить 85,5 млн запросов за три месяца. И в течение недели в октябре 2020 года конечная точка поиска для API получила 33,2 млн запросов, или в среднем ~ 54 запроса в секунду.

Одно клиентское приложение, которое использует конечную точку поиска API — и само по себе не является проблемой — это вышеупомянутый инструмент управления пакетами. Запуск pip в командной строке для поиска популярной библиотеки, такой как requests — то есть: pip search requests — в настоящий момент возвращает ошибку:

xmlrpc.client.Fault: <Fault -32500: "RuntimeError: PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.">

Ee W. Durbin III, директор по инфраструктуре Python Software Foundation, рассказал Реестр в интервью в понедельник неясно, кто или что несет ответственность за перегрузку конечной точки поиска, и что сообщение об ошибке представляет собой попытку привлечь внимание всех, кто несет ответственность за перегрузку сетевого трафика.

Читайте также:
Новое превью Windows 10 Mobile добавляет удобные веб-функции, но убивает Wi-Fi Sense

Проблема возникала раньше, несколько раз.

«Один из наиболее заметных инцидентов произошел с очень большими кластерами компьютеров в определенном корпоративном подразделении, которое использовало библиотеку Puppet», — пояснил Дурбин. «Библиотека Puppet использовала XML-RPC для определения последней версии пакета. Таким образом, каждые 15 минут мы получали массовый приток запросов XML-RPC, которые перегружали бы серверные части и вызывали у нас проблемы с доступностью».

В этом случае специалисты Python смогли идентифицировать компанию по IP-адресам запросов, а затем связаться с фирмой-нарушителем, чтобы попросить исправить ее исходное программное обеспечение для управления, что со временем устранило проблему.

Но последний поток сетевого трафика более рассредоточен и не поддается простой атрибуции.

«В конце прошлого года мы снова выявили проблему доступности из-за того, что кажется запланированным повторяющимся заданием с очень большого и широкого набора IP-адресов, которые нам не так легко идентифицировать», — сказал Дурбин. «Учитывая, что мы не могли легко определить источник этих запросов или причину запросов, было принято решение заставить его возвращать сообщение об ошибке, которое дало людям возможность связаться с нами».

До сих пор никто не ответил, что взял на себя ответственность за чрезмерное количество вызовов API. И отключение конечной точки поиска не положило конец потоку входящих данных — PyPI продолжает видеть около 100 запросов в секунду все еще пытается добраться до закрытой конечной точки поиска.

Дурбин сказал, что API не требует аутентификации и не накладывает других ограничений на клиентов, что было задумано, чтобы люди могли выполнять поиск в PyPI. Но в результате меньше возможностей внутренней защиты от злоупотреблений. PyPI может блокироваться строкой пользовательского агента или IP-адресом, но и то, и другое можно легко изменить.

Читайте также:
Microsoft исправляет серьезную ошибку Word

Своего времени

API XML-RPC восходит к предыдущей итерации PyPI; более современная версия под названием Склад был запущен несколько лет назад для повышения устойчивости индекса упаковки.

«В то время XML RPC был вполне приемлемым решением», — сказал Дурбин. «Это обеспечило простоту использования и простоту реализации, которые в то время были удобны специалисту по сопровождению».

Проблема с API в том, что он использует операцию HTTP POST. PyPI в настоящее время пытается максимально кэшировать свои операции через свой уровень CDN. «Сами по себе POST сложно кэшировать на уровне CDN», — пояснил Дарбин, добавив, что анонимность запросов XML-RPC еще больше усложняет усилия по обеспечению качества обслуживания.

Причина, по которой ситуация для PyPI стала неприемлемой, по словам Дурбина, заключается в том, что «у нас нет ресурсов для ежедневного тушения пожаров в конечной точке XML RPC. Я единственный оплачиваемый персонал, поддерживающий PyPI. «

Все остальные сопровождающие PyPI — добровольцы.

Дурбин попросил сообщество Python проявить терпение, потому что у команды инфраструктуры ограниченные ресурсы, и предположил, что сотрудники крупных организаций, использующие язык, могут искать способы более эффективной поддержки сообщества.

В качестве примера они указали на Bloomberg, который спонсирует новую роль менеджера проекта упаковки через Python Foundation.

«Наша цель определенно будет заключаться в том, чтобы использовать эти недавно доступные ресурсы для разработки и, надеюсь, увидеть реализованный API следующего поколения для PyPI, который предоставляет нам некоторые новые возможности, в частности, в том, что касается возможности идентифицировать, кто использует сервис и в чем манера, — сказал Дурбин. ®

Читайте также:
В Windows 10 снова нашли непонятные вещи