HAProxy를 사용하는 공통 AB 테스트 기반에 대한 도전
전날 기사는요.
@suemoc의re:dash 권한 관리 및 활용 사례 - Qita
네.
저는 졸업생 엔지니어@_miyachik입니다.이번에(프론트 데스크의 변경이라면) 엔지니어의 작업 시간이 필요 없고, 응용 프로그램의 개발 언어를 묻지 않고 통용되는 AB 테스트 기초를 말한다.
전제 조건
이번 AB 테스트의 기본은
*단지 일어서는 실례의 IP가 모르는 자동 비례가 아직 다 대응되지 않았습니다
해본 일
HAProxy 프록시 서버이며 소프트웨어 로드 밸런서입니다.
HAProxy는 무엇입니까? 아무것도 아닙니다. 공식 문서 에 쓰여 있습니다.
문서에서 보듯이 HAProxy는 부하 균형기로서 HAProxy 자체가 쿠키를 발행할 수 있는 기능을 가지고 있다.그리고 쿠키 설치 여부도 판단할 수 있다.
또한 HAProxy를 단독으로 사용하여 AB 테스트 분배와 관련된 기능을 실현할 수 있기 때문에 Front/backend의 응용 프로그램 종류에 제한이 없다.
인프라 구성도
대략적인 구성은 다음과 같다.모든 사이드의 서버 대수는 HAProxy의backend 정의를 통해 진행할 수 있습니다.
AB 테스트 모드를 반영하는 지점은 ab*사이드에 대해서만 테스트를 진행하고 결과가 좋지 않을 경우 머무르지 않고 다음 AB 테스트를 계속할 수 있다.
HAProxy 기반 AB 테스트 할당
할당은 HAProxy의 ACL 및 backend의 복수 정의에 따라 수행됩니다.
ACL(Access Control List)
공식 문서
HAProxy의 ACL은 매우 유연한 접근을 할당할 수 있습니다.
다음과 같이 쿠키를 판단하고 할당하는 백엔드를 변경할 수 있습니다.
haproxy.cfg
acl normal hdr_sub(cookie) ab-test-pattern=0
acl ab-test-pattern hdr_sub(cookie) ab-test-pattern=1
use_backend normal_side if normal
use_backend ab_side if ab-test-pattern
default_backend first_side
ab-test-pattern 같은 쿠키가 존재하지 않는 경우(처음 방문했을 때) first사이드에 할당, 쿠키가 존재, 값이 1이면 abside, 0이면 normal사이드에게 할당할 수 있습니다.백엔드 정의
backend의 정의는 다음과 같습니다. 처음 방문할 때 쿠키를 삽입하고, 가중 분배는 weight로 진행됩니다.이렇게 되면 weight에 따라 AB 테스트 서버에 할당된 사용자가 증거로 쿠키의 값 1을 기록합니다.
다음 예는 normal:AB=75:25입니다.normal의 확립 = 호스트 이름 끝에서 0까지의 구축 총체.따라서 설정을 제시할 때normal을side의 weight는 설정이 필요합니다
(normal_sideのホスト数)/(設定したいnormal側のweight)
.디자인된 응용의 지점이 다르기 때문에 응용 분야 abside 측면 또는 normal사이드 측 방문인지 판단할 필요는 없지만, 사고를 방지할 때는 쿠키 값을 참조해 사용자가 어느 쪽으로 뽑혔는지 판단할 수 있다.
처음 방문할 때 쿠키를 설정하지 않았습니다. X-HOST-NAME을 사용하고 헤더에서 호스트 이름 ab를 참조합니다.side 또는 normal사이드인지 사이드인지 판단할 수 있어요.
haproxy.cfg
backend first_side
mode http
cookie ab-test-pattern insert nocache
balance roundrobin
http-send-name-header X-HOST-NAME
server web1-0 127.0.0.1:80 weight 25% check cookie 0 inter 1000 fall 2
server web2-0 127.0.0.2:80 weight 25% check cookie 0 inter 1000 fall 2
server web3-0 127.0.0.3:80 weight 25% check cookie 0 inter 1000 fall 2
server web4-1 127.0.0.4:80 weight 25% check cookie 1 inter 1000 fall 2
그다음에 노말-사이드는 노멀 쪽 호스트만 선언하면 노멀만 가요.하지만 ab사이드에 노멀 측 호스트가 포함된다고 선언하지 않으면 AB 테스트 서버(이번 경우 웹4-1)가 떨어지면 해당 호스트를 찾을 수 없어 접근할 수 없기 때문에 주의해야 한다.(check cookie를 진행하는 경우에도 호스트가 드랍할 때 할당하지 않고 다른 서버에 할당)
다음은 실제 출력된 파일입니다.부하 등 상황에 신경을 쓰신다면 맥스콘 등의 설정을 적당히 보충해 주십시오.지점명은 ab-test-pattern의 구상이다.
normal_side의 IP 등은 Rails의 config 파일에 정렬되어 있습니다.
haproxy.cfg
global
log 127.0.0.1 local2 info
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 10000
user haproxy
group haproxy
daemon
defaults
log global
timeout connect 60s
timeout server 1m
timeout client 1m
timeout check 5s
# web
listen frontside
maxconn 4000
fullconn 4000
bind 0.0.0.0:80
mode http
acl normal hdr_sub(cookie) ab-test-pattern=0
acl ab-test-pattern hdr_sub(cookie) ab-test-pattern=1
use_backend normal_side if normal
use_backend ab_side if ab-test-pattern
default_backend first_side
backend first_side
mode http
cookie ab-test-pattern insert nocache
balance roundrobin
http-send-name-header X-HOST-NAME
server web1-0 127.0.0.1:80 weight 25% check cookie 0 inter 1000 fall 2
server web2-0 127.0.0.2:80 weight 25% check cookie 0 inter 1000 fall 2
server web3-0 127.0.0.3:80 weight 25% check cookie 0 inter 1000 fall 2
server web4-1 127.0.0.4:80 weight 25% check cookie 1 inter 1000 fall 2
backend normal_side
mode http
balance roundrobin
server web1-0 127.0.0.1:80 check inter 1000 fall 2
server web2-0 127.0.0.2:80 check inter 1000 fall 2
server web3-0 127.0.0.3:80 check inter 1000 fall 2
backend ab_side
mode http
cookie ab-test-pattern insert nocache
balance roundrobin
server web1-0 127.0.0.1:80 check cookie 0 inter 1000 fall 2
server web2-0 127.0.0.2:80 check cookie 0 inter 1000 fall 2
server web3-0 127.0.0.3:80 check cookie 0 inter 1000 fall 2
server web4-1 127.0.0.4:80 check cookie 1 inter 1000 fall 2
HAProxy의 설정 변경과 응용 프로그램의 디버깅을 진행하는 작업은 이번에는 연쇄반응 Jinkins의 Job을 통해 이루어졌다.준비된 잡.
현재 제작된 HAProxy의 config만 출력하는 프로그램을 공개할 예정입니다. 잠시만 기다리세요
Reference
이 문제에 관하여(HAProxy를 사용하는 공통 AB 테스트 기반에 대한 도전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/_miyachik/items/561300a4c4ff3b2c72f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)