Browse Source

v0.9.3 - add prefork test (#5414)

Fenny 5 years ago
parent
commit
0162c3a85e

+ 22 - 0
frameworks/Go/fiber/benchmark_config.json

@@ -22,6 +22,28 @@
       "display_name": "Fiber",
       "notes": "",
       "versus": "go"
+    },
+    "prefork": {
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/update?queries=",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "MySQL",
+      "framework": "Fiber",
+      "language": "Go",
+      "flavor": "None",
+      "orm": "Raw",
+      "platform": "None",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Fiber-prefork",
+      "notes": "",
+      "versus": "go"
     }
   }]
 }

+ 12 - 0
frameworks/Go/fiber/fiber-prefork.dockerfile

@@ -0,0 +1,12 @@
+FROM golang:1.13
+
+ENV GO111MODULE on
+WORKDIR /fiber
+
+COPY ./src /fiber
+
+RUN go mod download
+
+RUN go build -o server server.go
+
+CMD ./server -prefork

+ 1 - 2
frameworks/Go/fiber/src/go.mod

@@ -4,6 +4,5 @@ go 1.13
 
 require (
 	github.com/go-sql-driver/mysql v1.5.0
-	github.com/gofiber/fiber v0.8.1
-	github.com/valyala/fasthttp v1.8.0
+	github.com/gofiber/fiber v0.9.3
 )

+ 2 - 2
frameworks/Go/fiber/src/go.sum

@@ -2,8 +2,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/gofiber/fiber v0.8.1 h1:RFJyD708eCfYj/L9iJCOUj+tunTL+H7vMf+wyBoKDAM=
-github.com/gofiber/fiber v0.8.1/go.mod h1:H4p5UQjAUsewuosS8vFHQwMJMe1oUrX1QQgvDNx8s20=
+github.com/gofiber/fiber v0.9.3 h1:5gHCe56XzfbUwWI89AO1hx/TBPbpt5Bjfv8khOtbv3k=
+github.com/gofiber/fiber v0.9.3/go.mod h1:6CeMbldUo9VM+ffNbBmtqC1QnJ8qfQWqvkT00VK/u2s=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
 github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=

+ 56 - 67
frameworks/Go/fiber/src/server.go

@@ -12,9 +12,25 @@ import (
 	"github.com/gofiber/fiber"
 )
 
+func main() {
+	initHandlers()
+
+	app := fiber.New()
+	app.Server = "Fiber"
+
+	app.Get("/json", jsonHandler)
+	app.Get("/db", dbHandler)
+	app.Get("/queries", queriesHandler)
+	app.Get("/update", updateHandler)
+	app.Get("/plaintext", plaintextHandler)
+
+	app.Listen(8080)
+}
+
 const (
-	WorldCount = 10000
-	Text       = "Hello, World!"
+	worldcount       = 10000
+	helloworld       = "Hello, World!"
+	connectionstring = "benchmarkdbuser:benchmarkdbpass@tcp(tfb-database:3306)/hello_world"
 )
 
 var (
@@ -24,49 +40,57 @@ var (
 	stmtFortuneSelect *sql.Stmt
 )
 
-// JSON struct for json serialization
-type JSON struct {
+type Message struct {
 	Message string `json:"message"`
 }
 
-// World struct for single database query
+type Worlds []World
+
 type World struct {
 	Id           int32 `json:"id"`
 	RandomNumber int32 `json:"randomNumber"`
 }
 
-// Worlds struct for multiple database queries
-type Worlds []World
+type Fortune struct {
+	Id      int32  `json:"id"`
+	Message string `json:"message"`
+}
 
-func main() {
-	connectDB()
-	app := fiber.New()
-	app.Server = "Fiber"
-	app.Get("/json", jsonSerialization)
-	app.Get("/db", singleDatabaseQuery)
-	app.Get("/queries", multipleDatabaseQueries)
-	app.Get("/update", databaseUpdates)
-	app.Get("/plaintext", plainText)
-	app.Listen(8080)
+var JSONpool = sync.Pool{
+	New: func() interface{} {
+		return new(Message)
+	},
 }
 
-// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#json-serialization
-func jsonSerialization(c *fiber.Ctx) {
-	j := AcquireJSON()
-	j.Message = Text
-	c.Json(j)
-	ReleaseJSON(j)
+func AcquireJSON() *Message {
+	return JSONpool.Get().(*Message)
+}
+func ReleaseJSON(json *Message) {
+	json.Message = ""
+	JSONpool.Put(json)
 }
 
-// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#single-database-query
-func singleDatabaseQuery(c *fiber.Ctx) {
+func initHandlers() {
+	db, _ = sql.Open("mysql", connectionstring)
+	db.SetMaxIdleConns(runtime.NumCPU() * 2)
+	db.SetMaxOpenConns(runtime.NumCPU() * 2)
+	stmtWorldSelect, _ = db.Prepare("SELECT id, randomNumber FROM World WHERE id = ?")
+	stmtWorldUpdate, _ = db.Prepare("UPDATE World SET randomNumber = ? WHERE id = ?")
+	stmtFortuneSelect, _ = db.Prepare("SELECT id, message FROM Fortune")
+}
+
+func jsonHandler(c *fiber.Ctx) {
+	json := AcquireJSON()
+	json.Message = helloworld
+	c.Json(json)
+	ReleaseJSON(json)
+}
+func dbHandler(c *fiber.Ctx) {
 	var json World
 	stmtWorldSelect.QueryRow(RandomWorld()).Scan(&json.Id, &json.RandomNumber)
 	c.Json(json)
 }
-
-// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#multiple-database-queries
-func multipleDatabaseQueries(c *fiber.Ctx) {
+func queriesHandler(c *fiber.Ctx) {
 	n := QueriesCount(c)
 	worlds := make([]World, n)
 	for i := 0; i < n; i++ {
@@ -75,9 +99,7 @@ func multipleDatabaseQueries(c *fiber.Ctx) {
 	}
 	c.Json(Worlds(worlds))
 }
-
-// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#database-updates
-func databaseUpdates(c *fiber.Ctx) {
+func updateHandler(c *fiber.Ctx) {
 	n := QueriesCount(c)
 	worlds := make([]World, n)
 	for i := 0; i < n; i++ {
@@ -99,46 +121,13 @@ func databaseUpdates(c *fiber.Ctx) {
 	txn.Commit()
 	c.Json(Worlds(worlds))
 }
-
-// https://github.com/TechEmpower/FrameworkBenchmarks/wiki/Project-Information-Framework-Tests-Overview#plaintext
-func plainText(c *fiber.Ctx) {
-	c.SendString(Text)
-}
-
-// ************************
-//    Helper functions
-// ************************
-
-func connectDB() {
-	db, _ = sql.Open("mysql", "benchmarkdbuser:benchmarkdbpass@tcp(tfb-database:3306)/hello_world")
-	db.SetMaxIdleConns(runtime.NumCPU() * 2)
-	db.SetMaxOpenConns(runtime.NumCPU() * 2)
-	stmtWorldSelect, _ = db.Prepare("SELECT id, randomNumber FROM World WHERE id = ?")
-	stmtWorldUpdate, _ = db.Prepare("UPDATE World SET randomNumber = ? WHERE id = ?")
-	stmtFortuneSelect, _ = db.Prepare("SELECT id, message FROM Fortune")
-}
-
-// JSONpool :
-var JSONpool = sync.Pool{
-	New: func() interface{} {
-		return new(JSON)
-	},
-}
-
-// AcquireJSON returns new message from pool
-func AcquireJSON() *JSON {
-	return JSONpool.Get().(*JSON)
-}
-
-// ReleaseJSON resets the message and return it to the pool
-func ReleaseJSON(j *JSON) {
-	j.Message = ""
-	JSONpool.Put(j)
+func plaintextHandler(c *fiber.Ctx) {
+	c.SendString(helloworld)
 }
 
 // RandomWorld :
 func RandomWorld() int {
-	return rand.Intn(WorldCount) + 1
+	return rand.Intn(worldcount) + 1
 }
 
 // QueriesCount :