"Hello World!"서비스를 제공하는 간단한 꼬인 앱이 있습니다. HTTP 프로토콜을 통해. 모든 프로세서를 사용하기 위해 여러 인스턴스를 실행하려고합니다.haproxy 뒤 꼬인 앱
하지만 단일 꼬인 앱은 haproxy 뒤에 동일한 앱의 1,2,5 번 인스턴스보다 훨씬 많은 요청을 처리한다고 언급했습니다. 나는 이것이 왜 일어나는지를 알 수 없다.
저는 JMeter를 통해 /
이되는 5000 개의 스레드를 실행합니다. 127.0.0.1:9001에서 실행하면 500ms 시간마다 각 요청을 성공적으로 처리합니다. 127.0.0.1:8080에서 실행하면 응답 중 일부는 503 Service Unavailable
이고 일부는 500ms 이상 실행됩니다. 여기
global
maxconn 500000
user german
defaults
mode http
retries 0
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
balance roundrobin
# if something goes wrong with server, redistribute client to a working server
option redispatch
listen http 127.0.0.1:8080
mode http
option httpchk GET/HTTP/1.1
server prototype-local 127.0.0.1:9001 maxconn 0 weight 1 maxqueue 0 cookie server01 check inter 5000 rise 1 fall 3
balance roundrobin
# to see ip's of clients
option forwardfor
option http-server-close
# disable or enable immediate session resource cleaning(useful for chat)
# option nolinger
# inserts cookie to each client requet to identify a process
cookie SWCOMMET insert indirect nocache
# will be enalbed as soon as main server with process crashed :nice fail resistance
option allbackups
평균 응답 시간이 500ms를 초과하지 않습니다. 동시 요청이 너무 많으면 응답 시간이 증가합니다. –
전용 코어에 대한 좋은 조언. 문제는 연결 타임 아웃 옵션에 있었다고 생각합니다. 연결이 5 번에 설정되지 않으면 503이 haproxy에 의해 반환됩니다. 이 값을 50으로 늘렸고 응용 프로그램 자체와 동일한 동작을 얻었습니다. –
OK 너무 느리게 응답하는 응용 프로그램에는 분명히 문제가 있습니다. 모든 스레드를 채우고 새 연결은 이전 연결이 해제 될 때까지 기다려야합니다. 애플리케이션에서 시간을 낭비하지 않습니까? 이 500ms는 정말 큰 것입니다. 5-50 MICRO 초가 더 적당 할 것입니다. –