当前位置: 首页 > news >正文

微服务架构-可见可观测与量化分析体系

目录

一、可见可观测

1.1 概述

1.2 服务可见性

1.2.1 概述

1.2.2 服务描述

1.2.3 服务所有权

1.2.4 服务对外接口

1.2.5 服务SLA

1.2.6 服务的上下游拓扑

1.2.7 服务变更

1.2.8 服务接入和资源配额管理

1.2.9 服务线上部署和线下测试环境信息

1.3 变更可见性

1.4 可观测性

1.4.1 概述

1.4.2 Logging系统

1.4.3 Metric系统

1.4.3.1 概述

1.4.3.2 日志监控系统的缺点

1.4.3.2.1 规则简单

1.4.3.2.2 业务量大时影响性能

1.4.3.2.3 可维护性差

1.4.3.3 总结

1.4.4 Tracing系统

1.4.4.1 概述

1.4.4.2 分布式跟踪系统

1.4.4.2.1 分布式跟踪系统出现的业务背景

1.4.4.2.2 分布式跟踪系统起源与发展

1.4.4.2.3 分布式跟踪系统的原理

1.4.4.2.4 分布式跟踪系统需要具备的优点

1.4.4.2.4.1 低侵入接入

1.4.4.2.4.2 低开销

1.4.4.2.4.3 高稳定

1.4.5 总结

二、量化分析体系

2.1 概述

2.2 稳定性风险度量

2.3 基于多维度监控的故障定位

2.4 风险分析


一、可见可观测

1.1 概述

可见可观测是服务治理反馈机制的第一步,只有获取到足够多有价值的数据,才能对服务的运行状态进行分析和控制。

1.2 服务可见性

1.2.1 概述

服务元数据平台负责维护服务相关的元数据信息,主要包括服务层面、接口层面、拓扑层面这几个维度的元数据信息,通过服务元数据平台,可以对系统提供全方位的可见性。

服务层面,服务元数据平台汇聚了当前所有的服务列表,默认按照服务功能进行分类,业务需要某种功能的服务时就可以直接到服务商城浏览和查询,做到服务信息的透明化,减少重复建设。为了增强服务查询的灵活性,可以支持多种服务查询方式,比如按照服务所属部门查询、按照服务属性查询等,服务基本信息平台化等。服务基本信息如下。

1.2.2 服务描述

简要描述服务提供的基本能力,服务的适用场景等,供潜在服务使用者参考,必要时可以加上服务的详细描述信息wiki,以及服务对应的邮件组和沟通群。

1.2.3 服务所有权

服务当前所属部门、服务当前的owner等。

1.2.4 服务对外接口

服务接口定义,使用说明和注意事项等。

1.2.5 服务SLA

服务对外的SLA承诺。

1.2.6 服务的上下游拓扑

服务商城中维护了每个服务的上下游依赖,基于上下游依赖,不仅可以查询上下游服务的使用方式和使用情况,同时也可以进行服务重大变更时的上下游服务通知。

1.2.7 服务变更

服务商城中维护服务每个重要变更的变更日志,重要变更时会通过相应机制知会上下游依赖,上下游会评估是否需要适配升级等,这样服务使用者可以从变更历史中了解到服务的整个发展脉络。

1.2.8 服务接入和资源配额管理

服务如何接入,资源配额如何申请等。

1.2.9 服务线上部署和线下测试环境信息

描述了服务线上和线下的部署信息,使用者直接基于平台给定的环境使用。

服务元数据平台的作用是将服务基本信息平台化,同时可以将服务接入、服务客服等日常工作从线下转移到线上,减少线下的人力成本开销。因此服务元数据平台的评价标准是微服务接入和运营时线下沟通的比重。

1.3 变更可见性

变更是引发系统故障的主要因素,通过对各个维度的变更进行系统的梳理和记录,不仅方便出现故障时的追溯和定位,后续还可以基于完善的变更事件库,对这些变更的原因、质量以及影响进行全面的审计和分析,从中找到规律性的东西,建立相应的改进反馈闭环。

服务变更是变更的最重要来源,常见的服务变更方式有应用变更、配置变更、数据变更以及预案变更等。

对于微服务架构来说,除了关注当前服务的变更之外,还需要关注上下游依赖服务的变更,以及部署层面关联服务的变更,比如和当前服务混部在同一台物理机上的其他服务变更。除了服务变更,还需要对服务周边的各个环境变更进行记录,比如网络变更、机器变更、机房变更、交换机变更,这些变更都可能对服务的正常运行产生影响。

1.4 可观测性

1.4.1 概述

微服务架构下,各个微服务采用分布式部署,并且通过网络进行分布式通信,随着微服务个数和集群规模的扩大,系统中会产生各种形式的故障,并且很多故障是无法事先预测的,因此需要有完善的平台和工具体系,能够对微服务的运行状态进行全方位多维度的监控,使得我们可以随时掌握微服务当前的运行状态,并且针对运行状态不正常的场景进行及时处理。

可观测性就是用于上述微服务状态监控的工具集合,具体分为Logging(日志系统)、Metrics(度量系统)和Tracing(分布式跟踪系统)3个层次,三者的关系图如下图所示:

1.4.2 Logging系统

日志用于对系统中离散的事件进行记录,比如服务的调试信息和错误信息,日志是系统监控的基石,也是服务状态监控和问题诊断的第一个抓手,通过日志可以大体判断系统的运行状态是否正常。

日志是最常见、最通用的监控手段,但服务的日志监控和告警一般都需要人工添加,不仅效率低,也很容易遗漏。同时不同服务的日志格式和日志信息可能都会有差异,不太方便进行标准化,不仅日志收集、处理和展示比较麻烦,有太多个性化的需求,而且每个服务的日志都不统一,基于日志的全系统问题定位也非常麻烦。

1.4.3 Metric系统

1.4.3.1 概述

为了提高日志和监控的标准化,引入了Metric的概念,Metric就是将日志中可以聚合的部分通过标准化的协议进行处理,Metric定义一套完善的日志收集、传输和处理标准,通过Metric可以实现日志和监控的标准化,同时基于Metric的日志聚合特性,聚合后的日志会小很多,减少日志系统的成本开销。

监控标准化是在业务中埋点主动上报标准业务指标来满足业务监控需求的解决方案。期望在业务完成标准上报之后,自动给业务提供调用关系拓扑、自动错误率监控、自动服务可用性计算、服务性能评估等高级功能。

1.4.3.2 日志监控系统的缺点

业务服务一般习惯于使用日志监控的方式,监控系统对日志的监控也容易实现,但日志监控有如下几个缺点。

1.4.3.2.1 规则简单

日志监控采集只能适用于简单规则,比如流量采集、接口平均耗时等,在耗时上采用平均耗时,在分析业务性能时缺少精细粒度的分位耗时信息,比较难科学反应模块性能。

1.4.3.2.2 业务量大时影响性能

日志监控分析在业务流量大的情况下,在线消耗性能比较多。

1.4.3.2.3 可维护性差

日志监控采用配置分析的模式,让监控系统和日志格式有依赖,如果修改代码的时候不小心调整了日志格式,忘记调整对应监控正则,会导致日志监控出错。

1.4.3.3 总结

相比之下,标准化监控,主动上报监控指标,可以自动绘出调用链,为服务可用性提供衡量指标,支持复杂的统计功能,可以定制业务相关的复杂策略。

为了实现监控标准化,针对监控项的收集和上报,需要制定一个规范,如果各个业务或者一个业务的各个接口都按照上述的规范,那么可以在监控自动化上做到更高程度,避免人工配置。

举个例子:如果一个业务的各个接口都有错误率,且各个接口的错误率不能超过30%,那么只需要配置错误率≥30%就报警,则新增一个接口自动添加报警,可以实现报警自动化。监控项规范可以规定,所有上报的监控项均需要关注QPS、耗时和错误率这几个服务基础监控指标。

标准化项采集实现起来也比较简单,可以借鉴开源系统statsd的设计思想,在业务代码中引入监控标准化SDK。SDK负责实现监控项埋点和统计功能,以及服务间RPC调用质量等业务指标,SDK通过UDP协议上报业务监控指标项到本机的Agent,本机Agent以一定的周期(如10s)为周期聚合业务指标,并将聚合结果发送到监控平台。

1.4.4 Tracing系统

1.4.4.1 概述

Tracing用于记录请求级别的信息,它会跟踪请求整个链路的执行过程和各阶段耗时信息,基于Tracing,可以定位请求性能问题和跨服务交互相关的问题。

1.4.4.2 分布式跟踪系统
1.4.4.2.1 分布式跟踪系统出现的业务背景

大型互联网公司的微服务架构下,一个业务可能会有上百个微服务组成,一次请求由几十次服务调用共同完成。这种架构下就会出现很多跨服务的问题,比如请求处理为什么突然变慢,问题具体出在那个环节;业务故障的排查,是哪个流程中出错等,通过分布式跟踪系统,可以建立一个以请求为中心的全局视图,查看请求处理过程中各个阶段的具体状态和处理情况。

1.4.4.2.2 分布式跟踪系统起源与发展

2010年,Google发表了一篇名为《Dapper,a Large-ScaleDistributed Systems Tracing Infrastructure》的论文,介绍了Google生产环境中大规模使用的分布式跟踪系统Dapper的设计原理和使用经验,Dapper掀开了分布式跟踪系统的序幕。之后Twitter根据这篇论文开发了自己的分布式跟踪系统Zipkin,并将其开源。现在不少国内外的大型互联网公司也都有自己的分布式跟踪系统,比如Uber的Jaeger、阿里的鹰眼、京东的Hydra、微博的Watchman等,这些分布式跟踪系统的原理基本都差不多,一般分为数据采集、数据传输、数据处理和数据展示4个方面,下面以Dapper为例,讲述分布式跟踪系统的大体实现。

1.4.4.2.3 分布式跟踪系统的原理

首先看下分布式跟踪相关的几个重要概念,TraceID用于对请求进行唯一标识,一般是请求进入链路处理入口时生成(比如在接入层生成),此后一直在请求处理的整个链路中一直携带和传递,不再修改。TraceID是分布式跟踪系统中最重要的概念,通过TraceID串联请求的各个阶段,同时也通过TraceID查询请求的整个处理链。

Span ID用于标识请求在一个模块内的处理过程,理论上讲,SpanID只需要做到同一个TraceID下唯一即可,不需要全局唯一。为了通过服务调用关系实现请求调用链信息的组织,调用下游服务时,需要将自身的Span ID和TraceID传递给下游服务,下游服务会将上游服务传递过来的Span ID作为自己的父Span ID,并通过一定的方式生成自身的Span ID,然后使用TraceID、父Span ID和Span ID生成标准化的Trace日志,分布式跟踪系统收集各个服务的Trace日志,然后通过TraceID完成一个请求对应Trace日志的收集,通过父Span ID和Span ID完成请求跟踪树的建立。

Annotation用于给跟踪信息添加相应的注释,这个注释信息是带时间戳的,Annotation可以添加任意请求相关的信息,通过Annotation,方便进行一些业务相关的问题定位。

对于分布式跟踪系统来说,TraceID和Span ID的正确生成是一个非常重要的前提,不同分布式跟踪系统的ID生成规则不一样,对于TraceID来说,必要条件是全局唯一,同时为了方便根据TraceID进行问题定位和追查,TraceID生成时可以加入一些请求相关的基本信息。

对于Span ID的生成,必要的约束条件是保证同一个请求下的不同节点对应的Span ID唯一即可。不同的分布式跟踪系统,生成Span ID的方式也不尽相同,比如阿里的鹰眼系统巧妙用Span ID来体现调用层次关系(例如0,0.1,0.2,0.1.1等),对于请求的根节点来说,使用一个特殊的标识来标识当前节点是根节点,没有上游信息。

1.4.4.2.4 分布式跟踪系统需要具备的优点
1.4.4.2.4.1 低侵入接入

低侵入接入不仅是分布式跟踪,也是所有服务治理相关特性的共同需求。服务治理特性接入最好能做到对业务透明,这样接入的过程中不会有特别大的阻力,如果业务需要花费比较大的改造成本才能完成接入,业务接入的意愿就不会那么强烈。

为了实现透明低侵入接入,一般可以将分布式跟踪特性下沉到服务框架或者Service Mesh层面,尤其是Service Mesh可以真正做到让分布式跟踪特性的修改对业务服务完全透明,业务服务零改动。

1.4.4.2.4.2 低开销

为了减少对业务服务正常运行的影响,分布式跟踪需要做到尽可能轻量,尤其是一些性能特别敏感的业务,需要随时调整Trace日志采集频率,甚至需要Trace日志采集开关。

为了减少对业务服务正常运行的影响,分布式跟踪需要做到尽可能轻量,尤其是一些性能特别敏感的业务,需要随时调整Trace日志采集频率,甚至需要Trace日志采集开关。

1.4.4.2.4.3 高稳定

分布式跟踪作为基础服务治理组件,如果没有足够的稳定性保障,会给业务服务带来非常严重的后果,因此分布式跟踪系统设计和实现过程中的各个环节都要考虑稳定性因素,尽可能简化设置。对于Trace日志输出来说,不要有太复杂的处理逻辑,同时日志收集代理尽可能轻量部署,减少不必要的依赖。

当前国内外主流互联网公司基本上都有自己的分布式跟踪系统,但这些系统实现各异,并且相互不兼容,无法实现跨业务、跨公司的全链路跟踪,制约了全链路跟踪的进一步发展,为了解决不同分布式跟踪系统API不兼容的问题,诞生了OpenTracing规范,OpenTracing是一个轻量级的标准化层,希望通过OpenTracing实现分布式跟踪的兼容互通和标准化。当前OpenTracing已进入CNCF,成为云原生基础设施的一部分,OpenTracing通过提供平台无关、语言无关的API,使得开发人员能够方便地替换追踪系统,目标是为全球的分布式追踪提供统一的概念和分布式跟踪标准。

OpenTracing数据模型中,重点定义了两个相关的概念Span Tag和Log Field,其中Span Tag定义一系列作用于整个Span过程的Tag;每个Span的log操作,都具有一个特定的时间戳(这个时间戳必须在Span的开始时间和结束时间之间),以及一个或多个field,Log Field定义了一系列标准化的Log Field字段,通过Span Tag和Log Field实现了分布式跟踪输出的标准化。

OpenTracing规范还在不断完善过程中,当前Jaeger和Zipkin均实现了对OpenTracing的支持。

1.4.5 总结

Logging、Metric和Tracing这3个系统关注的侧重点有所不同。Logging系统对服务的运行状态和事件进行记录,比如调试日志、错误日志等,日志记录一般会比较全(有时出于性能考虑可能需要在不同场景下打开相应的日志开关),这些日志会作为问题追查和定位的依据。Metric系统侧重事件聚合,相比日志来说,Metric关注的对象相对小一些,比如服务QPS、成功率、耗时等,聚焦核心指标,基于Metric可以方便实现服务核心指标的监控告警自动化。Tracing关注请求级别的处理。使用过程中一般先关注日志监控是否有问题,如果有问题通过Metric查看具体的服务和指标异常,最后通过Tracing进行全链路排查。

一般通过无处不在的Metric监控,发现大面上的异常或隐患,如机器cpu idle过低、服务崩溃退出等;再通过Tracing系统,查看异常机器或实例上的轨迹,确认异常由哪个环节引入,造成了多大损失(例如个别机器CPU idle低处理慢,因为有上游重试,未必会造成损失);如果问题由业务逻辑导致,此时基本能找到根因;否则再通过Metric系统,确定运行环境类根因,如查看异常机器或实例上的QPS、CPU idle率、进程CPU使用率的秒级曲线,最终判定cpuilde低是由QPS增加导致,还是其他进程CPU使用率增加导致。

一般来说,对于大故障,直接关联分析各种指标就能定位出问题;对于零星故障,业务逻辑故障,上下游耦合类故障(如调度),要通过跟踪才能分析清楚。

二、量化分析体系

2.1 概述

量化分析体系是基于数据对系统进行量化、定位和分析,然后产生相应的治理措施,指导接下来的线上治理和线下治理,接下来从度量、定位和风险分析这几个维度对量化分析体系进行展开讨论。

2.2 稳定性风险度量

稳定性工作包含的内容很多,在稳定性建设过程中,经常会遇到这样一个问题——服务当前的稳定性现状,不太好衡量和判断。比如,服务变更一直以来是影响服务稳定性的重要因素,由于没有明确的衡量标准和规范,很难说清楚服务变更做到什么程度才算是符合稳定性要求的变更,这样会导致执行服务变更的同学很难发现自己平常工作的不足,同时团队的管理者层面看不到自己团队变更风险的全貌和严重程度。服务变更只是稳定性建设的一个缩影,稳定性建设的很多维度和服务变更类似。

为了掌握稳定性建设的真实情况,同时引导和规范业务同学在稳定性建设时的做法,针对稳定性的一些重要环节,需要制订一定的度量标准,对业务同学日常的稳定性建设进行度量,明确告诉大家当前的稳定性工作处于什么水准,具体哪些地方需要改进。

以服务变更为例,流程规范规定高峰期不能上线,平台可以强制规定不能在这个时间上线,但一定会有紧急的需求需要在高峰期操作,所以平台还必须放开这个口子。这类操作带来的风险也是确确实实存在的,它不应该被经常执行;比如灰度检查通常暂停的时间越长越有可能发现问题,但平台只能约束至少有暂停或暂停一个固定时间,更长的暂停时间则由执行者把握。诸如这些问题,可以结合变更规范制定一个量化标准——更信用分标准。比如变更信用分标准可以规定,暂停时间越长分数越高,高峰期如有操作则需要扣分,同时不同优先级的模块采用不同的标准,最高优先级的模块有强制双重校验的要求,需要两个人校验后才能在平台上线,如果没有在平台执行这个要求也需要扣分。按照变更信用分标准,对每周的上线单进行系统分析,并按团队汇总、量化和排名,让大家能从全局的角度看到问题的总体情况和各自的严重程度,并能够从上往下索引到各个团队具体的变更单、变更人和变更参数,甚至直到具体的变更模块配置界面,以此促进各个团队有针对性地发现变更风险并清晰地知道如何进行完善。定期将每个团队本周的变更评分情况,以及存在变更风险的变更操作单,发送到对应团队的负责人与变更风险单的实际操作者,方便业务人员了解当前的变更风险,并及时针对性地进行改进。

针对稳定性建设的其他方面,我们也可以按照上述变更信用分的思路,建立相应的度量标准。比如监控告警,针对基础监控是否有遗漏配置、上下游依赖健康是否完备、告警策略是否符合要求等情况,可以推出监控健康分,量化服务监控告警的完备情况,引导用户进行监控告警的完善工作。比如预案建设方面,可以推出预案健康分,量化一个服务的预案建设情况,涉及降级限流等预案是否完备,预案执行是否符合灰度要求,预案是否可以回滚等。

对于稳定性度量来说,主要是确定具体的度量指标,以及每个度量指标的标准评分。其实具体评分并不是那么重要,关键是大家对度量标准能够达成一致,能够对稳定性日常工作有实际的量化指导效果。

2.3 基于多维度监控的故障定位

线上服务出现问题时,当有足够多的监控信息时,才能直观地定位问题。但随着业务规模变大,微服务的个数越来越多,链路、拓扑、网络越来越复杂,相应的监控事件越来越多。当出现故障,可能瞬间出现大量的报警信息,从众多告警中快速找到故障原因,确定相应的止损预案,是一个非常重要且有挑战性的事情。

出现故障时,首先需要确定故障的影响面,可以基于场景和分布式跟踪拓扑将业务组织成一个全局的“灭火图”,灭火图中包括所有核心服务的可用性指标,比如错误率、QPS、耗时等,出现故障时,先从灭火图中看出故障影响的业务和服务,接下来确定故障定位的范围。

为了从纷繁复杂的众多事件中定位具体的原因,可以将各维度的监控报警、各种变更事件以事件的方式,按照时间轴整合成一个时间线,有了事件时间线,我们就可以将关注焦点放到故障时间前一段时间内的监控告警事件以及变更事件上,从而根据具体的事件类型确定相应的预案和止损措施。

2.4 风险分析

基于线上实时的可观测数据,以及研发全流程的变更和操作数据,我们可以得出很多维度的报表和趋势数据。这些维度可以涵盖服务治理的各个环节,比如链路SLA、超时重试、容量管理、强弱依赖关系等,这些数据可以作为接下来分析的基础。

同时,根据之前的风险分析以及一些静态的服务元数据信息,会形成一个和当前实时治理数据对应的历史基准库,将当前数据和历史基准库进行比较,从中找到趋势和规律,进而发现潜在的风险。

实时治理数据分析后一些有价值的东西可以沉淀到历史基准库,作为后续风险分析的基础,进而形成一个风险分析的闭环机制。在基于风险分析的在线上治理和线下治理中,会结合具体的场景和实例进行全面的剖析。

好了,本次内容就分享到这,欢迎大家关注《微服务架构》专栏,后续会继续输出相关内容文章。如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

相关文章:

微服务架构-可见可观测与量化分析体系

目录 一、可见可观测 1.1 概述 1.2 服务可见性 1.2.1 概述 1.2.2 服务描述 1.2.3 服务所有权 1.2.4 服务对外接口 1.2.5 服务SLA 1.2.6 服务的上下游拓扑 1.2.7 服务变更 1.2.8 服务接入和资源配额管理 1.2.9 服务线上部署和线下测试环境信息 1.3 变更可见性 1.4 …...

PostgreSQL的视图pg_indexes

PostgreSQL的视图pg_indexes 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777pg_indexes 是 PostgreSQL 中的一…...

暂停系统更新

电脑左下角搜索注册表编辑器 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 找到这个目录 打开FlightSettingsMaxPauseDays,没找到的话就创建一个同名文件夹然后选择10进制填入3550​​​​​​​ 最后进入系统暂停更新界面选择最下面…...

Python离线查询IP地址对应的国家和城市

使用场景: 在没网的情况下使用python代码实现对ip地址进行查询国家和地市 代码实现: 需要安装 pip install geoip2 库 import geoip2.databasedef get_location_by_ip(ip_address, db_path):reader geoip2.database.Reader(db_path)try:response r…...

使用Aspose技术将Excel/Word转换为PDF

简介:本文将介绍如何使用Aspose技术将Excel文件转换为PDF格式。我们将使用Aspose-Cells-8.5.2.jar包,并演示Java代码以及进行测试。 一、Aspose技术概述 Aspose是一款强大的文档处理库,支持多种编程语言,如Java、C#、Python等。…...

Opencv 色彩空间

一 核心知识 色彩空间变换; 像素访问; 矩阵的、-、*、、; 基本图形的绘制 二 颜色空间 RGB:人眼的色彩空间; OpenCV默认使用BGR; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…...

FileZilla:不安全的服务器,不支持 FTP over TLS 原因与解决方法

今天在用FileZilla Client连接某个主机的FTP的时候,主机地址、账号、密码、端口确定百分之百正确的情况下,结果报错如下: 状态: 正在解析 x.x.x 的地址 状态: 正在连接 x.x.x.x:21... 状态: 连接建立,等待欢迎消息... 状态: 不安全…...

自定义注解实现Excel 导出

概述 一个用自定义注解实现导出字段定义的工具实现。 1. 注解定义,定义导出Excel的字段 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface PoiExportField {// Label of the columnString label();// Order of the column,default 0,means t…...

先求生存,再谋发展:俞敏洪的创业哲学与产品创新之路

引言: 在创业的道路上,每一个创业者都面临着无数的挑战和选择。俞敏洪,新东方教育科技集团的创始人,以其独特的创业哲学和坚韧不拔的精神,带领新东方从一个小小的培训机构成长为全球知名的教育品牌。他的成功经验告诉…...

【Spark】直接从DataFrame的schema创建表

// 基于DataFrame创建表 def createTable(dataFrame: DataFrame,partitionColumns: Array[String],databaseName: String,tableName: String): Unit = {...

Decimal要从str转换以避免精度问题

最近遇到一个python的小数的问题,本来应该很简单的小于判断,无论如何都不正确,而且浮点小数都没问题,但decimal小数有问题,给我整蒙了,后来才发现是对decimal不了解所致,如果你还用float转decim…...

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...

qt c++类继承QWidget和不继承有什么区别

class CheckBoxSetting {Q_OBJECT public:CheckBoxSetting(); };和 class CheckBoxSettingsEditor : public QWidget {Q_OBJECTpublic:explicit CheckBoxSettingsEditor(QWidget *parent 0);~CheckBoxSettingsEditor();有什么区别? 这两个类 CheckBoxSetting 和 C…...

什么是SIEM

SIEM 解决方案是一种企业级应用程序,可集中和自动化与网络安全相关的操作,该工具通过收集、分析和关联从组织 IT 基础设施中的各种实体聚合的网络事件来帮助应对网络威胁。 与帮助监控和评估组织物理空间中的危险的监视控制台相比,SIEM解决方…...

浅谈一下实例化

实例化对象是面向对象编程中非常重要的概念,它允许我们根据类的定义创建具体的对象,并操作这些对象的属性和方法。下面具体谈一下实例化对象的一些特点和用途: 封装性和复用性:实例化对象可以将数据和行为封装在一起,从…...

【人工智能】第三部分:ChatGPT的应用场景和挑战

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…...

FLV 文件格式

FLV 总体结构 FLV 文件由 FLV文件头(FLV Header)和 FLV文件体(FLV Body)组成。 FLV 文件体由若干级联的 FLV标签(FLV Tag)组成。标签使用一个 PreviousTagSize(uint32_t)来保存前一个 FLV 标签的大小,第一个 PreviousTagSize 值为0。 一个 FLV 文件中的所有数据,如 视频…...

FENDI CLUB精酿啤酒品鉴体验

当提及“品质卓越,口感非凡”的啤酒时,FENDI CLUB精酿啤酒无疑是一个值得一试的选择。这款啤酒以其独特的酿造工艺和优质的原料,为消费者带来了与众不同的味觉享受。 一、独特的酿造工艺 FENDI CLUB精酿啤酒在酿造过程中,严格遵循…...

前端 CSS 经典:水波进度样式

前言&#xff1a;简单实现水波进度样式&#xff0c;简单好看。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" cont…...

深入解析CSS中的块级元素

块级元素在CSS中是一种常见的元素类型&#xff0c;具有一些特定的表现和行为特征。了解块级元素的定义和特点对于掌握CSS布局和样式设计至关重要。本文将从多个角度深入解析CSS中的块级元素&#xff0c;探讨其含义、特点以及在页面布局中的应用。 什么是块级元素&#xff1f; …...

PDF裁剪网站

裁剪 PDF – 修剪 PDF 文件中不需要的空白...

数据结构复习指导之外部排序

目录 外部排序 复习提示 1.外部排序的基本概念 2.外部排序的方法 2.1对大文件排序时使用的排序算法&#xff08;2016&#xff09; 3.多路平衡归并与败者树 4.置换-选择排序&#xff08;生成初始归并段&#xff09; 4.1置换-选择排序生成初始归并段的实例(2023) 5.最佳…...

【Python报错】已解决TypeError: can only concatenate str (not “int“) to str

解决Python报错&#xff1a;TypeError: can only concatenate str (not “int”) to str 在Python中&#xff0c;字符串连接是常见的操作&#xff0c;但如果你尝试将整数&#xff08;int&#xff09;与字符串&#xff08;str&#xff09;直接连接&#xff0c;会遇到TypeError: …...

Log4j日志级别介绍

Log4j 是一个广泛使用的 Java 日志记录框架&#xff0c;提供了多种日志级别&#xff0c;用于控制日志输出的详细程度。每个日志级别代表一种特定的重要性和紧急程度。 以下是 Log4j 的常见日志级别及其解读&#xff1a; FATAL&#xff08;致命&#xff09; 解释&#xff1a;表…...

[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)

&#x1f449;原文阅读 &#x1f4a1;章前提示 本文采用8084端口进行连接&#xff0c;是EMQX 默认提供了四个常用的监听器之一&#xff0c;如果需要添加其他类型的监听器&#xff0c;可参考官方文档&#x1f517;管理 | EMQX 文档。 本文使用自签名CA&#xff0c;需要提前在L…...

【纯血鸿蒙】——响应式布局如何实现?

前面介绍了自适应布局&#xff0c;但是将窗口尺寸变化较大时&#xff0c;仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题。此时就需要借助响应式布局能力调整页面结构。 响应式布局 响应式布局是指页面内的元素可以根据特定的特征&#xff08;如窗口…...

深入理解Django Serializer及其在Go语言中的实现20240604

深入理解Django Serializer及其在Go语言中的实现 在现代Web开发中&#xff0c;前后端分离已成为主流架构模式。作为开发者&#xff0c;我们经常需要处理数据的序列化和反序列化&#xff0c;以便在前后端之间传递数据。在Django中&#xff0c;Serializer是一个强大的工具&#…...

电子纸在日化行业的全新应用

电子纸在日化行业的全新应用 项目背景 在一日化龙头企业他们的洗衣粉产线在AGV小车取料到运输到产品包装工序时&#xff0c;因为取料粉车无明显区分标识&#xff0c;但是产品系列有十大类。在未采用晨控电子纸之前现场采用一个转盘分为十个区域&#xff0c;取料工序上方会有一…...

【Redis】Redis的双写问题

在分布式系统中&#xff0c;双写问题通常是指数据在多个存储系统&#xff08;例如数据库和缓存&#xff09;中更新时出现的不一致性。这种问题在使用 Redis 作为缓存层时尤为常见。具体来说&#xff0c;当数据在数据库和 Redis 缓存中存在副本时&#xff0c;任何对数据的更新操…...

生气时,你的“心”会发生什么变化?孟德尔随机化分析猛如虎,结果都是套路...

“不生气不生气&#xff0c;气出病来无人替”&#xff0c;不少人遇事常这样宽慰自己。事实上&#xff0c;“气死”真不是危言耸听。越来越多的研究证明了情绪稳定对健康的重要性&#xff0c;那么&#xff0c;当情绪频繁波动时&#xff0c;我们的心血管究竟会发生什么变化&#…...

阳江网站设计/网站搭建谷歌seo

想必用过EasyUI的朋友们都应该会遇到这样的情况吧&#xff1a;&#xff08;下图&#xff09; 在EasyUI中DataGrid中如果要显示DateTime的时间时候&#xff0c;便会显示上图这样的格式&#xff0c;很明显&#xff0c;这里的格式不会是我们想要的&#xff0c;我们想要的就大概如2…...

wordpress 日本主题/企业网站制作要求

现在安卓手机基本上都配备了1300w像素&#xff0c;那么这个高的像素是不是只有在手机上拍照的功能呢&#xff1f;答案是否定的&#xff0c;这里教大家物尽其用&#xff0c;来弥补笔记本和usb摄像头的缺点。也就是在电脑上使用安卓手机的摄像头。从而在视频通话中使用。一、我们…...

qq刷赞网站如何做分站/泉州百度搜索推广

用到工具: 带有猫抓插件浏览器; 迅雷; 安装ffmpeg; 方案: 一、下载.ts视频文件、m3u8文件、key文件; 二、TS文件合并; 具体实施: 介绍m3u8加密: 简单一点说m3u8加密技术就是将原视频分割成n个.ts文件&#xff0c;并用一个key文件对每一个.ts文件加密&#xff0c;其中m…...

张家界做网站/百度sem代运营

&#x1f361;三个不相信 1.不相信翻译 PMP考题的中文翻译常常词不达意,当你产生怀疑时不要犹豫,看看上面的英文原文,你会立刻感到柳暗花明。 2.不相信经验 东西方在语言文字、文化、习惯、工作方式上都存在较大差异,所以你的工作经验很可能与出题人有很多不同,你需要入乡随…...

免费企业营销网站制作/有做网站的吗

1.spark框架是如何处理数据的 1.hadoop MapReduce 框架 并行计算的思想、分而治之的思想 2. scala集合高阶函数 处理数据的思想: 将要分析的数据放到集合中去,然后调用集合的高阶函数去处理数据 2.spark是什么 Apache Spark™ is a unified analytics engine for large…...

宁晋网站建设/个人主页网页设计模板

SpringBoot 提及SpringBoot&#xff0c;想必大家脑海中第一时间浮现的应该是它“约定大于配置”的特性。作为Spring亲儿子的它整合了很多可插拔的组件&#xff08;框架&#xff09;&#xff0c;内嵌了使用工具&#xff08;比如内嵌了Tomcat、Jetty等&#xff09;&#xff0c;非…...