「騰訊開源Tars」C++ RPC 框架:服務發佈過程


「騰訊開源Tars」C++ RPC 框架:服務發佈過程


這裡主要是介紹一下tars的服務發佈過程。發佈包上傳就不介紹了,直接介紹服務發佈。


「騰訊開源Tars」C++ RPC 框架:服務發佈過程


詳細步驟如下:

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指令時,沒有真正去檢查服務是否真正停止成功就下發該指令。


分享到:


相關文章: