у меня есть два раздела жесткого диска, которые я объединил в RAID1, используя mdadm
, и создал файловую систему ext4 на получившееся устройство.
Когда я mdadm --zero-superblock
два раздела и воссоздаю RAID, и кэшировать эти API на 10 секунд, если частота запросов> 500 и 3 секунды, если скорость> 150.
Как мы можем сделать это, используя Nginx
или Varnish
? Или другие решения? CDN?
Вы можете добиться этого с помощью сервера кеширования Nuster
# cache /heavy for 100 seconds if be_conn greater than 10
acl heavypage path /heavy
acl tooFast be_conn ge 100
nuster rule heavy ttl 100 if heavypage tooFast
Я не знаю, является ли API частным или общим? В случае, если он частный, то есть результат API отличается для каждого пользователя, вы также можете кэшировать / api / heavy
для каждого пользователя следующим образом:
nuster rule heavy key method.scheme.host.uri.cookie_sessionID ttl 100 if heavypage tooFast
Надеюсь, это поможет
Возможный подход с использованием Varnish: во время vcl_recv
используйте Redis VMOD (отказ от ответственности: я автор) или некоторое регулирование VMOD (например, vsthrottle
включен в https://github.com/varnish/varnish-modules ) для проверки / обновления частоты запросов к конечной точке API. Если не превышает лимит, пропустите кэш, просто выполнив проход
. В противном случае выполните хэш
и кэшируйте, как это требуется, во время vcl_backend_response
. Это можно легко обобщить, если требуется более одного ограничения.
vsthrottle
намного проще, чем подход Redis, но, очевидно, является локальным для каждого экземпляра Varnish. Обычно это нормально для сценария дросселирования, поэтому в большинстве случаев не нужно добавлять Redis в стек.