Я пытаюсь сравнить простой HTTP-сервер hello world в go
. я сделал 2 испытания:Есть ли проблемы с производительностью при запуске приложений Golang на эластичном бобовом стебле?
- Использование Amazon EC2 - m3.medium экземпляр
- Использование Amazon Elastic бобовый стебель - также с одним экземпляром m3.medium
На первой установке, я мог до 18k req/sec. На втором, 1.6k req/sec.
Исходный код: (от: 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
Кроме того, одна важная вещь: Elastic Beanstalk всегда добавляет Nginx в качестве обратного прокси-сервера для его применения (и для Go приложений, которые я не был в состоянии удалить его) На первой установке , nginx вообще не было.
Еще одно отличие состоит в том, что ваша настройка EB, скорее всего, связана с балансировкой упругих нагрузок. «Эластичная» часть означает, что она должна масштабироваться с трафиком, но я видел случаи, когда внезапный всплеск трафика (например, с тестом производительности) может вызвать проблемы до тех пор, пока ELB не поймает. – Brian
Согласен с Брайаном. Для проверки гипотез вы могли сравнить 1) m3.medium за ELB, 2) m3.medium + ELB после, скажем, 15 минут устойчивой нагрузки, 3) m3.medium + ELB + nginx. – twotwotwo
Моя настройка EB - это единственный экземпляр, но хорошая точка – rcmgleite