[TOC]
# 熱升級是什么?
熱升級是什么呢?了解nginx的同學都知道,nginx是支持熱升級的,可以用老進程服務先前鏈接的鏈接,使用新進程服務新的鏈接,即在不停止服務的情況下完成系統的升級與運行參數修改。那么熱升級和熱編譯是不同的概念,熱編譯是通過監控文件的變化重新編譯,然后重啟進程,例如`bee run`就是這樣的工具
# 熱升級有必要嗎?
很多人認為HTTP的應用有必要支持熱升級嗎?那么我可以很負責的說非常有必要,不中斷服務始終是我們所追求的目標,雖然很多人說可能服務器會壞掉等等,這個是屬于高可用的設計范疇,不要搞混了,這個是可預知的問題,所以我們需要避免這樣的升級帶來的用戶不可用。你還在為以前升級搞到凌晨升級而煩惱嘛?那么現在就趕緊擁抱熱升級吧。
# grace模塊
grace模塊是beego新增的一個獨立支持熱重啟的模塊。主要的思路來源于: http://grisha.org/blog/2014/06/03/graceful-restart-in-golang/
# 如何使用熱升級
```
import(
"log"
"net/http"
"os"
"strconv"
"github.com/astaxie/beego/grace"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("WORLD!"))
w.Write([]byte("ospid:" + strconv.Itoa(os.Getpid())))
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/hello", handler)
err := grace.ListenAndServe("localhost:8080", mux1)
if err != nil {
log.Println(err)
}
log.Println("Server on 8080 stopped")
os.Exit(0)
}
```
打開兩個終端
一個終端輸入:`ps -ef|grep 應用名`
一個終端輸入請求:`curl "http://127.0.0.1:8080/"`
熱升級
kill -HUP 進程ID
打開一個終端輸入請求:`curl "http://127.0.0.1:8080/?sleep=0"`
- 寫在前面的話
- 第0章 beego 簡介
- 0.1 為beego貢獻
- 0.2 發布版本
- 0.3 升級指南
- 第1章 安裝升級
- 1.1 bee工具的使用
- 第2章 快速入門
- 2.1 新建項目
- 2.2 路由設置
- 2.3 Controller運行機制
- 2.4 Model邏輯
- 2.5 View編寫
- 2.6 靜態文件處理
- 第3章 beego的MVC架構
- 3.1 Model設計
- 3.1.1 概述
- 3.1.2 ORM使用
- 3.1.3 CRUD操作
- 3.1.4 高級查詢
- 3.1.5 原生SQL查詢
- 3.1.6 構造查詢
- 3.1.7 事物處理
- 3.1.8 模型定義
- 3.1.9 命令模式
- 3.1.10 測試用例
- 3.1.11 自定義字段
- 3.1.12 FAQ
- 3.2 View設計
- 3.2.1 模板語法指南
- 3.2.2 模板處理
- 3.2.3 模板函數
- 3.2.4 靜態文件處理
- 3.2.5 模板分頁處理
- 3.3 Controller設計
- 3.3.1 參數配置
- 3.3.2 路由設置
- 3.3.3 控制器函數
- 3.3.4 XSRF過濾
- 3.3.5 請求數據處理
- 3.3.6 session 控制
- 3.3.7 過濾器
- 3.3.8 flash 數據
- 3.3.9 URL構建
- 3.3.10 多種格式數據輸出
- 3.3.11 表單數據驗證
- 3.3.12 錯誤處理
- 3.3.13 日志處理
- 第4章 beego的模塊設計
- 4.1 session 模塊
- 4.2 grace 模塊
- 4.3 cache 模塊
- 4.4 logs 模塊
- 4.5 httplib 模塊
- 4.6 context 模塊
- 4.7 toolbox 模塊
- 4.8 config 模塊
- 4.9 i18n 模塊
- 第5章 beego高級編程
- 5.1 進程內監控
- 5.2 API自動化文檔
- 第6章 應用部署
- 6.1 獨立部署
- 6.2 Supervisor部署
- 6.3 Nginx 部署
- 6.4 Apache 部署
- 第7章 第三方庫
- 第8章 應用例子
- 8.1 在線聊天室
- 8.2 短域名服務
- 8.3 Todo列表
- 第9章 FAQ