Varnish可以从文本文件中读取后端主机列表

时间:2014-12-07 20:56:14

标签: varnish varnish-vcl

有没有办法让varnish从文本文件中读取后端网址列表,然后代理缓存未命中到从文本文件中获取的随机网址?

我想象的是像这样的伪代码......

/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

varnish config

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层,以便我们可以从清漆的缓存功能中受益。我们还有一个服务发现框架,它知道每个后端应用程序的端点位置(端点URL随着新主机的出现或停止服务而定期更改)。

目前,我们使用RewriteMap functionality in mod_rewrite将请求路由到后端服务。然后,我们有一个过程来根据服务发现框架的内容维护后端服务列表。

这一切对我们来说在apache中运行良好,除了apache就像使用大锤来破解坚果一样。我们真正想要的只是反向代理loigc,而清漆中的缓存也会有所帮助。

有没有办法让varnish从外部资源读取后端网址列表?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我可以看到两种可能的解决方案。

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

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