Open Web Ninja обслуживает более 30 API с данными в режиме реального времени — в сферах электронной коммерции, социальных сетей, недвижимости, рынка труда и финансов. Их клиентами являются разработчики и компании, которым требуются структурированные данные, надежно предоставляемые по запросу. Именно прокси-уровень позволяет обеспечить это в больших масштабах.
За три года объем запросов к API вырос в 10 раз. На протяжении всего этого времени наибольшую долю трафика обрабатывалипрокси-серверыPrivateProxy, расположенныев различных дата-центрах.
Задача: масштабирование API-интерфейсов для работы с данными при сохранении предсказуемой задержки
Когда вы продаете API-интерфейсы для доступа к данным, простои — это не внутренняя проблема, а проблема ваших клиентов. Open Web Ninja обслуживает более 50 000 клиентов. Если инфраструктура, на которой работают эти API, начинает работать медленнее или перестает функционировать, эти клиенты сразу же это ощущают.
Три фактора сделали создание этой инфраструктуры более сложной задачей, чем ожидалось.
Источники быстро дают отпор
Любой сервис, запрашивающий данные в больших объемах, рано или поздно столкнётся с ограничениями по скорости и блокировками. Это не ошибка в плане — это исходное допущение. Вопрос заключается в том, насколько надёжно прокси-уровень справляется с этой ситуацией без ручного вмешательства каждый раз, когда возникает новый крайний случай.
Разные цели ведут себя по-разному
Один конечный пункт API нормально работает с данной конфигурацией. Другой — нет. Провайдер прокси-серверов, который бесшумно справляется с таким разнообразием — без необходимости постоянной настройки со стороны команды разработчиков — ценен гораздо больше, чем тот, который выглядит быстрым только на бумаге.
Средняя задержка — это неподходящий показатель
Адам Бен-Аюн, соучредитель и технический директор, высказывается по этому поводу очень четко: именно колебания приводят к сбоям в работе API-продуктов. Ответ, который в одном случае занимает 50 мс, а в другом — 3 секунды, хуже, чем тот, который стабильно занимает 200 мс. Клиенты замечают скачки, а не среднее значение.
Решение: ротация настроек прокси-сервера в центре обработки данных для обеспечения высокой пропускной способности при передаче данных через API
Open Web Ninja одновременно использует несколько провайдеров прокси-серверов. Это осознанное архитектурное решение — оно обеспечивает более широкий IP , а в случае сбоя у одного провайдера остальные автоматически перенимают трафик.
В рамках этой архитектуры наибольший объем трафика обрабатывает PrivateProxy
| Параметр | Значение |
|---|---|
| Тип прокси-сервера | Вращающийся центр обработки данных |
| Положение в стеке | Крупнейший поставщик по объему вызовов API |
| Переключение на резервный сервер | Поддержка нескольких провайдеров с автоматическим перераспределением |
| Канал поддержки | Специальный канал в Slack |
| Пользовательские настройки | Предоставляется по запросу |
Команда оценивает новых провайдеров каждый раз по одной и той же схеме: начинаем с небольшого объема, тестируем на реальном трафике и расширяем масштабы только в том случае, если все работает стабильно. PrivateProxy прошел этот процесс три года назад и с тех пор является нашим основным провайдером.
По поводу того, почему именно дата-центры — цитируем слова команды: «Мы большие поклонники дата-центров из соображений надёжности и скорости». Для бизнеса, основанного на API с высокой пропускной способностью, где предсказуемая задержка имеет большее значение, чем IP , прокси с ротацией дата-центров оказались оптимальным решением.
Техническая реализация
Прокси-серверы находятся на уровне инфраструктуры API. Каждый исходящий запрос проходит через пул; для распределения нагрузки по IP для каждого запроса запускается процедура ротации.
Python
import requests
PROXY_HOST = "dc.privateproxy.me"
PROXY_PORT = 10000
PROXY_USER = "your_username"
PROXY_PASS = "your_password"
proxies = {
"http": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
"https": f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}",
}
response = requests.get("https://target-source.com/data", proxies=proxies, timeout=10)
При высокой параллельности использование пула соединений снижает накладные расходы на TCP для каждого запроса. При более чем 50 000 клиентов, одновременно выполняющих вызовы API, это дает значительный эффект.
Результаты: 10-кратный рост благодаря инфраструктуре прокси, которая не отставала от темпов развития
| Метрическая система | Значение |
|---|---|
| Объем вызовов API | 10-кратный рост за 3 года |
| Клиенты | 50,000+ |
| Ответ службы поддержки | <30 min on weekdays via Slack |
| Должность поставщика услуг | Наибольшая доля трафика в стеке |
| Проблемы | Редкий случай — быстро решено |
«Мы не боимся никаких неприятных сюрпризов, как бы быстро мы ни росли. Инфраструктура просто успевает за нами».
«Дело даже не в том, сколько времени у тебя уходит на ответ. Дело в том, насколько ты вовлечен в решение проблем и стремишься их уладить. Именно в этом ты превосходишь остальных».