服務計算 - 3 | golang web編程學習
CloudGo
框架選擇
Iris: 目前發展最快的Go Web框架。提供完整的MVC功能並且面向未來。
ris自稱是Go語言中所有Web框架最快的,它的特點如下:
- 聚焦高性能
- 健壯的靜態路由支持和通配符子域名支持。
- 視圖系統支持超過5以上模板
- 支持定製事件的高可擴展性Websocket API
- 帶有GC, 內存 & redis 提供支持的會話
- 方便的中間件和插件
- 完整 REST API
- 能定製 HTTP 錯誤
- Typescript編譯器 + 基於瀏覽器的編輯器
- 內容 negotiation & streaming
- 傳送層安全性
- 源碼改變後自動加載
- OAuth, OAuth2 支持27+ API providers
- JSON Web Tokens
Iris是目前最優秀的框架之一,提供完整的WEB組件,且擁有較高的運行速度,所以我選擇Iris進行此次開發。
服務器代碼
package main
import (
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/logger"
"github.com/kataras/iris/middleware/recover"
)
func main() {
app := iris.New()
app.Use(recover.New())
app.Use(logger.New())
//輸出html
// 請求方式: GET
// 訪問地址: http://localhost:9090/welcome
app.Handle("GET", "/welcome", func(ctx iris.Context) {
ctx.HTML("<h1>Welcome</h1>")
})
//輸出字符串
// 類似於 app.Handle("GET", "/ping", [...])
// 請求方式: GET
// 請求地址: http://localhost:9090/ping
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
//輸出json
// 請求方式: GET
// 請求地址: http://localhost:9090/hello
app.Get("/hello", func(ctx iris.Context) {
ctx.JSON(iris.Map{"message": "Hello World!"})
})
app.Run(iris.Addr(":9090")) //9090 監聽端口
}
服務器測試
- 運行服務器:
- 瀏覽器訪問:
- 使用curl對可以正常訪問服務器:
AB測試
- 測試環境:centos7
- 測試請求數:10000
- 測試命令:
ab -n 10000 -c 100 http://localhost:9090/welcome
- 測試結果:
- 測試結果重要參數:
字段 | 含義 |
---|---|
Server Hostname | 服務器主機名 |
Server Port | 服務器端口 |
Document Path | 文件路徑 |
Document Length | 文件大小 |
Concurrency Level | 併發等級 |
Requst per second | 平均每秒的請求個數。服務器併發處理能力的量化描述,單位是reqs/s,指的是在某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐率。 吞吐率是基於併發用戶數的。這句話代表了兩個含義: a、吞吐率和併發用戶數相關。 b、不同的併發用戶數下,吞吐率一般是不同的。 計算公式:總請求數/處理完成這些請求數所花費的時間,即:Request per second=Complete requests/Time taken for tests.這個數值表示當前機器的整體性能,值越大越好。 |
Time per request | 用戶平均的等待時間。 計算公式:總請求數/處理完成這些請求數所花費的時間,即:Request per second=Complete requests/Time taken for tests.這個數值表示當前機器的整體性能,值越大越好。 |
Time per request:across all concurrent requests | 計算公式:處理完成所有請求數所花費的時間/總請求數,即:Time taken for/testsComplete requests. 可以看到,它是吞吐率的倒數。同時,它也等於用戶平均請求等待時間/併發用戶數,即Time per request/Concurrency Level。 |
Connection Times | 表內描述了所有的過程中所消耗的最小、中位、最長時間。 |
Percentage of the requests served within a certain time | 每個百分段的請求完成所需的時間 |