微服务-微服务链路追踪组件Skywalking实战

自动化监控系统Prometheus&Grafana实战:

        4 trem

APM-性能监控项目班:

https://vip.tulingxueyuan.cn/detail/p_602e574ae4b035d3cdb8f8fe/6

1. skywalking是什么

1.1 Skywalking主要功能特性

1.2 Skywalking整体架构

1.3 SkyWalking 环境搭建部署

2. SkyWalking快速开始

2.1 SkyWalking Agent追踪微服务

2.1.1 通过jar包方式接入

2.1.2 在IDEA中使用Skywalking

2.1.3 Skywalking跨多个微服务追踪

2.2 Skywalking集成日志框架

Skywalking通过grpc上报日志 (需要v8.4.0以上)

2.3 Skywalking告警通知

2.4 Skywalking持久化追踪数据

2.4.1 基于mysql持久化

2.4.2 基于elasticsearch持久化

2.5 自定义SkyWalking链路追踪

2.5.1 @Trace将方法加入追踪链路

2.5.2 加入@Tags或@Tag

2.6 Skywalking集群部署(oap服务高可用)

对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:

  • 如何串联整个调用链路,快速定位问题?
  • 如何理清各个微服务之间的依赖关系?
  • 如何进行各个微服务接口的性能分折?
  • 如何追踪整个业务流程的调用处理顺序?

0

全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。

OpenTracing语义规范: https://github.com/opentracing/specification/blob/master/specification.md

链路追踪组件选型

  1. Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  2. Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  3. SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
  4. CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

0

探针性能对比

        模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

0

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

1. skywalking是什么

        skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

官网:Apache SkyWalking

下载:Downloads | Apache SkyWalking

Github:GitHub - apache/skywalking: APM, Application Performance Monitoring System

文档:Welcome | Apache SkyWalking

中文文档: SkyWalking 文档中文版(社区提供)

版本: v9.1.0

采集数据——》传输数据——》存储数据——》分析数据——》监控报警

1.1 Skywalking主要功能特性

        1、多种监控手段,可以通过语言探针和service mesh获得监控的数据;

        2、支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;

        3、轻量高效,无需大数据平台和大量的服务器资源;

        4、模块化,UI、存储、集群管理都有多种机制可选;

        5、支持告警;

        6、优秀的可视化解决方案;

1.2 Skywalking整体架构

0

整个架构分成四部分:

  • 上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器;
  • 下部分 SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;
  • 右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主;
  • 左部分SkyWalking UI:负责提供控制台,查看链路等等;

SkyWalking支持三种探针:

        ● Agent – 基于ByteBuddy字节码增强技术实现,通过jvm的agent参数加载,并在程序启动时拦截指定的方法来收集数据。

        ● SDK – 程序中显式调用SkyWalking提供的SDK来收集数据,对应用有侵入。

        ● Service Mesh – 通过Service mesh的网络代理来收集数据。

后端(Backend)

接受探针发送过来的数据,进行度量分析调用链分析存储。后端主要分为两部分:

        ● OAP(Observability Analysis Platform)- 进行度量分析和调用链分析的后端平台,并支持将数据存储到各种数据库中,如:ElasticSearch,MySQL,InfluxDB等。

        ● OAL(Observability Analysis Language)- 用来进行度量分析的DSL,类似于SQL,用于查询度量分析结果和警报。

界面(UI)

        ● RocketBot UI – SkyWalking 7.0.0 的默认web UI

        ● CLI – 命令行界面

这三个模块的交互流程:

0

1.3 SkyWalking 环境搭建部署

0

  • skywalking agent和业务系统绑定在一起,负责收集各种监控数据
  • Skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
  • skywalking webapp,前端界面,用于展示数据。
  • 用于存储监控数据的数据库,比如mysql、elasticsearch等。

下载 SkyWalking

下载:Downloads | Apache SkyWalking

0

  • SkyWalking APM: v9.1.0

wget https://archive.apache.org/dist/skywalking/9.1.0/apache-skywalking-apm-9.1.0.tar.gz

  • Java Agent: v8.11.0

wget https://archive.apache.org/dist/skywalking/java-agent/8.11.0/apache-skywalking-java-agent-8.11.0.tgz

目录结构

0

搭建SkyWalking OAP 服务
1)先使用默认的H2数据库存储,不用修改配置

config/application.yml

0

2)启动脚本bin/startup.sh

0

日志信息存储在logs目录

0

启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui

skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml

0

skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml

0

  • server.port:SkyWalking UI服务端口,默认是8080;
  • spring.cloud.discovery.client.simple.instances.oap-service:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;

访问:http://192.168.65.206:8080/

0

SkyWalking中三个概念

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;
  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;

2. SkyWalking快速开始

2.1 SkyWalking Agent追踪微服务

2.1.1 通过jar包方式接入

        准备一个springboot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来追踪微服务;

startup.sh脚本:

#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-skywalking-demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:/root/skywalking-agent/skywalking-agent.jar
java $JAVA_AGENT -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar #jar启动

等同于

java -javaagent:/root/skywalking-agent/skywalking-agent.jar 
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 
-DSW_AGENT_NAME=springboot-skywalking-demo -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar

参数名对应agent/config/agent.config配置文件中的属性。

属性对应的源码:org.apache.skywalking.apm.agent.core.conf.Config.java

# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

我们也可以使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高

-javaagent:/root/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=springboot-skywalking-demo
-Dskywalking.collector.backend_service=127.0.0.1:11800

测试: http://192.168.65.206:8000/user/list

2.1.2 在IDEA中使用Skywalking

在运行的程序配置jvm参数

-javaagent:D:\apache\apache-skywalking-java-agent-8.11.0\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_NAME=springboot-skywalking-demo
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.65.206:11800 

测试:http://localhost:8000/user/list

2.1.3 Skywalking跨多个微服务追踪

Skywalking跨多个微服务追踪,只需要每个微服务启动时添加javaagent参数即可。

启动微服务mall-gateway,mall-order,mall-user ,配置skywalking的jvm参数

测试:http://localhost:8888/user/findOrderByUserId/1

0

0

注意:此处存在bug,追踪链路不显示gateway

解决方案:拷贝agent/optional-plugins目录下的gateway插件和webflux插件到agent/plugins目录

0

查看调用链路

0

2.2 Skywalking集成日志框架

logback plugin | Apache SkyWalking

引入依赖
<!-- apm-toolkit-logback-1.x -->
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.11.0</version>
</dependency>
微服务添加logback-spring.xml文件,并配置 %tid 占位符

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志的格式化 --><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!-- 设置 Appender --><root level="INFO"><appender-ref ref="console"/></root></configuration>

测试http://localhost:8888/user/findOrderByUserId/1,查看调用日志

0

Skywalking通过grpc上报日志 (需要v8.4.0以上)

gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器上

logback-spring.xml中添加
 <!-- https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/  -->
<!-- 通过grpc上报日志到skywalking oap-->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder>
</appender>
Skywalking UI效果

0

2.3 Skywalking告警通知

skywalking告警的核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中,告警规则的定义分为三部分:

  • 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件;
  • 网络钩子(Webhook}:当警告触发时,哪些服务终端需要被通知;
  • gRPC钩子:远程gRPC方法的主机和端口,告警触发后调用;

为了方便,skywalking发行版中提供了默认的alarm-setting.yml文件,包括一些规则,每个规则有英文注释,可以根据注释得知每个规则的作用:

  • 在最近10分钟的3分钟内服务平均响应时间超过1000ms
  • 最近10分钟内,服务成功率在2分钟内低于80%
  • 服务实例的响应时间在过去10分钟的2分钟内超过1000ms
  • 数据库访问{name}的响应时间在过去10分钟的2分钟内超过1000ms

只要我们的服务请求符合alarm-setting.yml文件中的某一条规则就会触发告警。

比如service_resp_time_rule规则:

该规则表示服务{name}的响应时间在最近10分钟的3分钟内超过1000ms

0

  • metrics-name:度量名称,也是OAL脚本中的度量名。默认配置中可以用于告警的度量有:服务,实例,端点,服务关系,实例关系,端点关系。它只支持long,double和int类型。
  • op:操作符。
  • threshold:阈值。
  • period:多久告警规则需要被检查一下。这是一个时间窗口,与后端部署环境时间相匹配。
  • count:在一个周期窗口中,如果按op计算超过阈值的次数达到count,则发送告警
  • silence-period:在时间N中触发报警后,在N -> N + silence-period这段时间内不告警。
  • message:该规则触发时,发送的通知消息。

测试:编写接口,模拟慢查询

@RequestMapping("/info/{id}")
public User info(@PathVariable("id") Integer id){try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return userService.getById(id);
}

访问接口,过段时间会在skywalking控制界面出现了告警信息

0

实现回调接口

@RequestMapping("/notify")
public String notify(@RequestBody Object obj){//TODO 告警信息,给技术负责人发短信,钉钉消息,邮件,微信通知等System.err.println(obj.toString());return "notify successfully";
}

在config/alarm-settings.yml中配置回调接口,并重启skywalking服务

0

测试访问:http://localhost:8000/user/info/1,满足告警规则后,控制台输出告警信息

0

参考: https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md

对接钉钉:

0

Webhook回调通知

SkyWalking告警Webhook回调要求接收方是一个Web容器(比如tomcat服务),告警的消息会通过HTTP请求进行发送, 请求方法为POST, Content-Type为application/json, JSON格式基于ListAlarmMessage>的集合对象数据, 集合中的每个AlarmMessage包含以下信息:

  1. scopeId. 所有可用的Scope,参考:org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
  2. name. 目标 Scope 的实体名称;
  3. id0. Scope 实体的 ID;
  4. id1. 未使用;
  5. ruleName. 在 alarm-settings.yml 中配置的规则名;
  6. alarmMessage. 报警消息内容;
  7. startTime. 告警时间, 位于当前时间与 UTC 1970/1/1 之间;
[{scopeId = 2,scope = SERVICE_INSTANCE,name = 98e1839 a6fdf48b0aedb0ecabb8ea5f7 @192 .168 .233 .1 of springboot - skywalking - demo,id0 = c3ByaW5nYm9vdC1za3l3YWxraW5nLWRlbW8 = .1 _OThlMTgzOWE2ZmRmNDhiMGFlZGIwZWNhYmI4ZWE1ZjdAMTkyLjE2OC4yMzMuMQ == ,id1 = ,ruleName = service_instance_resp_time_rule,alarmMessage = Response time of service instance 98e1839 a6fdf48b0aedb0ecabb8ea5f7 @192 .168 .233 .1 of springboot - skywalking - demo is more than 1000 ms in 2 minutes of last 10 minutes,startTime = 1613913565462
}, {scopeId = 6,scope = ENDPOINT_RELATION,name = User in User to / user / info / {id} in springboot - skywalking - demo,id0 = VXNlcg == .0 _VXNlcg == ,id1 = c3ByaW5nYm9vdC1za3l3YWxraW5nLWRlbW8 = .1 _L3VzZXIvaW5mby97aWR9,ruleName = endpoint_relation_resp_time_rule,alarmMessage = Response time of endpoint relation User in User to / user / info / {id} in springboot - skywalking - demo is more than 1000 ms in 2 minutes of last 10 minutes,startTime = 1613913565462
}]

2.4 Skywalking持久化追踪数据

2.4.1 基于mysql持久化

1. 修改config目录下的application.yml,使用mysql作为持久化存储的仓库

0

2. 修改mysql连接配置

0

storage:#选择使用mysql   默认使用h2,不会持久化,重启skyWalking之前的数据会丢失selector: ${SW_STORAGE:mysql}#使用mysql作为持久化存储的仓库mysql:properties:#数据库连接地址  创建swtest数据库jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://1ocalhost:3306/swtest"}#用户名dataSource.user: ${SW_DATA_SOURCE_USER:root}#密码dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}

注意:需要添加mysql数据驱动包,因为在lib目录下是没有mysql数据驱动包的,所以修改完配置启动是会报错,启动失败的。

0

3. 添加mysql数据驱动包到oap-libs目录下

0

4. 启动Skywalking

0

查看swtest数据库,可以看到生成了很多表。

0

说明启动成功了,打开配置对应的地址http://192.168.65.206:8080/,可以看到skywalking的web界面。

0

测试:重启skywalking,验证追踪数据会不会丢失

2.4.2 基于elasticsearch持久化

1.准备好elasticsearch环境(参考ES专题)

启动elasticsearch服务

bin/elasticsearch -d

0

2.修改config/application.yml配置文件,指定存储使用ES,修改elasticsearch的连接配置

0

3. 启动Skywalking服务

0

启动时会向elasticsearch中创建大量的index索引用于持久化数据

启动应用程序,查看追踪数据是否已经持久化到elasticsearch的索引中,然后重启skywalking,验证追踪数据会不会丢失

0

2.5 自定义SkyWalking链路追踪

如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用如下的代码

引入依赖
<!-- SkyWalking 工具类 -->
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.11.0</version>
</dependency>

在业务方法中可以TraceContext获取到traceId

@RequestMapping("/list")
public List<User> list(){//TraceContext可以绑定key-valueTraceContext.putCorrelation("name", "fox");Optional<String> op = TraceContext.getCorrelation("name");log.info("name = {} ", op.get());//获取追踪的traceIdString traceId = TraceContext.traceId();log.info("traceId = {} ", traceId);return userService.list();
}

测试 http://localhost:8000/user/list

0

在Skywalking UI中查询tranceId

0

2.5.1 @Trace将方法加入追踪链路

如果一个业务方法想在ui界面的追踪链路上显示出来,只需要在业务方法上加上@Trace注解即可

0

测试:

0

2.5.2 加入@Tags或@Tag

我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在方法上增加@Tag或者@Tags。

@Trace
@Tag(key = "list", value = "returnedObj")
public List<User> list(){return userMapper.list();
}@Trace
@Tags({@Tag(key = "param", value = "arg[0]"),@Tag(key = "user", value = "returnedObj")})
public User getById(Integer id){return userMapper.getById(id);
}

0

0

2.6 Skywalking集群部署(oap服务高可用)

        Skywalking集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行追踪。

搭建一个skywalking oap集群需要:

(1)至少一个Nacos(也可以是nacos集群)

(2)至少一个ElasticSearch(也可以是es集群)

(3)至少2个skywalking oap服务;

(4)至少1个UI(UI也可以集群多个,用Nginx代理统一入口)

1.修改config/application.yml文件

使用nacos作为注册中心

0

修改nacos配置

0

可以选择性修改监听端口

0

修改存储策略,使用elasticsearch作为storage

0

2. 配置ui服务webapp.yml文件的oap-service,写多个oap服务地址

0

3.启动微服务测试

指定微服务的jvm参数

-Dskywalking.collector.backend_service=ip1:11800,ip2:11800

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2813396.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024热门UI设计工具推荐

最好的UI设计工具可以适应几乎每一个设计过程&#xff0c;并且有望满足您的创造性要求。但既然UI设计工具那么多&#xff0c;应该用什么工具呢&#xff1f; 在过去的几年里&#xff0c;Sketch和figma的结合一直是许多设计师的选择&#xff0c;但其他工具也提供了有竞争力的特点…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如&#xff1a;热点…

QT信号槽实现分析

1.宏定义 qt中引入了MOC来反射&#xff0c;编译阶段变成 MOC–>预处理–>编译–>汇编–>链接 1-1、Q_OBJECT 这个宏定义了一系列代码&#xff0c;包括元对象和处理的函数 #define Q_OBJECT \public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static c…

【学海无涯】嵌入式工程师的100本专业书籍

001《大话数据结构》 002《鸟哥的 linux 私房菜》 003《疯狂 android 讲义》 004《第一行代码》 005《linux 内核设计与实现》 006《驱动设计开发》 007《linux 内核解密》 008《unix 环境高级编程》 009《linux 内核设计与实现》 010《essential C》 011《嵌入式 li…

CTFHub技能树web之XSS

在XSS系列的题目中&#xff0c;由于需要使用能够接受XSS数据的平台&#xff0c;并且由于使用的是CTFHub的模拟机器人点击我们的虚假URL&#xff0c;因此使用的XSS平台不能是自己本地搭建的&#xff0c;如果是本地的模拟点击的机器人将无法访问我们给的这个URL地址&#xff0c;也…

移动端学习:如何把exe转换成apk

exe转换成apk是怎么实现的呢?-电脑端-一门科技将exe文件转换成apk文件是一个比较常见的需求,尤其是对于一些开发者和用户来说。但是,这个过程并不是简单的复制和粘贴。在本文中,我们将介绍exe转换成apk的原理和详细介绍。首先,我们需要了解什么https://www.yimenapp.net/k…

Windows常用协议

LLMNR 1. LLMNR 简介 链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6&#xff0c;是仅次于DNS 解析的名称解析协议。 2.LLMNR 解析过程 当本地hosts 和 DNS解析 当本地hosts 和 …

pytorch --反向传播和优化器

1. 反向传播 计算当前张量的梯度 Tensor.backward(gradientNone, retain_graphNone, create_graphFalse, inputsNone)计算当前张量相对于图中叶子节点的梯度。 使用反向传播&#xff0c;每个节点的梯度&#xff0c;根据梯度进行参数优化&#xff0c;最后使得损失最小化 代码…

【MATLAB】小波 MFE_SVM_LSTM 神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 小波MFE_SVM_LSTM神经网络时序预测算法是一种结合了小波变换、多尺度特征提取&#xff08;MFE&#xff09;、支持向量机&#xff08;SVM&#xff09;和长短期记忆神经网络&#xff08;LST…

2024年食品饮料市场格局预测-2024年食品饮料行业未来发展趋势

娃哈哈创始人、董事长宗庆后离世&#xff0c;未来将由其女宗馥莉正式接班。 目前&#xff0c;娃哈哈电商的品类结构如下&#xff1a;饮料市场占比整体第一&#xff0c;占比超过55%&#xff0c;代表性产品为“AD钙奶”&#xff1b;其次是饮用水&#xff0c;占比在20%左右&#…

python 基础知识点(蓝桥杯python科目个人复习计划51)

今日复习计划&#xff1a;做复习题 例题1&#xff1a;大石头的搬运工 问题描述&#xff1a; 在一款名为“大石头的搬运工”的游戏中&#xff0c;玩家需要 操作一排n堆石头&#xff0c;进行n - 1轮游戏。 每一轮&#xff0c;玩家可以选择一堆石头&#xff0c;并将其移动到任…

mapbox高德地图与相机

mapbox高德地图与相机 本案例使用Mapbox GL JavaScript库创建高德地图。 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapb…

YOLOv9-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

SQL注入漏洞解析--less-46

我们先看一下46关 他说让我们先输入一个数字作为sort,那我们就先输入数字看一下 当我们分别输入1&#xff0c;2&#xff0c;3可以看到按照字母顺序进行了排序&#xff0c;所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式 当输入时出现报错提示&#xff0c;说…

编曲学习:和声小调 终止式 离调和弦 转调应用

和声小调 音阶 大调音程关系排列:全 全 半 全 全 全 半 小调音程关系排列:全 半 全 全 半 全 全 C大调音阶: 1 2 3 4 5 6 7 1 C小调音阶: 1 2 b3 4 5 b6 b7 1 C大调基本音级构成的和弦: Cmaj7 Dmin7 Emin7 Fmaj7 G7 Amin7 Bm7-5 C小调基本音级构成的和弦: Cmin7 D…

【书籍分享 • 第三期】虚拟化与容器技术

文章目录 一、本书内容二、读者对象三、编辑推荐四、前言4.1 云计算技术的发展4.2 KVM、Docker4.3 本书内容简介4.4 作者简介 五、粉丝福利 一、本书内容 《虚拟化与容器技术》通过深入浅出的方式介绍KVM虚拟化技术与Docker容器技术的概念、原理及实现方法&#xff0c;内容包括…

Linux中如何在创建子线程的时候设置为分离属性

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<unistd.h> #include <pthread.h> void *mythread(void *arg) {printf("id[%ld]\n",pthread_self()); } int main() { //定义pthread_…

Vue <script setup>

目录 基本语法 顶层的绑定会被暴露给模板 响应式 使用组件 动态组件 递归组件 命名空间组件 使用自定义指令 defineProps() 和 defineEmits() 针对类型的 props/emit 声明 使用类型声明时的默认 props 值 顶层 await 限制 <script setup> 是在单文件组件 (S…

网络原理——HTTPS

HTTPS是 在HTTP的基础上&#xff0c;引入了一个加密层&#xff08;SSL)。 1. 为什么需要HTTPS 在我们使用浏览器下载一些软件时&#xff0c;相信大家都遇到过这种情况&#xff1a;明明这个链接显示的是下载A软件&#xff0c;点击下载时就变成了B软件&#xff0c;这种情况是运…

北斗卫星赋能,宠物定位新篇章—追踪宠物,不再是难题

北斗卫星赋能&#xff0c;宠物定位新篇章—追踪宠物&#xff0c;不再是难题 随着社会的快速发展与科技的不断进步&#xff0c;人们的生活方式也在不断改变。宠物已经成为越来越多家庭的重要成员&#xff0c;在这个宠爱宠物的时代&#xff0c;如何确保宠物的安全&#xff0c;特…