2014-12-07 55 views
0

清漆能够从文本文件中读取后端URL列表,然后将代理缓存未命中从文本文件中取出的随机URL读取吗?可以清漆从文本文件中读取后端主机清单

我想象的是这样的伪...

/var/services/backend-urls.conf

http://backend-host-1/path/to/application 
http://backend-host-2/path/to/application 
http://backend-host-3/path/to/application 
# etc 

清漆配置

sub vcl_miss { 
    // read a list of urls from a text file 
    backendHosts = readFile("/var/services/backend-urls.conf"); 

    //choose a random url from the file 
    randomHost = chooseLineAtRandom(backendHosts); 

    //proxy the request to the random host 
    set req.backend = randomHost; 
} 

提供一些背景,我在一个服务器系统上工作,该系统包含许多后端应用程序,这些应用程序当前位于运行apache的前端之后。我们正在评估用清漆替换apache层,以便我们可以从清漆的缓存功能中受益。我们还有一个服务发现框架,它知道每个后端应用程序的端点位置(当新主机出现或停止服务时,端点会定期更改)。我们使用RewriteMap functionality in mod_rewrite将请求路由到后端服务。然后我们有一个流程来维护基于服务发现框架内容的后端服务列表。

所有这一切对我们在Apache中都很好,除了apache就像是用大锤来攻击一个坚果。我们真正想要的是反向代理loigc,而清漆中的缓存也会有帮助。

有什么办法让清漆从外部资源读取后端网址列表?

回答

0

不诉诸自定义vmod/c模块,快速回答是否定的。 VCL指令正在varnish中编译,并排除了运行时包含。

但是为什么不在VCL中包含一个包含当前后端的单独的后端vcl。 可以根据需要写出vcl文件。然后使用varnishadm CLI命令,您可以请求对VCL进行新的编译,从而使配置生效。

0

我可以看到两个潜在的解决方案。

首先是让东西生成你的VCL和后台,比如厨师或者一些自定义脚本。然后,您可以将文本文件处理为后端定义以及必要的VCL来调用它们。要处理随机后端的需求,您可以使用director。我并没有亲自处理董事,但看起来他们是为了解决这个问题。当发生后端更改时,您可以重新运行生成脚本/厨师,并使用varnishadmservice varnish reload告诉Varnish重新加载其配置,以避免完全重新启动。

第二种方法是使用C语言实现它,或者通过一个VMOD,如Marcel Dumont所建议的,或者可能使用VCL中的内联C语言。