LINUX.ORG.RU
ФорумAdmin

1 сервер и много IP адресов, Python

 , ,


0

1

Всем привет!

Разрабатываю сейчас сайт, который взаимодействет с другим API.

У API есть лимит на количество запросов в минуту с одного IP адреса.

При этом буду делать запросы с разными API ключами - проблема в том, что лимит на кол-во запросов с 1 IP в минуту. Хочу это решить путём запуска различных самописных процессоров на Python на разных IP.

Процессор (программа на Python) раз в сколько-то секунд делает запрос к API и обновляет информацию в базе.

Различные процессоры буду запускать в разных докер контейнерах.

Допустим, я на свой сервер закупил дополнительные IP адреса.

Достаточно ли будет просто настроить на уровне докер контейнера что-то вроде такого?

docker run -d –name iperf_srv –network mynet –ip 10.195.10.10 astotal/iperf3 -s

Или надо будет ещё делать дополнительные настройки на стороне линукса - или даже в Python коде что-то дополнительно настраивать?

Подскажите пожалуйста, кто в курсе - какой стандартный подход к решению моей проблемы?



Последнее исправление: DigitalBerd (всего исправлений: 2)

Стандартный подход: купить у поставщика услуги больший лимит на один IP. Скорей всего это будет даже дешевле, чем пачка IPv4 – они сейчас довольно дорогие и больше 4 шт. в руки вам могут просто не отгрузить без обоснования.

BOOBLIK ★★★
()
Ответ на: комментарий от BOOBLIK

пачка IPv4 – они сейчас довольно дорогие и больше 4 шт. в руки вам могут просто не отгрузить без обоснования.

Враньё. Главное чтоб оплата была, в сколько в руки никого не волнует. И не такие уж дорогие. По сравнению с остальными затратами на работу любого сервиса можно сказать бесплатные.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от BOOBLIK

Поставщик услуги в принципе не готов к диалогу никак - есть ограничение API и исключения не делают ни для кого… Так то мне проще было бы денег им дать умеренно - чем кучу времени тратить на это…

DigitalBerd
() автор топика
import requests


def session_for_src_addr(addr: str) -> requests.Session:
    """
    Create `Session` which will bind to the specified local address
    rather than auto-selecting it.
    """
    session = requests.Session()
    for prefix in ('http://', 'https://'):
        session.get_adapter(prefix).init_poolmanager(
            # those are default values from HTTPAdapter's constructor
            connections=requests.adapters.DEFAULT_POOLSIZE,
            maxsize=requests.adapters.DEFAULT_POOLSIZE,
            # This should be a tuple of (address, port). Port 0 means auto-selection.
            source_address=(addr, 0),
        )

    return session


# usage example:
s = session_for_src_addr('192.168.1.12')
s.get('https://httpbin.org/ip')

https://stackoverflow.com/questions/48996494/send-http-request-through-specific-network-interface

IIIypuk ★★★★
()
Последнее исправление: IIIypuk (всего исправлений: 1)

Достаточно ли будет просто настроить на уровне докер контейнера что-то вроде такого?

Всё чаще замечаю, что тривиальные задачи пытаются решать через Docker, которые можно решить парой строчек кода. У части населения уже докер головного мозга.
Скоро срать без докера не сможете

IIIypuk ★★★★
()

Скормите питону побольше проксей и усё. Не нужно эти докеры-шмокеры теребить, от них датацентры греются, что влияет на климат планеты не самым лучшим образом!

mydibyje ★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от IIIypuk

Спасибо за подсказку! Докер хотел использовать - чтобы не лазать по проекту и не исправлять везде, где к API обращаюсь… Видимо, придётся переписывать и в самом деле…

DigitalBerd
() автор топика

Подскажите пожалуйста, кто в курсе - какой стандартный подход к решению моей проблемы?

Купить proxy и не заморачиваться с покупкой айпишников у провайдера. Цену вопроса можно посмотреть, например, тут https://proxy6.net/

requests в python отлично работает с http проксями.

Norgat ★★★★★
()