博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
varnish 4.0 官方文档翻译17-Misbehaving servers
阅读量:5944 次
发布时间:2019-06-19

本文共 1622 字,大约阅读时间需要 5 分钟。

hot3.png

Misbehaving servers

varnish有个关键特性,为misbehaving(行为不端,诡异的)web服务器或者应用服务器提供保护的能力。

Grace mode

当几个客户端请求同一个页面的时候,varnish只发送一个请求到后端服务器,然后让其他几个请求挂起并等待返回结果;获得结果后,其它请求再复制后端的结果发送给客户端。有些产品中需要调用其他来将请求合并,而varnish自动做这些。

但如果同时有数以千计的请求,那么这个等待队列将变得庞大,这将导致2类潜在问题:

  • 惊群问题(thundering herd problem),即突然释放大量的线程去复制后端返回的结果,将导致负载急速上升;

  • 没有用户喜欢等待;

为了解决这类问题,可以配置varnish在缓存对象因超时失效后再保留一段时间,以给那些等待的请求返回过期的内容(stale content)。

为了提供给用户过期的内容,我们必须先有这些内容。因此我们在VCL中配置如下,使得varnish能在内容过期过后依然保持2分钟:

sub vcl_backend_response {    set beresp.grace = 2m;}

现在Varnish允许在对象过期后2分钟内提供给客户端。同时varnish也将刷新这个对象。刷新动作是异步发生的,发生在新的对象将替换老对象的同时。

我们可以在vcl_hit中增加代码来影响这个逻辑的工作。默认VCL是这样:

sub vcl_hit {    if (obj.ttl >= 0s) {        // A pure unadultered hit, deliver it        return (deliver);    }    if (obj.ttl + obj.grace > 0s) {        // Object is in grace, deliver it        // Automatically triggers a background fetch        return (deliver);    }    // fetch & deliver once we get the result    return (fetch);}

如果你开启了健康检测,要是后端有问题只能提供给客户端过期的对象时,你就能检测到。用如下的if语句替换掉上面的第二个if语句块:

if (!std.healthy(req.backend_hint) && (obj.ttl + obj.grace > 0s)) {    return (deliver);} else {    return (fetch);}

总之,优雅模式解决下面2个问题:

  • 提供过期内容给客户端以避免请求堆积。

  • 如果你允许varnish可以提供过期的内容。


Using inline C to extend Varnish

你可以使用inline C来扩展Varnish。注意,这种方式您可能严重损毁varnish。C代码运行在Varnish缓存进程中,如果你的C代码有错误,缓存进程将crash。

一个使用inline C的功能是记录日志到syslog:

# The include statements must be outside the subroutines.C{        #include 
}Csub vcl_something {        C{                syslog(LOG_INFO, "Something happened at VCL line XX.");        }C}

要使用inline C你需要通过参数开启此功能。

转载于:https://my.oschina.net/monkeyzhu/blog/468926

你可能感兴趣的文章
linux下IPTABLES配置详解
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q131-Q134)
查看>>
iOS边练边学--iOS中的(ARC下)单粒模式(GCD实现)
查看>>
php get_magic_quotes_gpc()函数用法介绍
查看>>
SQL to Java code for Elasticsearch
查看>>
Java RMI之HelloWorld程序以及相关的安全管理器的知识
查看>>
FlatBuffers
查看>>
美团HD(5)-选择城市
查看>>
$.when()方法监控ajax请求获取到的数据与普通ajax请求回调获取到的数据的不同
查看>>
pthread_mutex_t
查看>>
LR11.0 下载及破解
查看>>
Java基础-绘图技术
查看>>
又转出61.8万个ETH,EOS不疯狂不成魔
查看>>
程序员面试IT公司的33个小贴士
查看>>
多款C系列手机亮相三星中国论坛,更加注重中国用户体验
查看>>
云南中医学院更名为云南中医药大学
查看>>
人社部:突出就业优先政策主线 全力确保就业局势稳定
查看>>
关键时刻还是要看阿里,达摩院发布自主研发AI芯片
查看>>
「百年育才」计划启动港股IPO,新高考改革下的“志愿填报辅导”市场迎来窗口期?...
查看>>
浅谈高性能数据库集群——读写分离
查看>>