前言
在勒索病毒盛行的年代,為資訊系統做好備份是最基本的工作,有效的備份除了可以抵擋病毒的攻擊,同時可以降低伺服器主機因意外毀損而導致無法快速重建系統的風險。同樣地,TabPy 的 Model 也是可以備份起來,當有需要的時候可以直接還原,省去重新佈署的程序。至於應該要將甚麼檔案做備份,便是這裡想要分享的主題。
Models
當我們將 Python 函式佈署至 TabPy Server 的時候,TabPy 會執行兩個步驟
- 更新 Models 資料庫:這樣在 http://localhost:9004 的 Deployed Models 中才會看到新增的 Model 資訊。
- 將新增的 Model 透過 cloudpickle 套件以 2 進制檔案儲存下來:啟動 TabPy Server 的過程中會讀取這些檔案並轉換為可呼叫的 Model,這也是我們重啟 TabPy 不需要重新佈署的原因。
Models 相關的資料都是以檔案型式儲存下來,使我們備份工作簡單許多。但個人認為美中不足的是,我們無法從這些檔案中取得原始程式碼,這意味著我們用來佈署的程式碼同樣也需要備份起來。
備份
我們已經知道當佈署一個 Model 的時候會影響到兩個檔案,因此只需要備份這兩個檔案即可。
state.ini
state.ini
就是 Models 的資料庫,用來記錄 Models 的相關資訊。TabPy Server 啟動時會先讀取此檔案,再去尋找對應的 cloudpickle 檔案轉為可呼叫 Model
此檔案位於虛擬環境目錄下的 \Lib\site-packages\tabpy\tabpy_server
目錄
1 | \Lib\site-packages\tabpy\tabpy_server\state.ini |
pickle_archive
pickle_archive
為 TabPy 透過 cloudpickle 套件將 Model 儲存的檔案。路徑格式如下,以 Model 名稱與版次來切分不同的 pickle_archive
檔案
1 | \query_objects\{model_name}\{model_version}\pickle_archive |
model_name
:Model 的名稱。model_version
:Model 的版次。
例如:test_SCRIPT_BOOL
第 1
版的 pickle_archive
所在路徑應為
1 | \query_objects\test_SCRIPT_BOOL\1\pickle_archive |
這樣一來,所有 Models 的 pickle_archive
檔案都會儲存於 query_objects
目錄下,因此我們直接備份這整個目錄即可,此目錄也同樣位於 \Lib\site-packages\tabpy\tabpy_server
目錄。
簡而言之,我們只需要備份一個檔案 (state.ini
) 與一個目錄 (query_objects
)。
範例
若我們的虛擬環境名稱為 Tableau-Python-Server
,且虛擬環境目錄位於 C:\Users\wrxue\
,則只需備份以下兩個項目
1 | C:\Users\wrxue\Tableau-Python-Server\Lib\site-packages\tabpy\tabpy_server\state.ini |
還原
若要將備份還原,遵守一個原則「東西哪裡拿來就哪裡放回去」,將備份中的兩個項目放回 \Lib\site-packages\tabpy\tabpy_server
即可,非常容易。
結語
備份不是一件難事,困難的是要知道應該備份甚麼東西,這裡將個人為 TabPy 備份的經驗分享給讀者,讓讀者可以少走冤枉路。