[WIP] Deploy Web App with zero downtime (use atomic symlink / Atomic symlinks)

使用原子鏈結佈署 web app 減少服務 downtime
Deploy Web App with zero downtime (use atomic symlink)

Why?

web app 通常會透過 web server (nginx or apace) 提供服務
簡單來說:在更新程式或資料夾時,會造成 web server 短暫的中斷或找不到檔案

How

nginx or apache (web server) 通常會指向 web app 目錄 my-web-app

例如

/project/my-web-app

如果想在線上保留多個版本 (新舊版號),或是想在更新版本時減少 downtime
可以讓 web server 固定指向一個 symbolic link,例如 current

/releases/001
/releases/002
/releases/003
/releases/004

ln -nfs /releases/003 current
ln -nfs /releases/004 release
mv -Tf release current



# What?

zero downtime?

(chat gpt)

在現代的軟體開發中,系統更新是不可避免的,但是更新過程中可能會導致系統暫停運行,進而對使用者造成不便。為了解決這個問題,symbolic link zero downtime(符號連結零停機)技術應運而生。本文將介紹 symbolic link zero downtime 技術的背景、原理和實現方法。

背景

在傳統的系統更新方式中,通常需要暫停服務或者停止應用程序才能進行更新。這樣的做法對用戶體驗和業務連續性都會造成影響,而 symbolic link zero downtime 技術就是為了解決這個問題而出現的。這種技術可以實現在更新過程中,不中斷現有的服務,讓用戶繼續正常使用。

原理

Symbolic link zero downtime 技術的核心原理是使用符號連結。符號連結是一種指向另一個檔案或目錄的文件,相當於是一個快捷方式。在更新過程中,我們可以通過修改符號連結來實現零停機更新。

例如,假設我們有一個應用程序的目錄,目錄名稱為 /var/www/myapp,目前的符號連結指向的是版本1的應用程序目錄 /var/www/myapp-v1。現在我們要進行更新,首先我們在 /var/www 目錄下建立一個新的應用程序目錄 /var/www/myapp-v2,然後將新版本的應用程序文件複製到這個目錄中。接下來,我們將 /var/www/myapp 這個符號連結指向新版本的目錄 /var/www/myapp-v2,這樣當用戶訪問應用程序時,就會讀取新版本的文件,而不會中斷現有的服務。

實現方法

在實際應用中,Symbolic link zero downtime 技術的實現方法有很多種。其中一種比較常見的方法是使用腳本自動化更新過程。這種方法可以通過一個腳本來實現整個更新過程,包括建立新版本的目錄、複製文件、修改符號連結等。另外,也可以使用… (未完)

(chat gpt)

對於 symbolic link zero downtime 技術,還有一種更進一步的發展,稱為 atomic symbolic link。本文將介紹 atomic symbolic link 技術的背景、原理和優點。

背景

Symbolic link zero downtime 技術的核心思想是通過修改符號連結,實現在更新過程中不中斷現有服務。但是,如果在修改符號連結的過程中出現故障,就可能會導致現有服務中斷。為了解決這個問題,atomic symbolic link 技術應運而生。

原理

Atomic symbolic link 技術的核心原理是使用原子操作。在計算機科學中,原子操作是指一個不可被中斷的操作。如果一個操作是原子的,那麼要麼它會完全執行,要麼它根本不會執行。

在 atomic symbolic link 技術中,我們通過原子操作來實現符號連結的更新。具體來說,我們可以通過 ln 命令的 -T 選項和 -f 選項來實現原子操作。-T 選項表示目標應該是一個文件,而不是一個目錄;-f 選項表示如果目標文件已經存在,則強制進行更新。

例如,假設我們有一個應用程序的目錄,目錄名稱為 /var/www/myapp,目前的符號連結指向的是版本1的應用程序目錄 /var/www/myapp-v1。現在我們要進行更新,首先我們在 /var/www 目錄下建立一個新的應用程序目錄 /var/www/myapp-v2,然後將新版本的應用程序文件複製到這個目錄中。接下來,我們使用下面的命令進行符號連結的更新:

bash

ln -sfT /var/www/myapp-v2 /var/www/myapp

這樣當用戶訪問應用程序時,就會讀取新版本的文件,而不會中斷現有的服務。同時,由於使用了原子操作,即使在更新過程中出現故障,也不會導致現有服務中斷。

優點

相較於傳統的 symbolic link zero downtime 技術,atomic symbolic link 技術有以下優點:

安全性更

由於 atomic symbolic link 技術使用了原子操作,因此在更新過程中出現故障的概率更小。即使出現故障,也不會導致現有服務中斷。這提高了系統的可靠性和安全性。

可維護性更好

atomic symbolic link 技術使得更新過程更加清晰、簡單。更新過程中只需要執行一個命令,就能夠完成符號連結的更新。這樣可以減少人為出錯的概率,提高系統的可維護性。

更高的效率

atomic symbolic link 技術的更新過程更加快速、高效。由於使用了原子操作,符號連結的更新可以在瞬間完成,不會影響現有服務的運行。

總結

atomic symbolic link 技術通過使用原子操作,實現了在更新過程中不中斷現有服務的目的。相較於傳統的 symbolic link zero downtime 技術,atomic symbolic link 技術在安全性、可維護性和效率方面都有優勢。隨著計算機科學技術的不斷發展,我們相信這種技術在實際應用中將發揮更加重要的作用。