時間:2018年8月
坐標:浙江省杭州市
概述:鄙人才疏學淺,了解到不停機部署方案有熱加載、熱部署、集群分批部署三種方式,這里只針對這三種方式進行討論。
一、熱加載
原理:熱加載的實現原理主要依賴jvm的類加載機制,在運行時對被修改過的類進行重新載入。
實現方式:在容器啟動的時候起一條后台線程,定時的檢測類文件的時間戳變化,如果類的時間戳變掉了,則將類重新載入。
適用場景:熱加載會直接修改jvm中的字節碼,這種方式對既有代碼行為的影響難以控制,風險較大,幾乎不會在生產環境使用該方案。
二、熱部署
原理:熱部署是指在服務器運行時重新部署項目,它是直接重新加載整個應用,這種方式會釋放內存,比熱加載更加干凈徹底,但同時也更費時間。
實現方式:Weblogic、tomcat都可以通過配置支持熱部署,但主要用於開發測試環境,較少應用於生產環境。
適用場景:熱部署大大簡化了發布操作,在開發和測試環境使用很普遍;但由於開通熱部署后會增大系統開銷,因此較少在生產環境使用。
三、集群分批部署
原理:利用nginx、apache等代理服務器自動對后端服務器的有效性進行判斷,轉發請求到有效的服務器上。在此基礎上對后端服務器先后逐個更新,達到不停機部署的目的。
實現方式:在集群的前端代理服務器上配置有效性檢測和自動剔除失效的后端服務器。
適用場景:適用於多台后端服務器的集群環境,該方案普遍應用於生產環境。
方案對比:
方案名稱 |
優點 |
缺點 |
適用的環境 |
熱加載 |
|
1. 直接修改jvm中的字節碼,風險較高。 2. 需要開發監控和加載服務。 |
一般用於重啟速度較慢的測試環境,基本不會應用於生產環境。 |
熱部署 |
|
一般用於開發和測試環境,較少應用於生產環境。 |
|
集群分批部署 |
|
普遍應用於生產環境 |
方案選擇:
基於安全方面的考慮,我們建議選擇“集群分批部署”的方案。
集群分批部署的原型
架構圖如下:
- Nginx上配置上游服務器,示例如下:
原型驗證
- 目的:驗證並發訪問時,剔除或停止某個應用服務器,請求會不會丟失。
- 過程:
a) 編寫應用程序,應用的服務端即時打印接收到的請求,並返回給前端jsp頁面,前端jsp頁面收到后也打印出請求信息。
b) 關鍵代碼:
c)
d)
e) 部署該應用到兩個tomcat:192.168.8.112:1880 和 192.168.8.112:28080。
f) 模擬3個用戶分別不間斷地發送1萬個請求給服務器。
g) 在請求發送的過程中,修改nginx的配置文件ngxin.conf,剔除其中一個服務器,然后重新加載配置文件。
h) 在請求發送的過程中,對其中一個tomcat進行關閉,1分鍾后重啟。
i) 統計服務端的接收到的請求總數,統計值為30000。
j) 統計前端jsp頁面接收到請求總數,統計值為30000。
3.結論:在集群運行過程中,主動剔除,或直接停止某個應用節點做發布,請求不會丟失。