一、业务背景微服务是当前系统架构的主流选择。虽然可以应对复杂的业务场景,但是随着业务的扩大,微服务架构本身的复杂度也会随之扩大。对于一些核心业务流程,请求链路上会涉及到多个业务服务,少则三五个,多则十几个是很常见的:真实的业务场景远比图中复杂,在这种模式下当请求失败或优化时,需要分析链路性能,跟踪调用链路,排查和解决链路故障;为完成上述过程,需要对请求的链路进行完整的监控,对各个链路的数据进行采集和分析,以便清楚地了解系统的行为信息,如耗时分析、故障原因发现、从而优化解决;有很多组件可以实现这个能力,这里看一下基于SkyWalking9的实践;2、组件原理Skywalking是一款国产的开源分布式链路,通过APMTracking系统标准化,APM(Application-Performance-Management)为应用性能管理,支持集成SpringCloud微服务,在代码层面无侵入:结构体系业务机制SpringCloud:分布式系统中的服务,启动时配置代理即可;Agent:以探针的形式收集请求链接的数据,并上报给管理服务;OAP-Service:接收数据,完成数据的存储和展示;存储:数据的存储层,支持ElasticSearch、Mysql、H2方式;UI界面:数据的可视化展示界面;工作流,服务通过探针接入数据采集功能,然后将请求链路的相关处理行为上报给OAP服务进行数据聚合管理和分析。并存储在持久层,然后可以通过UI界面进行可视化;三、安装部署1、版本说明在skywalking之前的版本中,apm和agent是一个包。9.0版本需要单独下载下载agent包解压后,放到apm包下维护:skywalking-apm-9.1.0.tar.gzskywalking-java-agent-8.10.0.tgz2,配置存储方式Skywalking数据存储有多少组件这个方便本地调试,选择MySQL数据库,生产环境一般选择ElasticSearch组件;配置文件:config/application.ymlstorage:selector:${SW_STORAGE:mysql}mysql:properties:jdbcUrl:${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true"}dataSource.user:${SW_DATA_SOURCE_USER:username}dataSource.password:${SW_DATA_SOURCE_PASSWORD:password}注意,要在本地mysql新建一个swtest数据库,使用latin1字符编码,可以避免索引长度的问题,建表是自动的,然后需要在包中添加mysql依赖;3、启停启动oap服务:shbin/oapService.sh启动UI界面:shbin/webappService.sh服务停止命令:jps查看,kill相关号码;UI界面服务默认8080端口,如果有占用问题,可以修改:webapp/webapp.yml文件,替换端口;启动完成后,可以访问LocalIP:port;4.服务集成中包含三个服务:网关、门面和账户。依赖性;将optionalplugins目录下的两个网关的依赖包复制到plugins目录下;在服务启动类中添加agent配置,如果是生产环境,一般在脚本中统一设置,由于在本地环境演示,基于IDEA工具进行管理;-javaagent:本地路径/agent/skywalking-agent.jar-Dskywalking.agent.service_name=gateway-javaagent:本地路径/agent/skywalking-agent.jar-Dskywalking.agent.service_name=facade-javaagent:本地路径/agent/skywalking-agent.jar-Dskywalking.agent.service_name=account并且所有配置完成,依次启动skywalking相关服务,这里配置的三个微服务,下面再来查看功能详情;四、功能详解1、服务监控相关服务启动后,访问skywalking界面。将上面配置的三个微服务加载到首页。这说明整个过程是正常的。点击服务名称可查看服务相关的详细指标;2.拓扑结构图通过网关请求网关服务,通过门面服务,到达账户业务服务。完成一次调用后,查看请求的拓扑结构图(即Topology栏);可以清楚的看到请求的路由链接和相关服务的访问数据库地址,对于微服务架构中复杂的接口,借助这个拓扑模型,可以快速理解业务逻辑,节省大量的绘图时间签发文件时;3.上面的链接跟踪只是请求的拓扑结构如图所示,在实际应用中,我们还是比较关注链接跟踪,查看账户服务请求链接(即Trace栏);skywalking组件是开发最常用的功能,这里收集了请求链接上的节点,以及执行耗时分析,点击相关节点可以查看详细信息,以及异常信息的描述异常请求也可以收集;可以大大提高排错效率,尤其是路由十个以上服务Logic的业务;4.数据库监控虽然整个配置中没有明确监控MySQL,但是skywalking在服务中还是可以监控数据库的。关于这些指标的详细信息,可以自行查阅文档;本文只是从开发的角度,总结skywalking的应用,并没有涉及太多详细的原理。其他强大的功能设计也值得开发借鉴。5.源码参考应用仓库:https://gitee.com/cicadasmile/butte-flyer-parent组件打包:https://gitee.com/cicadasmile/butte-frame-parent
