这里主要是介绍一下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指令时,没有真正去检查服务是否真正停止成功就下发该指令。
閱讀更多 後臺開發深度探索 的文章