服務計算 - 3 | CloudGo

服務計算 - 3 | golang web編程學習

CloudGo


框架選擇

Iris: 目前發展最快的Go Web框架。提供完整的MVC功能並且面向未來。

ris自稱是Go語言中所有Web框架最快的,它的特點如下:

  1. 聚焦高性能
  2. 健壯的靜態路由支持和通配符子域名支持。
  3. 視圖系統支持超過5以上模板
  4. 支持定製事件的高可擴展性Websocket API
  5. 帶有GC, 內存 & redis 提供支持的會話
  6. 方便的中間件和插件
  7. 完整 REST API
  8. 能定製 HTTP 錯誤
  9. Typescript編譯器 + 基於瀏覽器的編輯器
  10. 內容 negotiation & streaming
  11. 傳送層安全性
  12. 源碼改變後自動加載
  13. OAuth, OAuth2 支持27+ API providers
  14. 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 監聽端口
}

服務器測試

  1. 運行服務器:
    運行服務器
  2. 瀏覽器訪問:

    瀏覽器訪問

  3. 使用curl對可以正常訪問服務器:

    clipboard.png


AB測試

  • 測試環境:centos7
  • 測試請求數:10000
  • 測試命令:ab -n 10000 -c 100 http://localhost:9090/welcome
  • 測試結果:

AB測試

  • 測試結果重要參數:
字段 含義
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 每個百分段的請求完成所需的時間

net/http源碼閱讀

NET/HTTP源碼閱讀


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章