2017-01-23 21 views
1

Наш продукт - это априодный отдых, который нам нужно масштабировать и сделать его излишним. Наш план состоит в том, чтобы использовать nginx как балансировщик нагрузки и прокси-сервер, который будет перенаправлять запросы api на три разных сервера, все из которых будут подключены к тому же набору реплик MongoDB.Масштабирование REST API - Архитектура

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

У меня есть два вопроса относительно этого:

  1. Несколько хрон рабочих мест должны быть выполнены в базе данных. Как можно мы гарантируем, что только один из серверов запускает кроссы, но если сервер выключен, другой запускает их вместо этого?
  2. Как мы можем применять ограничения скорости, объединенные на всех серверах. Как сделать мы позволяем одному ключу api получать 1000 запросов в день на всех трех серверах ?

ответ

0

Необходимо выполнить несколько заданий cron по базе данных. Как мы можем убедиться, что только один из серверов запускает крон, но если сервер не работает, другой запускает их вместо этого?

Рассмотрите возможность использования очереди. Все задания cron могут быть выбраны из очереди.

Как мы можем обеспечить ограничение скорости, объединенное на всех серверах? Как мы разрешаем одному ключу api получать 1000 запросов в день на всех трех серверах вместе?

Рассмотрите возможность сохранения счетчика, который обновляется каждый раз, когда сервер получает запрос от арендатора (пользователь с ключом api). Проверьте счетчик (счетчик < 1000), когда сервер получает запрос, чтобы узнать, воспользовались ли они своей квотой.

+0

Вопрос о пункте 2: Что делать, если несколько запросов в секунду? Вы не можете перейти в базу данных, чтобы обновлять счетчик 10 раз в секунду. – giliev

+0

Правда, но счетчик обновления может быть сделан асинхронным (не ждите завершения обновления базы данных, записывайте в очередь и обрабатывайте очередь с помощью фонового задания), чтобы компенсировать любой удар производительности. Мы также можем рассмотреть базу данных в памяти, если у нас есть другие функции, которые могут потребовать более быстрого чтения-записи. – Sumanth

 Смежные вопросы

  • Нет связанных вопросов^_^