我們用BotKit開發機器人,現在我們嘗試用最少的部署停機時間來解決問題。Slack機器零停機部署
在此服務器上運行服務器和碼頭工具容器。在容器中運行與RTM-server(Slack)連接的bot-app實例。 當我開始部署bot-app的新版本(v2)時,我希望得到零停機時間,用戶不應該看到「bot離線」。
部署腳本運行與殭屍應用程序的新版本,第二泊塢窗容器。而bot-app也連接到RTM服務器。這樣,當兩個應用程序都運行時,幾秒鐘連接到RTM服務器並響應用戶命令(並且用戶將看到他的命令的兩個答案)。
我可以得到,如果我們想要獲得零停機時間,而另一方面,我們要防止用戶在同一時間兩個實例互動,一方面有什麼最優決策?
決策1: 爲了允許小的機會發生碰撞的可能性,當兩個實例將用戶命令進行響應。
決定2: 摒棄零停機時間部署。在這種情況下,部署腳本首先停止第一個docker-container,然後啓動另一個。該應用不會響應用戶命令,在停止當前版本的應用和完全啓動應用的新版本之間發送。
決策3: 通過並行運行電流和應用或互斥的新版本的相互作用。一般原理: 1)應用程序的當前版本正在運行 2)部署腳本啓動應用程序的新版本 3)我時間,當應用程序的新版本差不多用完,準備連接到RTM服務器,發送到當前版本的應用程序命令關閉RTM連接。 4)當前版本的應用程序關閉RTM連接 5)新版本的應用程序打開RTM連接
我認爲還有其他好的解決方案。
您如何在您的應用程序中解決此問題?
謝謝smarx!有非常好的解決方案!與第一個變體不同,它看起來不那麼複雜和可靠。 – vovan