1、何為無損發(fā)布闷叉?
無損發(fā)布就是在應(yīng)用進行發(fā)布升級的時候,不會影響到正在使用系統(tǒng)的用戶脊阴,比如用戶正在進行資料更新握侧,如果這個時候進行升級,系統(tǒng)升級往往需要重啟嘿期,重啟會導(dǎo)致用戶的資料更新失敗品擎。如何做到升級不影響用戶的使用,就是今天我們討論的無損發(fā)布备徐。不會因為系統(tǒng)重啟導(dǎo)致系統(tǒng)數(shù)據(jù)的丟失萄传。
2、如何做到無損發(fā)布蜜猾?
2.1秀菱、首先我們來看看web應(yīng)用的無損發(fā)布,也即Nginx+Tomcat的架構(gòu)模式蹭睡,如下圖:
2.2衍菱、無損發(fā)布的基本思路:
2.2.1、首先Nginx 動態(tài)修改 upstream肩豁,請求不再路由到Tomcat1
2.2.2脊串、等待Tomcat1上面的請求處理完畢
2.2.3、對Tomcat1進行升級
2.2.4清钥、檢查Tomcat1是否升級成功
2.2.5琼锋、再修改Nginx 的upstream,把請求路由到Tomcat1上面
2.2.6祟昭、循環(huán)上面的步驟缕坎,直到所有的Tomcat都升級完畢
2.3、需要解決的技術(shù)問題:
2.3.1从橘、Nginx 動態(tài)修改 upstream:
2.3.1.1念赶、ngx_http_dyups_module模塊能動態(tài)修改upstream
或者
2.3.1.2础钠、通過lua動態(tài)更改upstream
(修改之后,路由到被踢掉的Tomcat上面的請求是否還能繼續(xù)處理叉谜,待驗證旗吁?)
2.3.2、識別Tomcat上面的請求處理完畢(只有等到Tomcat上面的請求處理完畢以后停局,才能對Tomcat進行進行重啟很钓,這樣才能做到無損發(fā)布,否則還是會有部分請求會失敹浴):
2.3.2.1码倦、通過監(jiān)控Tomcat的處理請求的線程的狀態(tài),來判斷現(xiàn)在是否還有請求沒有處理完畢