Tarsier后端二次开发介绍

2021-07-26 by uino 108 Tarsier 研发

Tarsier各模块介绍

一、 Tarsier各模块git地址:

https://wiki.uino.com/article/detail/tarsier-git.html

  • 目前基于Tarsier二次开发禁止直接在原git仓库开发,建议每个项目在git上单独创建一个group并给赵继铭赋权,由他将所需git仓库派生到这个grop里,由此派生的代码仓库及分支由项目组单独维护。
  • Tarsier各模块历史版本均有相应Tag,要修改某一版本代码直接基于其Tag创建分支即可。如果要修改的版本没有相应的Tag则说明其在当前版本中相对上一版本没有任何修改,此时基于其上一版本Tag创建分支即可。以VMDB工程5.11版本为例: image.png

二、Tarsier历史版本:

Tarsier历史每个版本的安装包及文档均位于公司网盘,使用ldap账号登录,/Public/产品版本下,以5.19.0版本为例,主要目录结构如下: image.png

  • doc/ 产品手册、部署文档等
  • tarsier_tools/ 产品第三方组件,如ES、MySQL、Nginx等
  • tarsier-linux-5.19.0/ Tarsier标准组件,即代码编译出的标准tar包 以上内容详情可参考个各个版本 doc/ 下安装部署文档

三、Tarsier各产品模块介绍

以下部分将会以5.19.0版本为例介绍Tarsier个产品模块主要功能,其他版本若与5.19.0有出入可参阅相应版本的产品手册及安装部署文档。如Tarsier Manager中所示Tarsier产品主要包含以下服务: image.png

1.Tarsier Manager(TM)

  • 是否必须:否

Tarsier Manager分为tarsier manager servertarsier manager agent两个部分,agent负责采集服务器各组件运行状态及执行部署、启动等流程,server是TM的管理服务,提供前端页面操作。在分布式环境中需要在每个服务器节点部署agent,具体部署流程可参阅相应版本的部署文档。

2.RC

  • 是否必须:是

RC(Register Center)即注册中心,Tarsier采用了Spring Cloud微服务架构,使用Eureka作为注册中心,用于支持服务内部通信的Feign接口调用,不涉及任何定制化开发。在早期非Spring Cloud微服务架构Tarsier版本中没有RC服务。

3.PK

  • 是否必须:是

PK(Primary Key)即主键生成器,用于Tarsier产品各个服务在进行数据库及ES插入操作时获取唯一标识,一般为数据的ID字段,主要为解决分布式环境中的主键冲突问题。其他服务使用Feign Client远程调用的方式与PK交互,在定制化开发中一般不需要修改。

4.BASE

  • 是否必须:是

BASE服务提供了基于ES的基本数据服务,主要包括CI、分类、关系、标签等数据的基本增删改查功能。BASE不对外暴露接口及操作页面,其他各个服务模块使用Feign Client远程调用的方式与BASE交互。

5.SSO

  • 是否必须:是

SSO为单点登录服务,主要提供了登录认证服务和资源文件服务两部分功能。

1)登录服务

在未登录状态下访问Tarsier将跳转至SSO,在SSO输入用户名密码进行认证,认证成功后跳转至原地址。某些项目会有对接第三方登录的需求,可以在SSO中开发。

2)资源服务

SSO提供资源服务,在其他服务比如VMDB中,涉及到文件(图片、视频、音频)操作的部分需要访问SSO进行资源文件的存储、访问,其他服务使用Http的方式访问SSO的资源服务。

6.VMDB

  • 是否必须:是

VMDB是Tarsier核心服务之一,是前端页面“系统设置”所有功能的后台和“配置管理”的部分功能后台。 VMDB提供了Tarsier中用户、角色、权限、菜单等系统基础功能和CI、关系等核心业务功能。这些功能既提供HTTP接口给前端“对象管理”、“关系管理”、“角色管理”等页面调用,也提供了各种基础功能的Feign接口给其他服务调用。 在目前5.19.0版本中DMV、DCV等产品服务模块大部分通过Feign接口与VMDB通信,但也有部分模块的部分功能是直接依赖VMDB的代码调用VMDB内部方法。

7.CMDB

  • 是否必须:是

CMDB是Tarsier产品在后期演进中的新增模块,主要提供了“配置管理”在较新版本中做的新功能(配置处理、接口超市等)的后台服务。同时CMDB也提供Feign接口给其他服务调用。

8.TASK

  • 是否必须:是

TASK主要提供定时任务功能,例如定时将MySQL中的CI、关系、分类数据同步到ES中。同时TASK集成了VMDB部分功能并提供接口给DIX,通过DIX对接的CI、关系、分类、用户等数据均通过TASK入库。

9.DMV、DCV、EMV、SMV等

  • 是否必须:否

这部分后台服务均集成VMDB和SSO的部分功能,在此基础上开发其自有业务。对于二次开发或定制化开发,了解VMDB即可。

10.EP、TP

  • 是否必须:否

EP用来处理告警数据,部署EMV时需要。TP用来处理性能数据,部署PMV时需要。

Tarsier后端定制化开发

一、基本目录结构及调用关系

Tarsier大部分后端工程遵循MVC结构,以VMDB为例,其目录结构如下: image.png

目录 功能
vmdb-comm 提供数据库操作实体类,以及部分基础功能、工具类等
vmdb-db dao层,基于MyBatis提供数据模型的增删改查,以及ES索引操作的封装类
vmdb-provider service层业务逻辑,仅提供interface及实体类,不提供实现
vmdb-provider-impl provider层实现,依赖db层实现provider层的接口,业务逻辑实现
vmdb-web 依赖provider及其实现,提供Controller接口供前端调用,存在部分业务逻辑
vmdb-client 提供给其他服务调用vmdb业务逻辑的Feign接口client端
base-client 提供给其他服务调用vmdb基础功能的Feign接口client端
  • 其他服务同理,调用逻辑为web->provider->db,不可反向调用。
  • web层根据不同业务区分的包路径中存在peer层,里面有部分业务逻辑,这是因为在早期版本中VMDB、DCV、DMV等未解耦,共同依赖vmdb-provider,各自在peer层中实现相应业务逻辑。
  • vmdb-comm中除vmdb业务使用的逻辑外还存在部分公共业务逻辑,例如记录操作日志、获取当前登录用户等工具类,所以其他工程如EMV、DMV等大都依赖vmdb-comm。在项目中如果需要修改这部分公共的功能,只需要修改vmdb-comm并将其打包替换到其他工程中即可。

二、项目打包及部署逻辑

Tarsier各模均使用maven管理依赖,打包成tar包。以VMDB为例,vmdb-web的pom.xml文件中使用了pack-war2tar.xml文件。 image.png

pack-war2tar.xml文件内容如下: image.png

打包完成的文件包含bin、conf、lib、src四个目录,bin目录里为服务脚本,包含启动、停止、重启,lib目录下有整个项目所有子工程生成的jar包和所有依赖的jar包,conf目录为配置文件。 在定制化开发中,修改了某一部分代码可以直接将其打成的jar包替换到相应工程的lib目录下,若要维护tm的部署流程,可以将新的tar包替换到tarsier-manager-server的modules目录下。 image.png 如上图所示,在TM中点击部署时,TM会将其modules目录下的tar包发送到相应的服务器解压部署,所以在定制化开发后将重新生成的jar包放在TM的modules目录下即可实现在TM一键部署新的tar包。

三、本地启动、调试

一般在进行定制化开发时,我们需要拉代码到本地进行修改,修改完成后要在本地进行启动、调试、自测。 开发完成后需要打包部署在服务器上。

1.启动方式

Tarsier各后端工程的配置文件均在其tset目录下,以VMDB为例,在上面的pack-war2tar.xml文件中可以看到,在打包时将test/resources下的配置文件打包到/config下,所以在本地启动时启动类一般也在/test下,同样以VMDB为例,vmdb-web/src/test下有启动类VMDBApplicationTest。 image.png image.png 执行main方法即可启动。其他工程同理。

2.配置文件

Tarsier产品生命周期较长,功能较多,所以其配置文件较多且复杂,具体配置说明可查找相应版本doc/目录下的配置项说明。目前各个模块的配置文件一般分为custom、major、minor三个,如下图所示。 image.png 分别对应TM配置环境变量中的定制化、常用配置和其他配置,如下图所示。 image.png 本地代码工程若要启动,建议在服务器部署一套Tarsier环境,至少需要数据库和ES,由于配置项较多,可以直接将已经部署的服务下的配置文件拷贝出复制到本地启动。

3.产品授权

Tarsier产品部署后需要授权,可参阅部署文档,在本地启动成功后数据库会记录本地IP地址此时授权失败,登录Tarsier会跳转至产品授权页面,访问部分接口会提示需要授权。 image.png 产品授权需要登录优诺云http://cloud.uinnova.cn/home/main.jsp,登录后点击“研发云”。 image.png image.png 点击左侧“产品授权->授权申请”。 image.png 申请页面如下图,需要填入在Tarsier“产品授权”页面获取到的客户识别码。 image.png 如果申请成功过,可以直接点击“复制旧单”,再修改客户识别码即可。 点击提交,在列表页可以看到“已生成授权码”。授权码将会发送到登录“优诺云”用户的企业邮箱。 image.png 将“授权许可”填写到Tarsier“产品授权”页面的“授权许可”部分点击注册即可完成授权。授权成功后即可调用本地全部接口。

4.依赖问题

Tarsier每个版本发版时不会修改maven的版本,所以在maven私服中的所有依赖都会是最新版本的。比如vmdb-comm的版本号一直是2.0.0-SNAPSHOT,目前Tarsier最新版本是5.19.0,由于版本号不变所以maven私服中只有5.19.0的vmdb-comm依赖,此时如果需要修改5.11版本的DMV直接使用maven依赖的vmdb-comm会因为代码已经经过大量修改导致编译失败。就算可以编译成功也会因为常量的修改导致打包结果与与其不符。 对于这种情况我们一般采用本地依赖的方式。在公司网盘中找到要修改版本的tar包,讲其解压出来把lib/下除当前工程会输出的jar包之外的所有jar包添加到工程中,同时修改pom依赖移除除当前工程内部依赖的所有依赖。