這是一個(gè)不兼容的變更。怎樣才能減少停機(jī)時(shí)間?讓我們來(lái)看看解決方案:
1.我們始于數(shù)據(jù)庫(kù)遷移:生成兩個(gè)新字段,然后將舊的名字用空格分成兩部分,填充到這兩個(gè)新字段中。|日的名字只是項(xiàng)目初始的選擇,現(xiàn)在并不是非常適合,這是我們想要改變的原因。
這個(gè)變更到現(xiàn)在為止還是向下兼容的,因?yàn)槲覀儾](méi)有移除名字字段,我們只是新建了兩個(gè)還沒(méi)有用到的新字段罷了。
2.接下來(lái),我們修改負(fù)載均衡的配置,從而使外界不能訪問(wèn)我們的第二個(gè)服務(wù)器。第一個(gè)服務(wù)器依舊當(dāng)仁不讓,因?yàn)?日的服務(wù)器代碼仍然可以訪問(wèn)I曰的名字字段。
3.現(xiàn)在第二個(gè)服務(wù)器沒(méi)有負(fù)載了,我們可以隨意升級(jí)。
升級(jí)完成以后,我們啟動(dòng)它。因?yàn)槭褂昧藘蓚€(gè)新字段,它也工作得很好。
4.此時(shí),我們可以再次切換負(fù)載均衡的配置,使第一個(gè)服務(wù)器變得不可用,而由第二個(gè)服務(wù)器提供服務(wù)。當(dāng)?shù)谝粋€(gè)服務(wù)器斷線的時(shí)候,我們也可以照樣升級(jí)它。再次啟動(dòng)它以后,通過(guò)恢復(fù)負(fù)載均衡的配置讓兩個(gè)服務(wù)器都可以被訪問(wèn)。
現(xiàn)在,這個(gè)變更就差不多完成了。剩下的唯一事情就是移除舊的名字字段,因?yàn)闆](méi)有代碼會(huì)再去使用它。
就像我們所看到的,為了正常工作,滾動(dòng)升級(jí)需要預(yù)先的大量工作。如果你的企業(yè)本來(lái)就有停機(jī)計(jì)劃,在停機(jī)期間升級(jí)要容易得多。國(guó)際企業(yè)可能并沒(méi)有合適的時(shí)間窗口來(lái)處理升級(jí),滾動(dòng)升級(jí)可能是唯一的選擇。