0%

[Day28] Tableau 輕鬆學 - TabPy 備份與還原

前言

在勒索病毒盛行的年代,為資訊系統做好備份是最基本的工作,有效的備份除了可以抵擋病毒的攻擊,同時可以降低伺服器主機因意外毀損而導致無法快速重建系統的風險。同樣地,TabPy 的 Model 也是可以備份起來,當有需要的時候可以直接還原,省去重新佈署的程序。至於應該要將甚麼檔案做備份,便是這裡想要分享的主題。

Models

當我們將 Python 函式佈署至 TabPy Server 的時候,TabPy 會執行兩個步驟

  1. 更新 Models 資料庫:這樣在 http://localhost:9004 的 Deployed Models 中才會看到新增的 Model 資訊。
  2. 將新增的 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_BOOL1 版的 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
2
C:\Users\wrxue\Tableau-Python-Server\Lib\site-packages\tabpy\tabpy_server\state.ini
C:\Users\wrxue\Tableau-Python-Server\Lib\site-packages\tabpy\tabpy_server\query_objects

還原

若要將備份還原,遵守一個原則「東西哪裡拿來就哪裡放回去」,將備份中的兩個項目放回 \Lib\site-packages\tabpy\tabpy_server 即可,非常容易。

結語

備份不是一件難事,困難的是要知道應該備份甚麼東西,這裡將個人為 TabPy 備份的經驗分享給讀者,讓讀者可以少走冤枉路。

很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵