微服务-微服务链路追踪组件Skywalking实战
自动化监控系统Prometheus&Grafana实战:
https://vip.tulingxueyuan.cn/detail/v_60f96e69e4b0e6c3a312c726/3?from=p_6006cac4e4b00ff4ed156218&type=8&parent_pro_id=p_6006d8c8e4b00ff4ed1569b2
APM-性能监控项目班:
https://vip.tulingxueyuan.cn/detail/p_602e574ae4b035d3cdb8f8fe/6
文档:19 微服务链路追踪组件Skywalking实战.... 链接:http://note.youdao.com/noteshare?id=f46cb9250e146defacf3c707ba847246&sub=09D7EA6FCDDC4098BC718A42636B11AF
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服务高可用)
对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:
- 如何串联整个调用链路,快速定位问题?
- 如何理清各个微服务之间的依赖关系?
- 如何进行各个微服务接口的性能分折?
- 如何追踪整个业务流程的调用处理顺序?
全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。
OpenTracing语义规范: https://github.com/opentracing/specification/blob/master/specification.md
链路追踪组件选型
- Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
- Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
- SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
- CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
探针性能对比
模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:
从上表可以看出,在三种链路监控组件中,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整体架构
整个架构分成四部分:
- 上部分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 – 命令行界面
这三个模块的交互流程:
1.3 SkyWalking 环境搭建部署
- skywalking agent和业务系统绑定在一起,负责收集各种监控数据
- Skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
- skywalking webapp,前端界面,用于展示数据。
- 用于存储监控数据的数据库,比如mysql、elasticsearch等。
下载 SkyWalking
下载:Downloads | Apache SkyWalking
- 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
目录结构
搭建SkyWalking OAP 服务
1)先使用默认的H2数据库存储,不用修改配置
config/application.yml
2)启动脚本bin/startup.sh
日志信息存储在logs目录
启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui
skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml
skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml
- 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/
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
注意:此处存在bug,追踪链路不显示gateway
解决方案:拷贝agent/optional-plugins目录下的gateway插件和webflux插件到agent/plugins目录
查看调用链路
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 占位符
<?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,查看调用日志
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效果
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
- 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控制界面出现了告警信息
实现回调接口
@RequestMapping("/notify")
public String notify(@RequestBody Object obj){//TODO 告警信息,给技术负责人发短信,钉钉消息,邮件,微信通知等System.err.println(obj.toString());return "notify successfully";
}
在config/alarm-settings.yml中配置回调接口,并重启skywalking服务
测试访问:http://localhost:8000/user/info/1,满足告警规则后,控制台输出告警信息
参考: https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md
对接钉钉:
Webhook回调通知
SkyWalking告警Webhook回调要求接收方是一个Web容器(比如tomcat服务),告警的消息会通过HTTP请求进行发送, 请求方法为POST, Content-Type为application/json, JSON格式基于ListAlarmMessage>的集合对象数据, 集合中的每个AlarmMessage包含以下信息:
- scopeId. 所有可用的Scope,参考:org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
- name. 目标 Scope 的实体名称;
- id0. Scope 实体的 ID;
- id1. 未使用;
- ruleName. 在 alarm-settings.yml 中配置的规则名;
- alarmMessage. 报警消息内容;
- 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作为持久化存储的仓库
2. 修改mysql连接配置
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数据驱动包的,所以修改完配置启动是会报错,启动失败的。
3. 添加mysql数据驱动包到oap-libs目录下
4. 启动Skywalking
查看swtest数据库,可以看到生成了很多表。
说明启动成功了,打开配置对应的地址http://192.168.65.206:8080/,可以看到skywalking的web界面。
测试:重启skywalking,验证追踪数据会不会丢失
2.4.2 基于elasticsearch持久化
1.准备好elasticsearch环境(参考ES专题)
启动elasticsearch服务
bin/elasticsearch -d
2.修改config/application.yml配置文件,指定存储使用ES,修改elasticsearch的连接配置
3. 启动Skywalking服务
启动时会向elasticsearch中创建大量的index索引用于持久化数据
启动应用程序,查看追踪数据是否已经持久化到elasticsearch的索引中,然后重启skywalking,验证追踪数据会不会丢失
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
在Skywalking UI中查询tranceId
2.5.1 @Trace将方法加入追踪链路
如果一个业务方法想在ui界面的追踪链路上显示出来,只需要在业务方法上加上@Trace注解即可
测试:
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);
}
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作为注册中心
修改nacos配置
可以选择性修改监听端口
修改存储策略,使用elasticsearch作为storage
2. 配置ui服务webapp.yml文件的oap-service,写多个oap服务地址
3.启动微服务测试
指定微服务的jvm参数
-Dskywalking.collector.backend_service=ip1:11800,ip2:11800
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/6078bd73c72f8b1e0aa6fa77cb6ab66f.png)
微服务-微服务链路追踪组件Skywalking实战
自动化监控系统Prometheus&Grafana实战: https://vip.tulingxueyuan.cn/detail/v_60f96e69e4b0e6c3a312c726/3?fromp_6006cac4e4b00ff4ed156218&type8&parent_pro_idp_6006d8c8e4b00ff4ed1569b2 APM-性能监控项目班: https://vip.tuling…...
![](https://www.ngui.cc/images/no-images.jpg)
Stream、Collections、Collectors用法
当涉及Java编程中的集合处理时,Stream、Collections和Collectors是三个常用的工具。以下是它们各自的主要功能和使用的一些方法的概要: Stream: 概要:Stream 是 Java 8 引入的一个强大工具,用于处理集合数据的流式操作…...
![](https://img-blog.csdnimg.cn/direct/08f77056d77145f5925855798db0321a.png#pic_center)
Jetson Xavier NX 与笔记本网线连接 ,网络共享,ssh连接到vscode
Jetson Xavier NX 与笔记本网线连接 ,网络共享,ssh连接到vscode Jetson Xavier NX桌面版需要连接显示屏、鼠标和键盘,操作起来并不方便,因此常常需要ssh远程连接到本地笔记本电脑,这里介绍一种连接方式,通过…...
![](https://img-blog.csdnimg.cn/direct/b9c6421b756c43b29b710354f5b6ae44.png)
利用netty手写rpc框架
前言:利用netty异步事件驱动的网络通信模型,来实现rpc通信 一、大致目录结构: 二、两个端:服务端(发布),客户端(订阅消费),上代码: 1.服务端&am…...
![](https://www.ngui.cc/images/no-images.jpg)
js+views 压缩上传的图片
安装image-conversion插件,在before-upload方法中对上传的图片文件进行处理 遇到的问题: 1、因为在上传文件之前的钩子中对图片进行了压缩处理,所以组件中上传的data会丢失,需要重新赋值 2、imageConversion 的引入需要使用impor…...
![](https://img-blog.csdnimg.cn/direct/4d951c7d06f64e8b9d4bfe4e6508a21c.png)
【安卓基础5】中级控件
🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职 🏆本文收录于 安卓学习大全持续更新中,欢迎关注 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频…...
![](https://img-blog.csdnimg.cn/direct/7b601c99aa184ad48e97ef0eba8920a4.png)
Arthas—【学习篇】
1. Arthas官网 arthas 2. 下载 从 Maven 仓库下载 最新版本,点击下载:编辑在新窗口打开 点击这个 mavrn-central 即可显示下面的图片 #从 Github Releases 页下载 Releases alibaba/arthas GitHub 3. 解压 将压缩包复制到一个位置&…...
![](https://img-blog.csdnimg.cn/direct/18f19b0e65514e699da293f993c8c65d.png#pic_center)
css pointer-events 多层鼠标点击事件
threejs 无法滑动视角,菜单界面覆盖threejs操作事件。 pointer-events /* Keyword values */ pointer-events: auto; pointer-events: none; pointer-events: visiblePainted; /* SVG only */ pointer-events: visibleFill; /* SVG only */ pointer-events: visib…...
![](https://www.ngui.cc/images/no-images.jpg)
k8s中基于alpine的pod无法解析域名问题
现象 在pod内无法解析指定域名 # 执行ping bash-4.4# ping xx-xx-svc-0.xxx-fcp.svc.cluster.local ping: bad address xx-xx-svc-0.xxx-fcp.svc.cluster.local排查经过 # 执行nslookup bash-4.4# nslookup xx-xx-svc-0.xxx-fcp.svc.cluster.local Server: 172.43.0…...
![](https://img-blog.csdnimg.cn/direct/07a239c6454a43b4882b8d2ea9c2ca39.png)
缩小ppt文件大小的办法
之前用别人模版做了个PPT,100多M,文件存在卡顿问题 解决办法: 1.找到ppt中哪个文件过大,针对解决 2.寻找视频/音频文件,减少体积 3.字体文件是不是过多的问题。 一、文件寻找的内容步骤: 步骤: 1.把p…...
![](https://img-blog.csdnimg.cn/direct/024dc7dab9a94e99b375903fe314f553.png)
vue3中使用 tui-image-editor进行图片处理,并上传
效果图 下载包 pnpm i tui-image-editor pnpm i tui-color-picker调用组件 //html部分 <el-dialog v-model"imgshow" destroy-on-close width"40%" draggable align-center :show-close"true":close-on-click-modal"false">&l…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5C17440%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20240130140218857.png&pos_id=img-fJnT8Gbo-1708517674090)
18.贪心算法
排序贪心 区间贪心 删数贪心 统计二进制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一维前缀和优化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…...
![](https://img-blog.csdnimg.cn/direct/9d714834dcd545ada141e25b5215c711.png)
[AI]部署安装有道QanyThing
前提条件: 1、win10系统更新到最新的版本,系统版本最好为专业版本 winver 查看系统版本,内部版本要大于19045 2、CPU开启虚拟化 3、开启虚拟化功能,1、2、3每步完成后均需要重启电脑; 注:windows 虚拟…...
![](https://img-blog.csdnimg.cn/direct/d841a242f97d466db698a4acf68cc4e2.png)
NLP_BERT与GPT争锋
文章目录 介绍小结 介绍 在开始训练GPT之前,我们先比较一下BERT和 GPT 这两种基于 Transformer 的预训练模型结构,找出它们的异同。 Transformer架构被提出后不久,一大批基于这个架构的预训练模型就如雨后春笋般地出现了。其中最重要、影响…...
![](https://img-blog.csdnimg.cn/direct/347ac06989d542b996de1a07ae5b8ca7.png)
放一个还看得过去的后台模板设置模块css样式框架
#小李子9479# 如下图 <div class"grid col-3 margin-top-xl"><?php$clist array(cyan, yellow, purple, red, blue, brown);foreach ($clist as $kk > $vv) {?><div style"max-width:400px;width:100%;padding:10px;"><div cl…...
![](https://www.ngui.cc/images/no-images.jpg)
关于信号强度单位dB和dBm区别
dB,dBm 都是功率增益的单位,不同之处如下: 一、dB 是一个相对值,表示两个量的相对大小关系,没有单位。当考虑甲的功率相比于乙功率大或小多少个dB时,按下面的计算公式:10log(甲功率/…...
![](https://img-blog.csdnimg.cn/direct/c69188aa1be04ca193a94faaf0f62823.png)
华清远见作业第四十二天——Qt(第四天)
思维导图: 编程: 代码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…...
![](https://www.ngui.cc/images/no-images.jpg)
vue2和vue3区别 浅析
vue2和vue3区别 浅析 数据响应原理 vue2 通过 Object.defineProperty 来更新数据,只会监听使用Object.defineProperty创建的(初始化)的数据,并通过订阅方式进行发布,在初始化之外的数据,不会受到监听; 在数据初始化时…...
![](https://www.ngui.cc/images/no-images.jpg)
GIT使用和简介
Git 是一个版本控制系统,它可以追踪文件的更改,并可以在不同的分支上进行并行开发。下面是 Git 的基本概念和使用方式的解释: 1. 仓库(Repository):仓库是用来存储项目代码的地方。一个仓库可以包含多个文…...
![](https://img-blog.csdnimg.cn/direct/2c3a18e914254764b52be4c1b57d0b85.jpeg)
HTTPS(超文本传输安全协议)被恶意请求该如何处理。
HTTPS(超文本传输安全协议)端口攻击通常是指SSL握手中的一些攻击方式,比如SSL握手协商过程中的暴力破解、中间人攻击和SSL剥离攻击等。 攻击原理 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息…...
![](https://img-blog.csdnimg.cn/direct/93b07d728c0d4a6da36541b7500d636f.png)
QT-模拟电梯上下楼
QT-模拟电梯上下楼 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "ElevatorController.h" #include <QGridLayout> #include <QLabel> #include <QGroupBox> #include <QGridLayout> #include <QPushButto…...
![](https://img-blog.csdnimg.cn/img_convert/d1384d89e5a6875b827b3acdade4bf2e.png)
基于springboot+vue的桂林旅游景点导游平台(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
![](https://img-blog.csdnimg.cn/direct/7d2378bbf8dd47049ef8516e816724c0.png#pic_center)
设计模式四:适配器模式
1、适配器模式的理解 适配器模式可以理解为有两个现成的类Adaptee和Target,它们两个是不能动的,要求必须使用B这个类来实现一个功能,但是A的内容是能复用的,这个时候我们需要编写一个转换器 适配器模式 Adaptee:被适…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
【AI应用】SoraWebui——在线文生视频工具
SoraWebui 是一个开源项目,允许用户使用 OpenAI 的 Sora 模型使用文本在线生成视频,从而简化视频创建,并具有轻松的一键网站部署功能 在 Vercel 上部署 1. 克隆项目 git clone gitgithub.com:SoraWebui/SoraWebui.git 2. 安装依赖 cd So…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
电路设计(27)——交通信号灯的multisim仿真
1.功能要求 使用数字芯片设计一款交通信号灯,使得: 主干道的绿灯时间为60S,红灯时间为45S 次干道的红灯时间为60S,绿灯时间为45S 主、次干道,绿灯的最后5S内,黄灯闪烁 使用数码管显示各自的倒计时时间。 按…...
![](https://www.ngui.cc/images/no-images.jpg)
Python Sanic 异步 Web 框架
Sanic 是一个基于 Python 3.6 的异步 Web 框架,它使用了 Python 的 async/await 语法来实现高效的非阻塞 IO 操作。 Sanic 的主要作用是提供一个快速、轻量级的方式来构建异步 Web 服务,适用于处理大量并发请求的场景。 以下是一个简单的示例代码&…...
![](https://img-blog.csdnimg.cn/img_convert/78c988b706dd5fafe2446d381fdb08d8.gif)
滚雪球学Java(70):深入理解Java中的PriorityQueue底层实现与源码分析
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...
![](https://www.ngui.cc/images/no-images.jpg)
李宏毅2023机器学习作业1--homework1
一、前期准备 下载训练数据和测试数据 # dropbox link !wget -O covid_train.csv https://www.dropbox.com/s/lmy1riadzoy0ahw/covid.train.csv?dl0 !wget -O covid_test.csv https://www.dropbox.com/s/zalbw42lu4nmhr2/covid.test.csv?dl0 导入包 # Numerical Operation…...
![](https://www.ngui.cc/images/no-images.jpg)
Mysql的SQL调优-面试
面试SQL优化的具体操作: 1、在表中建立索引,优先考虑where、group by使用到的字段。 2、尽量避免使用select *,返回无用的字段会降低查询效率。错误如下: SELECT * FROM table 优化方式:使用具体的字段代替 *…...
![](https://img-blog.csdnimg.cn/direct/fcc7ec111d27478d958aec1f44505bcd.png)
Unity 2021.3发布WebGL设置以及nginx的配置
使用unity2021.3发布webgl 使用Unity制作好项目之后建议进行代码清理,这样会即将不用的命名空间去除,不然一会在发布的时候有些命名空间webgl会报错。 平台转换 将平台设置为webgl 设置色彩空间压缩方式 Compression Format 设置为DisabledDecompre…...
![](https://img2018.cnblogs.com/blog/1732067/201909/1732067-20190921111344454-1723214566.jpg)
做网站用哪里的服务器比较好/百度精准营销获客平台
1、调整状态 最近发生了很多事,很多不好的事,以至于时常状态不在线,没有去调整,会告诉自己都是假的,然后继续低落难过,这些负面影响抛不掉,今天尝试调整 (1)尽量不要去看…...
![](http://s1.51cto.com/wyfs02/M00/7F/E3/wKioL1cxSNDRC7cQAAOOLwPedbA11.jpeg-wh_600x-s_1140528202.jpeg)
广州建网站比较有名的公司/怎样宣传自己的产品
“程序员是现存最大的手工艺人群体,黑客与画家的共同之处,在于他们都是创作者,都试图创作出优秀的作品。” 硅谷“创业教父”保罗 格雷厄姆如是说。 从一定角度来看,编程确实可以看作是一种艺术创作活动。那么我们其实可以认为&a…...
![](/images/no-images.jpg)
做平面设计去哪些网站找图/浙江网络推广公司
nginx的ngx_pagespeed是一个前段加速模块 安装需要的nginx依赖环境 yum install gcc gcc-c pcre* zlib-devel openssl-devel gd-devel php php-mysql php-fpm geoip-devel -y 下载nginx的12版本 不建议用高版本的会有bug wget http://nginx.org/download/nginx-1.12.2.tar.gz …...
![](/images/no-images.jpg)
工业软件开发工具/宁波网站优化
今天我需要在同事访问我的PHP页面的时候执行一段python脚本,于是我的代码是这样写的:1 <?php 2 function my_workjob(){3 $this->makeLog(ok run workjob);4 if($this->is_internal()){5 $cmd /usr/bin/python /data/script/abc/run.py;6 $ou…...
![](/images/no-images.jpg)
正规网站建设找哪家/现在推广一般都用什么软件
一、JSON的标准格式 JSON里面是一个对象,如果是多个对象,则用逗号间隔,即{},{},这样就组成了一个对象序列,为了辨别开始和结束,则需要加上[],即实际传递的形式应该是[{},{}],如果只要…...
![](https://img-blog.csdnimg.cn/img_convert/6908dc2d751ebb6c336d382f75f3793a.png)
中文html5网站欣赏/安徽seo顾问服务
这几天一直在搞基于jnlp的java程序更新。搞得是晕头转向,手忙脚乱。呵呵,楼主技术比较菜。还好,马马虎虎算是搞出来了。其中遇到不少问题,拿出来和大家分享分享,避免以后大家再走弯路。概念性的东西就不做解释了。Java…...