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

Varnish可以从文本文件读取后端主机列表吗,varnish,varnish-vcl,Varnish,Varnish Vcl,varnish有没有办法从文本文件中读取后端url列表,然后代理缓存未命中从文本文件中获取的随机url 我想象的是这样的伪代码 /var/services/backend-url.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 {

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

我想象的是这样的伪代码

/var/services/backend-url.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的前端后面。我们正在评估用varnish替换apache层,以便从varnish的缓存功能中获益。我们还有一个服务发现框架,它知道每个后端应用程序的端点位置。当新主机出现或停止服务时,端点URL会定期更改

目前,我们使用将请求路由到后端服务。然后,我们有一个基于服务发现框架的内容维护后端服务列表的过程

所有这些对我们在apache中都很有效,除了apache就像用大锤敲开坚果。我们真正想要的是反向代理loigc,varnish中的缓存也会很有帮助


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

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

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

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

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

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