Наш продукт - это априодный отдых, который нам нужно масштабировать и сделать его излишним. Наш план состоит в том, чтобы использовать nginx как балансировщик нагрузки и прокси-сервер, который будет перенаправлять запросы api на три разных сервера, все из которых будут подключены к тому же набору реплик MongoDB.Масштабирование REST API - Архитектура
У нашего api есть ограничение скорости на основе ключа api пользователя. У пользователя будет несколько клиентов, и все они будут подписывать свои запросы с помощью одного и того же ключа api.
У меня есть два вопроса относительно этого:
- Несколько хрон рабочих мест должны быть выполнены в базе данных. Как можно мы гарантируем, что только один из серверов запускает кроссы, но если сервер выключен, другой запускает их вместо этого?
- Как мы можем применять ограничения скорости, объединенные на всех серверах. Как сделать мы позволяем одному ключу api получать 1000 запросов в день на всех трех серверах ?
Вопрос о пункте 2: Что делать, если несколько запросов в секунду? Вы не можете перейти в базу данных, чтобы обновлять счетчик 10 раз в секунду. – giliev
Правда, но счетчик обновления может быть сделан асинхронным (не ждите завершения обновления базы данных, записывайте в очередь и обрабатывайте очередь с помощью фонового задания), чтобы компенсировать любой удар производительности. Мы также можем рассмотреть базу данных в памяти, если у нас есть другие функции, которые могут потребовать более быстрого чтения-записи. – Sumanth