昨天和團隊一起討論了使用零停機時間部署來支持我們的單頁應用程序的可能性。單頁應用程序(SPA)的零停機/藍綠色部署
在討論它時,我們爲它確定了一個邊緣案例。 用戶在瀏覽器中加載頁面後,無法從內存中刪除,直到他重新加載頁面。這意味着如果用戶加載頁面並開始使用網站(例如開始輸入像我現在這樣做的長篇文章),那麼在他重新加載頁面之前,他無法收到它的更新版本。
我們可以忽略用戶在瀏覽器中看到舊應用程序版本的事實,但下面列出了2點。
- 如果我們引入一個突兀的變化是用來服務的水療HTTP API,則用戶將不能夠救他的文章(數據丟失!)或執行其他後端相關行動時,可以收到一些其他錯誤。
- 當用戶在不重新加載SPA的情況下導航到新頁面時,他可以收到下一頁的模板或與外部舊容器不兼容的某個控件的模板。它可能會破壞標記或應用程序邏輯。
- 我們不能強迫用戶重新登錄,因爲他可能正在鍵入他的文章,這只是一個糟糕的用戶體驗。
把所有論文幾點考慮一個可以提出以下解決方案:
- 用戶1個加載SPA到他的瀏覽器V1。
- 與auth令牌一起,版本信息被髮送到瀏覽器(例如使用JWT)。
- 我們想要部署我們的應用程序的V2版本。我們啓動了v2版本,但不禁用v1。
- 用戶2將SPA的v2加載到他的瀏覽器中
- 用戶1轉到SPA的下一頁。負載均衡器檢查其令牌中的版本信息,並將用戶1的流量路由到v1服務器。
- 用戶2以相同的方式路由到v2。
- 用戶1註銷應用程序並關閉瀏覽器。
- 用戶1登錄回來 - 這次他收到v2。
- v1應用程序長時間沒有收到任何流量後就會處理掉。
然而,在這種方法中,可能有多個版本存活,超過2個(例如,如果用戶在一整天或兩天內保持聯機狀態)。這意味着我們將無法將數據庫遷移到新模式,直到最後一個用戶註銷(圖像如何可用於Facebook等網站)。然而,擁有多個版本並不是問題,Docker和Rancher等工具允許我們輕鬆完成。
也在第7步。用戶需要重新加載頁面或關閉瀏覽器 - 否則他仍然會與v1一起工作,我們不能強制他到下一個版本。
我現在的問題是你用什麼方法做單頁面應用的零宕機/藍綠部署?
當您將流量切換到「綠色」版本時,尤其是現有的「藍色」客戶端應用程序時,如何管理應用程序的「藍色」版本的生命週期。
您是否已經解決了這些問題,您是否知道其他解決方案?
是的,我知道這是藍綠色部署,但更確切的問題是,它如何與單頁應用程序一起工作,在更新您的應用程序時無法強制用戶升級其客戶端應用程序服務器部分 – gerichhome