2014-12-07 3 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; 
} 

...이 의사 코드 같은 것을 상상 무엇, 현재 프론트 엔드 실행중인 아파치 뒤에있는 여러 백엔드 응용 프로그램으로 구성된 서버 시스템에서 작업합니다. 우리는 바니시의 캐싱 기능을 활용할 수 있도록 아파치 레이어를 바니시로 바꾸는 것을 평가하고 있습니다. 또한 각 백엔드 어플리케이션의 엔드 포인트 위치를 알고있는 서비스 발견 프레임 워크가 있습니다 (엔드 포인트 URL은 새 호스트가 출현하거나 서비스가 중단됨에 따라 주기적으로 변경됩니다).

현재 우리는 RewriteMap functionality in mod_rewrite을 사용하여 요청을 백엔드 서비스로 라우팅합니다. 그런 다음 서비스 검색 프레임 워크의 내용을 기반으로 백엔드 서비스 목록을 유지 관리하는 프로세스가 있습니다.

이 모든 것은 apache가 너트를 깨는 데 쓰레기를 사용하는 것 외에는 아파치에서 잘 작동합니다. 우리가 정말로 원하는 것은 역방향 프록시입니다. 그리고 바니시에서 캐싱이 도움이 될 것입니다.

바니시가 외부 리소스에서 백엔드 URL 목록을 읽도록하는 방법이 있습니까?

답변

0

사용자 지정 vmod/c 모듈을 사용하지 않고도 빠른 대답은 아니오입니다. VCL 명령어가 바니시에서 컴파일되고 있으며 이는 런타임 포함을 배제합니다.

그러나 VCL 내에 현재 백엔드를 포함하는 별도의 백엔드 vcl을 포함시켜야하는 이유는 무엇입니까? vcl 파일을 요청시 작성할 수 있습니다. 그런 다음 varnishadm CLI 명령을 사용하여 VCL의 새 컴파일을 요청할 수 있으므로 config를 라이브로 가져올 수 있습니다.

0

나는 두 가지 잠재적 인 해결책을 볼 수 있습니다.

첫 번째는 VCL을 생성하고 Chef 또는 일부 사용자 정의 스크립팅과 같은 백엔드를 생성하는 것입니다. 그런 다음 텍스트 파일을 백엔드 정의로 처리하고 필요한 VCL을 호출하여 텍스트 파일을 호출 할 수 있습니다. 임의의 백엔드 요구 사항을 처리하려면 director을 사용할 수 있습니다. 저는 이사들과 직접 거래하지는 않았지만 그러한 요구 사항을 해결할 의향이있는 것처럼 보입니다. 백엔드 변경이 발생하면 생성 스크립트/Chef를 다시 실행하고 바니시에 varnishadm 또는 service varnish reload을 사용하여 구성을 다시로드하여 완전 재시작을 피할 수 있습니다.

두 번째는 Marcel Dumont이 제안한 VMOD 또는 VCL의 인라인 C를 사용하여 C로 구현하는 것입니다.