「腾讯开源Tars」C++ RPC 框架:服务发布过程



这里主要是介绍一下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指令时,没有真正去检查服务是否真正停止成功就下发该指令。