Мне поручено работать над проектом для клиента, у которого есть сайт, который он оценивает, будет получать 1-2 миллиона обращений в день. У него есть существующая база данных пользователей 58M, которые необходимо засеять на основе регистрации для нового бренда. Большая часть контента сайта обслуживается внешними данными, предоставленными API, причем большинство данных, хранящихся в нашей настройке Mongo, являются информацией профиля и сохраненными параметрами API.
NginX будет находиться на порту 80 и балансировке нагрузки в кластере Node на портах 8000 - 8010.
Мой вопрос - что делать с кешированием. Я исхожу из фона LAMP, поэтому я привык либо писать статические HTML файлы с PHP, либо обслуживать их, чтобы минимизировать нагрузку MySQL или использовать Memcached для сайтов, требующих более высокого уровня кэширования. Эта настройка немного чуждо мне.
Какой из них наиболее идеален для минимального времени отклика и загрузки процессора?
1: кеширование уровня страницы с помощью NginX
Ссылка: http://andytson.com/blog/2010/04/page-level-caching-with-nginx/
server {
listen 80;
servername mysite.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
location / {
proxy_pass http://localhost:8080/;
proxy_cache anonymous;
}
# don't cache admin folder, send all requests through the proxy
location /admin {
proxy_pass http://localhost:8080/;
}
# handle static files directly. Set their expiry time to max, so they'll
# always use the browser cache after first request
location ~* (css|js|png|jpe?g|gif|ico)$ {
root /var/www/${host}/http;
expires max;
}
}
2: Redis как ведро кэша
Функция hash()
является функцией numbers()
на этой странице: http://jsperf.com/hashing-strings
function hash(str) {
var res = 0,
len = str.length;
for (var i = 0; i < len; i++) {
res = res * 31 + str.charCodeAt(i);
}
return res;
}
var apiUrl = 'https://www.myexternalapi.com/rest/someparam/someotherparam/?auth=3dfssd6s98d7f09s8df98sdef';
var key = hash(apiUrl).toString(); // 1.8006908172911553e+136
myRedisClient.set(key,theJSONresponse, function(err) {...});
3: Node записать файлы JSON
Функция hash()
является функцией numbers()
на этой странице: http://jsperf.com/hashing-strings
function hash(str) {
var res = 0,
len = str.length;
for (var i = 0; i < len; i++) {
res = res * 31 + str.charCodeAt(i);
}
return res;
}
var fs = require('fs');
var apiUrl = 'https://www.myexternalapi.com/rest/someparam/someotherparam/?auth=3dfssd6s98d7f09s8df98sdef';
var key = hash(apiUrl).toString(); // 1.8006908172911553e+136
fs.writeFile('/var/www/_cache/' + key + '.json', theJSONresponse, function(err) {...});
4: Лак впереди
Я сделал некоторые исследования и тесты, такие как показанные на этом сайте, отталкивают меня от этого решения, но я все еще готов рассмотреть его, если это имеет наибольший смысл: <а3 >