這裡主要是介紹一下tars的服務發佈過程。發佈包上傳就不介紹了,直接介紹服務發佈。
詳細步驟如下:
1.web管理臺發起發佈服務請求: add_task
<code>
{"serial":true,"items":[{"server_id":"27","command":"patch_tars","parameters":{"patch_id":"113","bak_flag":false,"update_text":""}}]}/<code>
web管理臺將請求發給tarsAdminRegistry,然後tarsAdminRegistry插入一條記錄到t_task_item、t_task兩個表。
2.然後tarsAdminRegistry調用setTaskItemInfo接口設置相關信息(主要是更新t_task_item表的status、start_time)然後發送應答包:
<code>{"data":"xxxxxx","ret_code":200,"err_msg":""}/<code>
⚠️注意:web管理臺定期發起【getTaskRsp查詢狀態】,然後將結果反饋給web頁面
3.然後tarsAdminRegistry調用batchPatch,然後調用業務節點上的tars.tarsnode.NodeObj.patchPro接口,業務節點上的tarsnode過來查詢合法的ip名單列表(根據tars .tarsAdminRegistr.AdminRegObj,tars.tarsregistry.AdminRegObj查詢它他們對應的ip
作為合法的下發指令ip;)不在這個列表中的ip不允許做:啟動、發佈、停止指令。
4.然後tarsnode調用tars.tarsregistry.ReigstryObj.updateServer 更新服務狀態inactive 【t_server_conf表】
5.然後業務節點tarsnode調用tars.tarsconfig.ConfigObj.ListConfig接口【從t_config_files表中獲取相應的配置文件名】然後業務節點tarsnode調用tars.tarspatch.PatchObj.listFileInfo 接口,拿到新的發佈包文件路徑之後,再發起tars.tarspatch.PatchObj.download下發發佈包到業務的機器上。
6.1 業務節點tarsnode調用tars.tarsregisry.RegisryObj.updatePatchResult【t_server_conf】
6.2 業務節點tarsnode調用tars.tarsregistry.RegistryObj.updateServer【t_server_conf status=active】
6.3 調用tars.tarsAdminRegistry.AdminRegObj.updatePatchLog 接口更新【t_server_patch publish=1】
7.1 web管理臺下發調用tars.tarsAdminRegistry.AdminRegObj.restartServer接口啟動服務:
7.2 然後AdminRegistry調用業務的tars.tarsnode.NodeObj.stopServer 接口停服
7.3tarsnode收到停服指令之後更新調用tars.tarsregistry.RegistryObj.updateServer更新服務狀態為deactivating
7.4 tarsnode收到停服指令之後更新調用tars.tarsregistry.RegistryObj.updateServer更新服務狀態為inactive
8.然後AdminRegistry調用業務的tars.tarsnode.NodeObj.startServer 啟動服務
10.然後tarsAdminRegistry調用setTaskItemInfo接口設置相關信息(主要是更新t_task_item表的status、start_time)
⚠️⚠️⚠️注意:服務啟動的環境變量繼承tarsnode進程,可以通過模版配置文件中env參數設定自己需要的環境變量;
⚠️⚠️⚠️注意:發佈服務過程中,如果服務停止需要很長時間那麼start 必然會失敗,因為下發start指令時,沒有真正去檢查服務是否真正停止成功就下發該指令。
閱讀更多 後臺開發深度探索 的文章