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

全方位详解微服务架构中的Service Mesh(服务网格)

一、引言

随着微服务架构的广泛应用,微服务之间的通信管理、流量控制、安全保障等问题变得日益复杂。服务网格(Service Mesh)作为一种新兴的技术,为解决这些问题提供了有效的方案。它将服务间通信的管理从微服务代码中分离出来,构建了一个专门用于处理服务间通信的基础设施层。

二、服务网格的基本概念

(一)定义

服务网格是一个用于处理服务间通信的专用基础设施层。它通过在每个服务实例旁边部署一个代理(通常称为sidecar代理),来实现对服务间通信的控制和管理。这些代理相互协作,形成一个网状结构,从而实现诸如流量路由、负载均衡、服务发现、安全通信等功能。

(二)组成部分

数据平面(Data Plane)

由众多的sidecar代理组成,负责处理实际的网络流量,包括拦截进出服务实例的请求和响应,进行流量控制、日志记录、监控数据采集等操作。例如,在一个电商微服务架构中,当用户请求从产品服务到订单服务时,数据平面的代理会拦截这个请求,根据配置的规则进行处理,如添加请求头、进行流量限制等。

控制平面(Control Plane)

负责管理和配置数据平面的代理。它定义了服务间通信的策略,如路由策略、安全策略等,并将这些策略分发到各个sidecar代理。控制平面可以动态地调整这些策略,以适应微服务架构的变化。例如,当需要将一部分流量从旧版本的服务路由到新版本时,控制平面可以更新路由策略,并通知相应的代理执行新的路由规则。

三、服务网格在微服务架构中的应用

(一)流量管理

流量路由

服务网格可以根据多种条件进行流量路由,如根据请求的来源、请求的版本号或者用户的特定标识等。例如,在一个多版本的微服务应用中,可以通过服务网格将10%的流量路由到新版本的服务进行测试,而将90%的流量保持在旧版本,以便进行渐进式的版本升级。

负载均衡

传统的微服务负载均衡通常在服务发现组件或者客户端代码中实现,而服务网格将负载均衡功能下沉到sidecar代理。代理可以根据多种算法(如轮询、加权轮询、最少连接等)进行负载均衡。这使得负载均衡的策略更加灵活,并且可以根据实际的服务运行情况进行动态调整。例如,当某个服务实例的负载过高时,代理可以减少发送到该实例的流量。

(二)服务发现与注册

动态服务发现

在微服务架构中,服务实例可能会频繁地启动、停止或迁移。服务网格的控制平面可以实时跟踪服务实例的状态,将服务发现的功能从微服务代码中解耦出来。当一个新的服务实例启动时,它可以自动被服务网格发现并注册,其他服务可以通过服务网格轻松地找到这个新实例并与之通信。

跨环境服务发现

对于复杂的企业架构,可能存在多个不同的环境(如开发环境、测试环境、生产环境)。服务网格可以在这些不同环境之间实现统一的服务发现机制,使得在不同环境之间进行服务调用和集成更加方便。例如,在开发环境中对某个服务进行测试时,可以通过服务网格轻松地找到在测试环境中对应的服务实例。

(三)安全保障

加密通信

服务网格可以为服务间的通信提供加密功能,确保数据在传输过程中的安全性。sidecar代理可以在发送和接收数据时对数据进行加密和解密操作,防止数据被窃取或篡改。例如,在金融微服务架构中,涉及用户资金信息的服务间通信可以通过服务网格进行加密,保护用户的隐私和资金安全。

访问控制

服务网格可以定义精细的访问控制规则,确定哪些服务可以访问其他服务,以及在什么条件下可以访问。例如,可以设置只有经过身份验证和授权的服务才能访问包含敏感数据的服务,并且可以根据用户的角色或权限进一步限制访问的范围。

(四)可观测性

监控与指标采集

sidecar代理可以收集大量关于服务间通信的监控数据,如请求的延迟、吞吐量、错误率等。这些数据可以被汇总到监控系统中,帮助运维人员和开发人员全面了解微服务架构的运行状态。例如,通过监控数据可以发现某个服务的请求延迟突然增加,从而及时排查问题。

分布式追踪

服务网格可以实现分布式追踪功能,跟踪请求在多个微服务之间的传播路径。这有助于在复杂的微服务架构中定位问题的根源,例如当一个用户请求在多个服务间传递后出现错误时,可以通过分布式追踪确定是哪个服务或者哪个环节出现了问题。

四、服务网格的优势

(一)解耦微服务通信逻辑

降低微服务复杂度

传统微服务架构中,服务间通信的逻辑往往与业务逻辑混杂在一起,增加了微服务代码的复杂度。服务网格将通信逻辑分离出来,使得微服务可以更加专注于自身的业务逻辑,提高了微服务的可维护性和可扩展性。例如,开发人员在编写一个新的微服务时,不需要再考虑复杂的服务发现、负载均衡等通信相关的代码。

语言和框架无关性

服务网格对微服务使用的编程语言和框架没有限制。无论微服务是用Java、Python还是其他语言编写,都可以利用服务网格提供的功能。这使得企业在构建微服务架构时可以更加灵活地选择适合的技术栈。

(二)增强微服务架构的弹性

故障隔离与恢复

当某个服务实例出现故障时,服务网格可以通过动态调整流量路由,将请求绕过故障实例,从而实现故障隔离。同时,在故障修复后,又可以自动将流量重新分配到修复后的实例,实现快速的故障恢复。例如,在一个分布式的微服务系统中,如果一个服务节点出现硬件故障,服务网格可以迅速将原本发往该节点的流量分配到其他正常节点。

动态配置更新

控制平面可以动态地更新服务间通信的策略,无需重启微服务。这使得微服务架构能够快速适应业务需求的变化,如在流量高峰期调整负载均衡策略,或者在安全漏洞修复后更新安全策略。

五、服务网格的挑战与应对

(一)性能开销

代理的资源消耗

sidecar代理的运行会消耗一定的系统资源,如CPU、内存等。在大规模的微服务架构中,如果代理的资源消耗过大,可能会影响整个系统的性能。为了应对这一问题,可以对代理进行优化,例如采用高效的编程语言和算法,以及合理配置代理的资源限制。

网络延迟增加

由于数据需要经过sidecar代理进行处理,可能会增加网络延迟。可以通过优化代理的网络处理逻辑,如采用异步处理、缓存机制等,来降低网络延迟的影响。

(二)学习曲线与复杂度

技术的复杂性

服务网格涉及到多个概念和技术组件,对于开发人员和运维人员来说,存在一定的学习曲线。企业可以通过提供培训课程、文档资料等方式,帮助团队成员掌握服务网格的相关知识和技能。

多组件集成的复杂性

在实际应用中,服务网格需要与现有的微服务架构、监控系统、安全系统等进行集成,这增加了系统的整体复杂度。在集成过程中,需要仔细规划和设计,确保各个组件之间的兼容性和协同工作能力。

服务网格在微服务架构中的应用为解决服务间通信和管理等问题提供了强大的解决方案。它通过将通信管理从微服务中分离出来,提供了流量管理、服务发现、安全保障和可观测性等多方面的功能,提升了微服务架构的整体性能、安全性和可维护性。尽管存在一些挑战,但随着技术的不断发展和实践经验的积累,服务网格有望在未来的微服务架构中发挥更加重要的作用。

Service Mesh的主要实现原理

Service Mesh 是一种新型的用于处理服务与服务之间通信的技术,尤其适用于以云原生应用形式部署的服务,能够保证服务与服务之间调用的可靠性。在实际部署时,Service Mesh 通常以轻量级的网络代理方式与应用的代码部署在一起,从而以应用无感知的方式实现服务治理。

1、与传统的微服务架构的本质区别

Service Mesh 以轻量级的网络代理方式与应用的代码部署在一起,用于保证服务与服务之间调用的可靠性,这与传统的微服务架构有着本质区别,具体体现在以下两点。

  • 跨语言服务调用的需要。大多数公司通常都存在多个业务团队,每个团队业务所采用的开发语言一般都不相同。比如移动服务端的业务主要采用的是 PHP 语言开发,API 平台的业务主要采用的是 Java 语言开发,移动服务端调用 API 平台使用的是 HTTP 请求。如果要进行服务化,改成 RPC 调用,就需要一种既支持 PHP 语言又支持 Java 语言的服务化框架。
  • 云原生应用服务治理的需要。现在微服务越来越多开始容器化,并使用类似 Kubernetes 的容器平台对服务进行管理,逐步向云原生应用的方向进化。而传统的服务治理要求在业务代码里集成服务框架的 SDK,这显然与云原生应用的理念相悖,因此迫切需要一种对业务代码无侵入的适合云原生应用的服务治理方式。
2、Service Mesh 实现原理

服务 A 要调用服务 B,经过 Linkerd 来代理转发,服务 A 和服务 B 的业务代码不需要关心服务框架功能的实现。为此 Linkerd 需要具备负载均衡、熔断、超时重试、监控统计及服务路由等功能。这样,对于跨语言服务调用来说,即使服务消费者和服务提供者采用的语言不同,也不需要集成各自语言的 SDK。

可见 Service Mesh 的实现原理有以下两个。

  • 一个是轻量级的网络代理,也被称为 SideCar,它的作用就是转发服务之间的调用。
  • 一个是基于 SideCar 的服务治理,也被称为 Control Plane,它的作用是向 SideCar 发送各种指令,以完成各种服务治理功能。
3、SideCar

在 Service Mesh 架构中,服务框架的功能都集中在 SideCar 中实现,并在每一个服务消费者和服务提供者的本地都部署一个 SideCar,服务消费者和服务提供者只负责自己的业务实现,服务消费者向本地的 SideCar 发起请求,本地的 SideCar 根据请求的路径向注册中心查询,得到服务提供者的可用节点列表后,再根据负载均衡策略选择一个服务提供者节点,并向这个节点上的 SideCar 转发请求,服务提供者节点上的 SideCar 完成流量统计、限流等功能后,再把请求转发给本地部署的服务提供者进程,从而完成一次服务请求。

服务消费者节点上的 SideCar 称为正向代理,服务提供者节点上的 SideCar 称为反向代理,Service Mesh 架构的关键点就在于服务消费者发出的请求如何通过正向代理转发,以及服务提供者收到的请求如何通过反向代理转发。

4、Control Plane

SideCar 能实现服务之间的调用拦截功能,那么服务之间的所有流量都可以通过 SideCar 来转发,这样所有的 SideCar 就组成了一个服务网格,再通过一个统一的地方与各个 SideCar 交互,就能控制网格中流量的运转了,这个统一的地方在 Service Mesh 中就被称为 Control Plane。

Control Plane 包括以下功能:

  • 服务发现

服务提供者会通过 SideCar 注册到 Control Plane 的注册中心,这样服务消费者把请求发送给 SideCar 后,SideCar 就会查询 Control Plane 的注册中心来获取服务提供者节点列表。

  • 负载均衡

SideCar 从 Control Plane 获取到服务提供者节点列表信息后,需要按照一定的负载均衡算法从可用的节点列表中选取一个节点发起调用,可以通过 Control Plane 动态修改 SideCar 中的负载均衡配置。

  • 请求路由

SideCar 从 Control Plane 获取的服务提供者节点列表,也可以通过 Control Plane 来动态改变,如需要进行 A/B 测试、灰度发布或者流量切换时,就可以动态地改变请求路由。

  • 故障处理

服务之间的调用如果出现故障,就需要加以控制,常用的手段有超时重试、熔断等,这些都可以在 SideCar 转发请求时,通过 Control Plane 动态配置。

  • 安全认证

可以通过 Control Plane 控制一个服务可以被谁访问,以及访问哪些信息。

  • 监控上报

所有 SideCar 转发的请求信息都会发送到 Control Plane,再由 Control Plane 发送给监控系统,如 Prometheus 等。

  • 日志记录

所有 SideCar 转发的日志信息也会发送到 Control Plane,再由 Control Plane 发送给日志系统,如 Stackdriver 等。

  • 配额控制

可以在 Control Plane 中为服务的每个调用方配置最大调用次数,在 SideCar 转发请求给某个服务时,会审计调用是否超出服务对应的次数限制。

微服务实战-Service Mesh与Istio

阿里云实战课程:微服务实战-Service Mesh与Istio_学习资源库_阿里云培训中心-阿里云

Service Mesh与微服务框架中的组件比较

在数字化转型的旗帜下,IT界的一大变化是大型单体应用程序被分解为微服务架构,即小型、离散的功能单元,并且这些应用程序在容器中运行。包含所有服务代码以及依赖项的软件包被隔离起来,并且能轻松从一个服务器迁移到另一个。

像这样的容器化架构很容易在云中扩展和运行,并且能够快速迭代和推出每个微服务。然而,当应用程序越来越大并且在同一个服务上同时运行多个实例时,微服务之间通信将会变得愈发复杂。Service mesh的出现将解决这一问题,它是一个新兴的架构形式,旨在以减少管理和编程开销的形式来连接这些微服务。

什么是Service mesh?

关于Service mesh的定义,最为广泛接受的观点是:它是一种控制应用程序不同部分彼此共享数据的方式。这一描述包含了service mesh的方方面面。事实上,它听起来更像是大多数开发人员从客户端-服务器应用程序中熟悉的中间件。

Service mesh也有其独特之处:它能够适应分布式微服务环境的独特性质。在搭建在微服务中的大规模应用程序中,有许多既定的服务实例,它们跨本地和云服务器运行。所有这些移动部件显然使得各个微服务难以找到他们需要与之通信的其他服务。Service mesh可以在短时间内自动处理发现和连接服务,而无需开发人员以及各个微服务自行匹配。

我们可以将service mesh等同为软件定义网络(SDN)的OSI网络模型第7层。正如SDN创建一个抽象层后网络管理员不必处理物理网络连接,service mesh将解耦在抽象架构中的与你交互的应用程序的底层基础架构。

随着开发人员开始努力解决真正庞大的分布式架构的问题,service mesh的概念适时地出现了。这一领域的第一个项目是Linkerd,它一开始是Twitter内部项目的一个分支。Istio是另一个十分流行的service mesh项目,它起源于Lyft,现在这一项目获得了许多企业的支持。

Service mesh负载均衡

Service mesh其中一个关键功能是负载均衡。我们常常将负载均衡视为网络功能——你想要防止服务器或网络链接被流量淹没,因此相应地你会路由你的数据包,而Service mesh在应用程序层面也在执行类似的事情。

本质上,Service mesh的工作之一是跟踪分布在基础设施上的各种微服务的哪些实例是“最健康的”。它可能对他们进行调查来查看它们如何工作的或跟踪哪些实例对服务请求响应缓慢并将后续请求发送到其他实例。此外,service mesh也会为网络路由做类似的工作,如果发现当消息需要很长时间才能送达,那么service mesh将会采用其他路由进行补偿。这些减速可能是由于底层硬件出现问题,或者仅仅是由于服务因请求过载或处理能力不足导致的。但没有关系,service mesh会找到另一个相同服务的实例,然后将其路由以替代响应缓慢的实例,高效利用了整个应用程序的资源。

Service mesh vs Kubernetes

如果你稍微熟悉基于容器的架构,你可能会想Kubernetes这个流行的开源容器编排平台能否适合这种情况。毕竟,Kubernetes不就是管理着你的容器之间如何互相通信的吗?你可将Kubernetes“服务”资源视为非常基础的service mesh,因为它提供服务发现和请求的轮询调度均衡。但是完整的service mesh则提供更丰富的功能,如管理安全策略和加密、“断路”以暂停对缓慢响应的实例的请求以及如上所述的负载均衡等。

请记住,大多数service mesh确实需要像Kubernetes这样的编排系统。Service mesh只是提供扩展功能,而非替代编排平台。

Service mesh vs API 网关

每个微服务都会提供一个API,它会作为其他服务与其通信的手段。这引发了service mesh与其他更传统的API管理形式(如API网关)之间的差异问题。API网关位于一组微服务和“外部”世界之间,它根据需要路由服务请求,以便请求者不需要知道它正在处理基于微服务的应用程序即可完成请求。而service mesh调解微服务应用程序内部的请求,各种组件完全了解其环境。

另一方面,service mesh用于优化集群内东西流量(server-server流量),API网关用于进出集群的南北流量(server-client流量)。但service mesh目前依旧处于早期阶段还在不断发展变化中。许多service mesh(包括Linkerd和Istio)现在已经可以提供南北功能。

Service mesh 架构

Service mesh这一概念其实出现的时间并不长,并且已经有相当数量的不同的方法来解决“service mesh”的问题,如管理微服务通信。目前,确定了三种service mesh创建的通信层可能存在的位置:

  • 每个微服务导入的library
  • 在特定节点提供服务给所有容器的节点agent
  • 与应用程序容器一起运行的sidecar容器

基于sidecar的模式目前是service mesh最受欢迎的模式之一,以至于它在某种程度上已经成为了service mesh的代名词。尽管这种说法并不严谨,但是sidecar已经引起了很大的关注,我们将在下文更详细地研究这一架构。

Sidecar

Sidecar容器与你的应用程序容器一起运行意味着什么呢?在这类service mesh中每个微服务容器都有另一个proxy容器与之相对应。所有的服务间通信的需求都会被抽象出微服务之外并且放入sidecar。

这似乎很复杂,毕竟你有效地将应用程序中的容器数量增加了1倍。但你使用的这一种设计模式对于简化分布式应用程序至关重要。通过将所有的网络和通信代码放到单独的容器中,将其作为基础架构的一部分,并使开发人员无需将其作为应用程序的一部分实现。

本质上,你所留下的是一个聚焦于业务逻辑的微服务。这个微服务不需要知道如何在其运行的环境中与所有其他服务进行通信。它只需要知道如何与sidecar进行通信即可,剩下的将由sidecar完成。

Service mesh明星项目:Linkerd、Envoy、Istio、Consul

那么说了这么多,什么是可用的service mesh呢?目前,这一领域还没有出现完全现成的商业产品。大部分的service mesh只是开源项目,需要通过一定的操作步骤才能实现,现在比较知名的项目有:

  • Linkerd:2016年发布,是这些项目中最老的。Linkerd是从Twitter开发的library中分离出来的。在这一领域另一位重量型选手,Conduit,已经进入了Linkerd项目并构成了Linkerd 2.0的基础。
  • Envoy:由Lyft创建,为了能够提供完整的service mesh功能,Envoy占据“数据平面”的部分,与其进行匹配。
  • Istio:由Lyft、IBM与google联合开发,Istio可以在不修改微服务源代码的情况下,轻松为其加上如负载均衡、身份验证等功能,它可以通过控制Envoy等代理服务来控制所有的流量。此外,Istio提供容错、金丝雀部署、A/B测试、监控等功能,并且支持自定义的组件和集成。 Rancher 2.3 Preview2版本上开始支持Istio,用户可以直接在UI界面中启动Istio并且可以为每个命名空间注入自动sidecar。Rancher内置了一个支持Kiali的仪表盘,简化Istio的安装和配置。这一切让部署和管理Istio变得简单而快速。
  • HashiCorp Consul:与Consul 1.2一起推出了一项名为Connect的功能,为HashiCorp的分布式系统添加了服务加密和基于身份的授权,可用于服务发现和配置。

相关文章:

全方位详解微服务架构中的Service Mesh(服务网格)

一、引言 随着微服务架构的广泛应用,微服务之间的通信管理、流量控制、安全保障等问题变得日益复杂。服务网格(Service Mesh)作为一种新兴的技术,为解决这些问题提供了有效的方案。它将服务间通信的管理从微服务代码中分离出来&a…...

bi工具是什么意思?bi工具的主要功能有哪些?

目录 一、BI 工具是什么意思? 1. 基本概念 2. 发展历程 ​编辑二、BI 工具的主要功能 1. 数据连接与整合 2. 数据存储与管理 3. 数据分析与挖掘 4. 可视化呈现 5. 报表生成与分享 6. 实时监控与预警 三、BI 工具的应用场景 1. 销售与营销 2. 财务与会计…...

cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins

cocos 版本2.4.11 在windows上jenkins的具体配置和部署,可参考上一篇文章cocos creator使用jenkins打包流程,打包webmobile_jenkins打包,发布,部署cocoscreator-CSDN博客 特别注意,windows上运行jenkins需要关闭windows自己的jenkins服务&a…...

PaddleOCR的Pytorch推理模块

概述 在项目中,遇到文字识别OCR的使用场景。 然而,目前效果最好的PaddleOCR只能用百度的PaddlePaddle框架运行。 常见项目中,往往使用更普遍的Pytorch框架,单独安装PaddlePaddle不仅会让项目过于臃肿,而且可能存在冲…...

操作系统期末复习(一)

一、选择 1.从用户的观点看,操作系统是() A.用户与计算机之间的接口 B.控制和管理计算机资源的软件 C.合理地组织计算机工作流程的软件 由若干层次的程序按一定的结构组成的有机体 答案:A 2.操作系统在计算机系统中位于&#x…...

今日行情明日机会——20250521

上证指数缩量收阳线,个股跌多涨少,整体处于日线上涨末端,注意风险。 深证指数,出现60分钟的顶分型,需要观察方向的选择。 2025年5月21日涨停股主要行业方向分析 并购重组 涨停家数:9家。 代表标的&am…...

传统Spring MVC + RESTful 与 Vue3 结合 JWT Token 验证的示例

以下是针对非Spring Boot项目(传统Spring MVC)的示例 一、项目结构 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ ├── config/ # 配置类目录 │ │ │ ├─…...

使用Redis的Bitmap实现了签到功能

思路分析 我们可以把 年和月 作为BitMap的key,然后保存到一个BitMap中,每次签到就到对应的位上把数字从0 变为1,只要是1,就代表是这一天签到了,反之咋没有签到。 关键问题 问题一: 什么叫做连续签到天数…...

Unity-编辑器扩展-其二

今天我们来基于之前提到的编辑器扩展的内容来做一些有实际用处的内容: 检查丢失的组件 首先是一个比较实际的内容:当我们在做项目时,经常会涉及到预设体在不同项目或者不同文件路径下的转移,这个时候很容易在某个具体的prefab对…...

项目中Warmup耗时高该如何操作处理

1)项目中Warmup耗时高该如何操作处理 2)如何在卸载资源后Untracked和Other的内存都回收 3)总Triangles的值是否包含了通过GPU Instancing画的三角形 4)有没有用Lua来修复虚幻引擎中对C代码进行插桩Hook的方案 这是第432篇UWA技术知…...

php://filter的trick

php://filter流最常见的用法就是文件包含读取文件,但是它不止可以用来读取文件,还可以和RCE,XXE,反序列化等进行组合利用 filter协议介绍 php://filter是php独有的一种协议,它是一种过滤器,可以作为一个中…...

STM32 I2C硬件读写

一、I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型(固定多主机、可变多主机)支持7位/10位地址模式支持不同的通讯速度&a…...

Qt+线段拖曳示例代码

Qt线段拖曳示例代码&#xff0c;功能见下图。 代码如下&#xff1a; canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget> #include <QPainter> #include <QMouseEvent> #include <QVector>class CanvasWidget : publi…...

计算机网络相关面试题

一、HTTP1.1和HTTP2的区别 HTTP/1&#xff08;主要指 HTTP/1.1&#xff09;和 HTTP/2 是 Web 协议发展中的两个重要版本&#xff0c;二者在性能、协议机制和功能特性上有显著差异。以下从多个维度对比分析&#xff0c;并结合具体案例说明&#xff1a; 一、连接与请求处理方式 1…...

docker中部署Universal Media Server (UMS)

Universal Media Server (UMS) 本身主要是作为桌面服务程序开发的&#xff08;主要面向 Java GUI DLNA 播放&#xff09;&#xff0c;但确实可以通过 Docker 进行部署。虽然官方没有提供 Docker 镜像&#xff0c;但社区有一些可用的方式可以在 Docker 中运行它。 下面是一个可…...

WordPress Elementor零基础教程

一、WordPress Elementor 是什么&#xff1f;—— 可视化网站搭建 “积木工具箱” 基础定义 Elementor 是 WordPress 的一款可视化页面构建插件&#xff0c;就如同网站搭建领域的 “PPT 编辑器”。它能让你无需编写代码&#xff0c;仅通过拖放模块&#xff08;像图片、文本、…...

鸿蒙UI开发——实现一个上拉抽屉效果

1、概 述 在项目开发中&#xff0c;我们可能会遇到临时交互的场景&#xff08;即&#xff1a;弹出一个临时交互框&#xff0c;交互完毕后继续用户的主流程&#xff09;&#xff0c;效果如下&#xff1a; 在ArkUI中&#xff0c;此类弹出窗被称为“半模态页面”&#xff0c;ArkU…...

详细介绍Qwen3技术报告中提到的模型架构技术

详细介绍Qwen3技术报告中提到的一些主流模型架构技术&#xff0c;并为核心流程配上相关的LaTeX公式。 这些技术都是当前大型语言模型&#xff08;LLM&#xff09;领域为了提升模型性能、训练效率、推理速度或稳定性而采用的关键组件。 1. Grouped Query Attention (GQA) - 分组…...

docker面试题(3)

如何临时退出一个正在交互的容器的终端&#xff0c;而不终止它 按ctrlp&#xff0c;后按ctrlq &#xff0c;如果按ctrlc会使容器内的应用进程终止&#xff0c;进而会使容器终止 很多应用容器都默认是后台运行的&#xff0c;怎么查看它们输出的日志信息 使用docker logs &#…...

2025年二级等保实施全攻略:传统架构与云等保方案深度解析

2025年&#xff0c;随着《网络安全法》的深化落实和等保2.0标准的全面推行&#xff0c;二级等保已成为中小企业及非核心业务系统的合规基线。如何在高效满足监管要求的同时&#xff0c;兼顾成本与安全效能&#xff1f;本文将结合最新政策与实战经验&#xff0c;从传统架构到云等…...

技术点对比

数据库 数据库程序在线访问与ORM访问的对比 数据库程序在线ORM访问优点性能好性能差可以处理复杂sql缺点 性能&#xff1a; 复杂sql支持&#xff1a; 开发成本&#xff1a; 架构风格 管道-过滤器风格与数据仓库风格对比 管道-过滤器风格数据仓储风格备注交互方式顺序结构…...

自监督学习与监督学习

&#x1f50d; 一、监督学习 vs 自监督学习&#xff1a;核心区别 维度监督学习&#xff08;Supervised Learning&#xff09;自监督学习&#xff08;Self-Supervised Learning&#xff09;是否需要人工标注的标签✅ 需要&#xff0c;如分类标签、边界框等❌ 不需要&#xff0c…...

Java操作数据库,JDBC

package myjdbc; import com.mysql.jdbc.Driver; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /*** 练习JDBC&#xff0c;完成一些简单的操作。*/ public class jdbc01 {public static void main(Str…...

UML 活动图 (Activity Diagram) 使用案例

UML 活动图使用案例 UML 活动图 (Activity Diagram) 使用案例活动图的主要元素典型使用案例1. 用户登录流程2. 在线购物流程3. 订单处理系统4. 文件审批流程 活动图的优势何时使用活动图 UML 活动图 (Activity Diagram) 使用案例 活动图是UML中用于描述业务流程或系统工作流程…...

回溯法求解N皇后问题

目录 前言 一、回溯法是什么&#xff1f; 二、N皇后问题描述 分析解题思路 三、算法设计 1、递归法 2、非递归法 总结 前言 本文将从递归形式和非递归形式两种方法来介绍求解N皇后问题的回溯法&#xff0c;后续也会更新更多有关算法分析这方面的问题欢迎大家关注~&#x1f929…...

网络流量分析工具ntopng的安装与基本使用

网络流量分析工具ntopng的安装与基本使用 一、ntopng基本介绍1.1 ntopng简介1.2 主要特点1.3 使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、安装ntopng工具3.1 官网地址3.2 配置软件源3.3 添加软件源3.4 安装ntopng 四、ntopng的基本配置4.1 修改配置文件4.…...

新导游入行规范与职业发展指导

随着旅游行业的蓬勃发展&#xff0c;导游作为旅游服务的重要环节&#xff0c;其职业素养和专业能力备受关注。对于新入行的导游而言&#xff0c;了解行业规范&#xff0c;明确职业发展方向&#xff0c;是开启职业生涯的重要一步。​ 一、严格遵守行业规范​ 持证上岗&#xf…...

数据结构与算法——堆

堆 树树的概念与结构树的相关术语树的表示树形结构实际运用场景 二叉树概念与结构特殊的二叉树满二叉树完全二叉树 二叉树存储结构顺序结构链式结构 实现顺序结构二叉树堆的概念与结构堆的实现向上调整算法&#xff08;插入数据&#xff09;向下调整算法 堆的应用堆排序(建堆)向…...

【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的分析与可视化对于众…...

AI驱动新增长:亚马逊Rufus广告点击率提升300%的奥秘

在生成式人工智能迅速融入商业应用的背景下&#xff0c;全球跨境电商巨头亚马逊&#xff08;Amazon&#xff09;正以前所未有的速度重构其广告生态。2024年第一季度&#xff0c;据亚马逊官方披露&#xff0c;通过部署内部开发的AI购物助手“Rufus”&#xff0c;其平台部分广告点…...

osgEarth中视角由跟随模式切换到漫游模式后没有鼠标拖拽功能问题分析及解决方法

遇到了一个棘手的问题,就是在由跟随模式切换到漫游模式的时候,鼠标无法实现拖拽功能。后来发现是前面给自己挖的坑。 因为要实现鼠标点选某个模型后,模型需要变红色显示,所以添加了一个事件处理程序。 // 创建 场景中模型的点选功能 事件处理程序 ModelSelectionHandler* …...

网页 HTML布局(详解)

本篇讲的是&#xff1a;构成网页的三要素中的HTML HTML的基本结构标签&#xff1a; html标签&#xff1a;网页的整体 head标签&#xff1a;网页的头部 body标签&#xff1a;网页的身体 title标签&#xff1a;网页的标题 一般我们新建一个HTML就会带有这些基本的标签&#xff1a…...

为什么可以不重写m1方法

在 Java 中&#xff0c;当一个类继承另一个类并同时实现接口时&#xff0c;如果接口中的方法签名与父类中的方法签名完全相同&#xff08;包括方法名、参数列表和返回类型&#xff09;&#xff0c;那么父类的方法会自动满足接口的实现要求&#xff0c;子类无需显式重写该方法。…...

深入解析应用程序分层及 BaseDao 的封装策略

目录 1. 应用程序分层 1.1. 应用程序分层简介 1.1.1. 三层结构 1.1.2. 分层的优点 1.1.3. 分层命名 1.2. 应用程序分层实现 1.3. 在分层项目中实现查询业务 2. 封装通用的BaseDao 2.1. 封装通用的DML操作 2.2. 封装通用的查询操作 3. 总结 前言 本文讲解JDBC中的应用…...

物理机做完bond后network服务重启失败

问题描述&#xff1a; 物理机通过systemctl status network.service查看网络服务情况&#xff0c;服务状态为failed&#xff0c;报错&#xff1a;Failed to start LSB: Bring up/down netw 问题分析&#xff1a; 1、network服务于NetworkManager服务冲突 2、未使用的网卡没…...

AGI大模型(30):LangChain链的基本使用

为开发更复杂的应用程序,需要使用Chain来链接LangChain中的各个组件和功能,包括模型之间的链接以及模型与其他组件之间的链接。 链在内部把一系列的功能进行封装,而链的外部则又可以组合串联。 链其实可以被视为LangChain中的一种基本功能单元。 API地址:https://python.…...

什么导致ERP系统中BOM表频繁出错?关键因素与解决路径

企业引入 ERP 系统后&#xff0c;常因 BOM&#xff08;物料清单&#xff09;维护不规范导致计划混乱、成本失控等问题。部分工厂依赖手工录入 BOM 数据&#xff0c;存在版本管理缺失、替代物料未标注等现象&#xff0c;使得 MRP 计划出错率高&#xff0c;生产效率与质量双降。解…...

(vue)前端实现下载后端提供的URL文件

(vue)前端实现下载后端提供的URL文件 动态创建&#xff1a; function downloadFile(url, filename) {const a document.createElement(a)a.href urla.download filename || download // 设置下载文件名document.body.appendChild(a)a.click()document.body.removeChild(a) …...

Axure通过下拉框选项改变,控制字段显隐藏

要求&#xff1a;要求选择钢铁行业时&#xff0c;字段1显示&#xff0c;字段2、字段3隐藏&#xff0c;选择水泥行业时&#xff0c;字段2显示&#xff0c;字段1、字段3隐藏&#xff0c;选择发电行业时&#xff0c;字段3显示&#xff0c;字段1、字段2隐藏。 1、首先Axure拖入一个…...

Axure应用交互设计:动态面板嵌套实现超强体验感菜单表头

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:动态面板嵌套 主要内容:利用动态面板多层嵌套实现菜单表头 应用场景:广泛应用于表单表…...

CICD遇到npm error code EINTEGRITY的问题

场景 CICD编译时抛出npm error code EINTEGRITY的错误 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…...

C# AI(Trae工具+claude3.5-sonnet) 写前后端

这是一个AI 写的前后端分离项目,通过AI编程&#xff0c;开发电商管理系统&#xff08;登陆、注册&#xff09; 使用的AI工具为 Trae工具(字节国际版)claude3.5-sonnet(目前代码最强模型) 前端为 vue3Bootstrap 后端为 C# net5.0(因为我电脑里面已经安装了这个新版更好) do…...

leetcode 25. Reverse Nodes in k-Group

25. Reverse Nodes in k-Group 递归法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, L…...

PHP伪随机数

在我们现实生活中由于一些物理原因产生的随机数才是真正的随机数&#xff0c;比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。而对于计算机来说&#xff0c;真正的随机数是不存在的&#xff0c;因为无法通过电信号来实现上面提到的物理过程&#xff0c;对于计算机来…...

vue3 threejs 物体发光描边

threejs官网案例&#xff1a; three.js examples 我的代码&#xff08;标注了重点代码&#xff0c;加上即可&#xff09; <template><div class"greenhouse" ref"canvasContainerRef"></div></template><script setup> im…...

java的synchronized 原理及功能

简介&#xff1a; Java中的synchronized关键字是一种同步机制&#xff0c;用于控制多个线程对共享资源的访问。 原理&#xff1a; 在Java锁有一个内部锁 Intrinsic Lock&#xff0c;也称为监视器锁或管程锁&#xff0c;每个Java对象都有一个关联的监视器锁&#xff0c;隐式锁…...

【Leetcode 每日一题】3356. 零数组变换 II

问题背景 给你一个长度为 n n n 的整数数组 n u m s nums nums 和一个二维数组 q u e r i e s queries queries&#xff0c;其中 q u e r i e s [ i ] [ l i , r i , v a l i ] queries[i] [l_i, r_i, val_i] queries[i][li​,ri​,vali​]。 每个 q u e r i e s [ i ]…...

LangChain入门和应用#1

LangChain 是一个全方位的、基于大语言模型这种预测能力的应用开发工具&#xff0c;它的灵活性和模块化特性使得处理语言模型变得极其简便。不论你在何时何地&#xff0c;都能利用它流畅地调用语言模型&#xff0c;并基于语言模型的“预测”或者说“推理”能力开发新的应用 La…...

[每日一题] 3356. 零数组变换ii

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 3356. 零数组变换 II - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个长度为 n 的整数数组 nums 和一个二维数组 queries&#xff0c;其中 queries[i] [li, ri, va…...

Docker网关冲突导致容器启动网络异常解决方案

一、故障现象 执行docker-compose up命令时服务器网络中断控制台显示"Creating network xxxxxxx with the default driver"通过ifconfig可见docker0网卡docker network ls显示新创建的网络接口 二、根本原因 Docker服务默认创建docker0虚拟网卡&#xff08;默认地…...