2017-02-14 2 views
4

간단한 '안녕하세요 세상'HTTP 서버를 벤치 마크하려고합니다. go입니다. 나는이 만든이 개 테스트 :탄력있는 콩팥에 Golang 앱을 실행할 때 성능 문제가 있습니까?

  1. 아마존 EC2 사용 - 또한, 내가 할 수있는 최초의 설정에 m3.medium 단일 인스턴스

로 - m3.medium 인스턴스를 아마존 탄성 콩나무를 사용

  • 최대 18k req/sec. 둘째, 1.6k req/초입니다.

    소스 코드 : (에서 : https://golang.org/doc/articles/wiki/)

    package main 
    
    import (
        "fmt" 
        "net/http" 
    ) 
    
    func handler(w http.ResponseWriter, r *http.Request) { 
        fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) 
    } 
    
    func main() { 
        http.HandleFunc("/", handler) 
        http.ListenAndServe(":8080", nil) 
    } 
    

    는 큰 성능 차이에 대한 설명이 있습니까?

    PS : 벤치 마크 도구 : https://github.com/wg/wrk
    또 하나 개 중요한 것은 : 처음 설치에 을 응용 프로그램 (및 이동 애플 리케이션을 위해 내가 그것을 제거 할 수 없습니다) 것 탄성 콩나무는 항상 역방향 프록시로 nginx를 추가 , 전혀 nginx가 없었다.

  • +1

    또 다른 차이점은 EB 설정에 Elastic Load Balancer가 관련되어 있다는 것입니다. "탄력적 인"부분은 트래픽으로 확장 될 예정이지만 성능 테스트와 같이 갑자기 트래픽이 갑자기 폭발하여 ELB가 중단 될 때까지 문제가 발생할 수 있음을 알았습니다. – Brian

    +0

    Brian과 동의하십시오. 가설을 검증하기 위해, 1) ELB 뒤에있는 m3.medium, 2) m3.medium + ELB, 말하자면, 15 분간의 지속 하중, 3) m3.medium + ELB + nginx를 비교할 수 있습니다. – twotwotwo

    +0

    내 EB 설치가 단일 인스턴스이지만 좋은 지점 – rcmgleite

    답변

    2

    짧은 대답 : 당신은 똑같은 것을 측정하지 않았습니다. 네 자신의 경우 네이티브 Go 웹 서버를 측정했지만 Beanstalk에서는 네이티브 Go 웹 서버를 사용하여 Nginx를 측정했습니다.

    긴 대답 : 당신이 EC2를 사용하는 것처럼

    당신이 단일 인스턴스 구성에 AWS 탄성 콩 줄기를 사용하는 경우, 당신은 동일한 인스턴스를받을 수 있습니다. 단일 인스턴스 Beanstalk 환경 앞에서 Elastic Load Balancer를받지 못합니다.

    Beanstalk을 사용하는 경우 사전 배포 된 nginx가 제공됩니다. Nginx는 특히 m3.medium 인스턴스와 같이 단일 CPU 구성에서 성능에 중요한 영향을 미칩니다.

    측정 한 성능 영향은 절대로 Beanstalk에 의해 직접적으로 야기 된 것은 아니지만 배포 구성에 의해 결정됩니다. 성능 저하를 방지하려면 기본 Go 웹 서버를 사용하도록 선택할 수 있습니다.


    필자의 추론을 뒷받침하기 위해 몇 가지 테스트를 통해 성능을 입증했습니다. 워크로드가 위치한 동일한 데이터 센터의 EC2 m3.medium 인스턴스에서 wrk을 실행하여 다음 번호를 생성했습니다.

    네이티브 EC2 인스턴스와 동일한 Beanstalk에 Go 응용 프로그램을 설치했고 Beanstalk이 사용하는 것과 동일한 구성으로 NGINX 서버를 설치했습니다.

    ./wrk http://<server>/ --duration 20s --connections 300 
    
    Beanstalk m3.medium instance DIRECT: 9230.52 Requests/sec 
    Beanstalk m3.medium instance NGINX: 1502.14 Requests/sec 
    EC2 m3.medium instance DIRECT:  13649.46 Requests/sec 
    EC2 m3.medium instance NGINX:   2489.78 Requests/sec 
    
    +0

    좋은 답변입니다. 나는 나 자신과 비슷한 것을했다. EB 인스턴스에서 다른 포트를 열었고 내 응용 프로그램을 해당 포트에 바인드했습니다 (nginx 무시). 결과적으로 성능은 향상되었지만 독립 실행 형 응용 프로그램만큼 향상되지 않았습니다. 그래서 EB 인스턴스와 관련하여 더 많은 일이 일어나고 있다고 생각합니다. – rcmgleite