我尝试在Apache服务器上缓存一个页面,该页面运行一个 Jmeter 板,显示通过API和PHP从Salesforce数据库中提取的信息。
其动态如下所示,
客户端-〉Apache/PHP/SQL查询-〉Salesforce
Jmeter 板包含一些表,这些表重新加载包含查询salesforce的对象的PHP页面。
function refreshtable1() {
$('#table1').load('/tables/table1.php', function() {
setTimeout(refreshtable1, 60000);
});
}
为了进行查询,table1.php包含一个查询对象和一个API插件,每次重新加载和查询时都可以登录到Salesforce。
登录返回一个会话ID,该ID将被放入会话中并在过期之前重复使用。
现在,假设有30个用户,5个表,每个表有30列,每个用户一列,显示信息以便共享。
每30分钟刷新2个表,每分钟刷新3个表。
如果你做的数字可能高达100万查询每天因为这些家伙保持他们的浏览器打开。有一个会话处理程序,杀死会话后一段时间,但如果他们刷新的东西回家前,它运行另一个9小时。
Salesforce管理员现在不太喜欢我。
因此,我试图把某种系统或缓存卸载。也为了避免必须有一个本地数据库,我复制所有和读取从查询填充是每分钟3。
所以我决定给予瓦尼什·卡什一个机会。
问题是,我看到它没有将表内容从该高速缓存中传递到客户端,它看起来确实呈现了HTML部分,但表内容却一直从运行 Jmeter 板站点的后端服务器获取。
~# varnishstat -1 | grep "cache_hit \|cache_miss \|cache_hitpass"
MAIN.cache_hit 44 0.00 Cache hits
MAIN.cache_hitpass 0 0.00 Cache hits for pass.
MAIN.cache_miss 16436 0.59 Cache misses
我不确定这是否可能,所以我将感谢任何建议。
这是瓦尼什会议
sub vcl_recv {
if (!(req.http.host == "test.local")) {
unset req.http.Cookie;
}
}
我只是基本上尝试缓存所有的cookie来保持'PHPSESSID'。我也尝试缓存POST和GET以防万一,但这也没有真正做到这一点。
if (!(req.method ~ "GET") && !(req.method ~ "POST")) {
return (pass);
}
关于如何让Varnish处理这个场景,或者如何用另一种方法减少查询,你有什么想法吗?
干杯。
1条答案
按热度按时间to94eoyn1#
评论里的人说的没错,你不应该用清漆,但是如果你没有选择的话,那就去用吧。我也用它来解决组织问题。
您可以更改vcl_hash函数以将cookie用作该高速缓存键的一部分,请查看here。例如:
你应该注意hash colisions。我相信你可以避免它删除所有的cookie,这些cookie不是你想用作密钥的cookie。在这个link中有一个例子。
祝你好运。