An Interest In:
Web News this Week
- April 2, 2024
- April 1, 2024
- March 31, 2024
- March 30, 2024
- March 29, 2024
- March 28, 2024
- March 27, 2024
Go high performance http server with Forker
forker
Get high performance http requests with fork process (forker inspired prefork feature in web servers)
prefork is a solution which is also used by other webservers
A server instance is opened for each processor core and incoming requests are shared between these instances
In order to distribute the load more evenly and handle more requests per second, there is a master that starts by the user, which then starts child processes on the other processor cores based on configuration
memory between the different processes is not shared, beacuse goroutines are independent processes
how to install
go get -u github.com/Ja7ad/forker
forker benchmark
forker tested 500 concurrent with 200k http requests
oha -c 500 -n 200000 --latency-correction --disable-keepalive http://localhost:8080
Summary Success rate: 1.0000 Total: 24.4907 secs Slowest: 0.5000 secs Fastest: 0.0004 secs Average: 0.0610 secs Requests/sec: 8166.3762 Total data: 2.10 MiB Size/request: 11 B Size/sec: 87.72 KiBResponse time histogram: 0.000
Get high performance http requests with fork process (forker inspired prefork feature in web servers)
prefork is a solution which is also used by other webservers
A server instance is opened for each processor core and incoming requests are shared between these instances
In order to distribute the load more evenly and handle more requests per second, there is a master that starts by the user, which then starts child processes on the other processor cores based on configuration
memory between the different processes is not shared, beacuse goroutines are independent processes
Benchmark With oha 200k request with 500 concurrent
Summary: Success rate: 1.0000 Total: 24.4907 secs Slowest: 0.5000 secs Fastest: 0.0004 secs Average: 0.0610 secs Requests/sec: 8166.3762 Total data: 2.10 MiB Size/request: 11 B Size/sec: 87.72 KiBResponse time histogram: 0.000 [1] | 0.050 [82408] | 0.100 [98705] | 0.150 [16180] | 0.200 [2245] | 0.250 [361] | 0.300 [59] | 0.350 [33] | 0.400 [3] | 0.450 [1] | 0.500 [4] |Latency distribution: 10% in 0.0291 secs 25% in 0.0404 secs 50% in 0.0557 secs 75% in 0.0754 secs 90% in 0.0989 secs 95% in 0.1170 secs 99% in 0.1581 secsDetails (average, fastest, slowest): DNS+dialup: 0.0259 secs, 0.0001 secs, 0.3010 secs DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0239 secs
How to Install?
go get -u github.com/Ja7ad/forker
Example
package mainimport ( "github.com/Ja7ad/forker" "log" "net/http")func main() { srv := &http.Server{ Handler: GreetingHandler(), } f := forker.New(srv) log.Fatalln(f.ListenAndServe(":8080"))}func GreetingHandler() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("greeting!!!")) }}
Original Link: https://dev.to/gopher/go-high-performance-http-server-with-forker-32o1
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To