Arch - 演进中的架构

news2024/9/17 9:02:59

文章目录

  • Pre
  • 原始分布式时代
    • 1. 背景与起源
    • 2. 分布式系统的初步探索
    • 3. 分布式计算环境(DCE)
    • 4. 技术挑战与困境
    • 5. 原始分布式时代的失败与教训
    • 6. 未来展望
  • 单体时代
    • 优势
    • 缺陷
    • 单体架构与微服务架构的关系
    • 总结
  • SOA时代
    • 1. SOA架构及其背景
      • 1. 烟囱式架构(Information Silo Architecture)
      • 2. [微内核架构](https://www.oreilly.com/content/software-architecture-patterns/)(Microkernel Architecture)
      • 3. [事件驱动架构](https://www.oreilly.com/content/software-architecture-patterns/)(Event-Driven Architecture)
    • 2. SOA的核心组件和技术特征
    • 3. SOA的优势和局限性
    • 4. SOA在软件架构演进中的作用与影响
  • 微服务时代
    • 微服务的起源与演变
    • 微服务的核心特征
    • 微服务的优势与挑战
    • 微服务时代的未来
  • 后微服务时代
    • 微服务架构中的挑战
    • 虚拟化技术的崛起与 Kubernetes 的胜利
    • 基础设施与服务网格的融合
    • 展望未来:云原生与后微服务时代的前景
  • 无服务时代 Serverless
    • 背景与起源
    • 概念与特点
    • 适用场景与局限性
    • 展望与总结

在这里插入图片描述

Pre

软件架构并不是一蹴而就的,而是一个持续演进的过程。在这个过程中,许多名词和术语逐渐形成并发展。我们可以从历史的角度来分析这些概念的起源,探讨它们的定义、替代关系以及成功与失败的原因。

在这里插入图片描述


原始分布式时代

1. 背景与起源

  • 20世纪70年代末至80年代初,计算机科学从大型机转向微型机。计算机逐渐从研究设备转变为企业和个人的生产和娱乐设备。
  • 硬件限制:微型计算机的硬件性能有限,单台计算机无法支持更大规模的信息系统。因此,各大高校、研究机构、软硬件厂商开始探索多台计算机协作支持软件系统运行的可能性。

2. 分布式系统的初步探索

  • UNIX分布式设计哲学:强调保持接口与实现的简单性,比系统的任何其他属性都更重要。
  • 该时期的分布式探索是计算机科学的早期尝试,很多中间成果对后续的软件架构演进产生了深远的影响:
    • Network Computing Architecture (NCA):远程服务调用的雏形。
    • Andrew File System (AFS):早期分布式文件系统。
    • Kerberos协议:服务认证和访问控制的基础性协议,至今仍被广泛使用。

3. 分布式计算环境(DCE)

  • 开放软件基金会 (OSF) 制定了分布式计算环境 (DCE),包含了一套完整的分布式服务组件规范与参考实现:
    • DCE/RPC:源自NCA的远程服务调用规范。
    • DCE/DFS:源自AFS的分布式文件系统规范。
    • UUID:在DCE中发明,用于标识唯一对象。

4. 技术挑战与困境

  • 透明化与简单化的挑战:UNIX设计哲学强调透明化和简单化,但实际实现过程中,远程服务调用与本地方法调用的复杂性差异巨大。
    • 网络问题:服务发现、负载均衡、网络分区、超时、服务出错等问题。
    • 性能差异:远程调用的速度与本地调用存在数量级的差距,且远程方法无法依赖传统编译优化来提升速度。
    • 设计妥协:为了提高运行效率,开发者不得不在编写分布式程序时考虑各种特殊技巧,导致透明化和简单化的目标未能实现。

5. 原始分布式时代的失败与教训

  • DCE和CORBA等尝试最终未能成功,分布式架构的复杂性超过了其带来的收益。
  • Kyle Brown的评价:分布式操作并不总是必要的,强行追求透明化只会带来不必要的复杂性。
  • 后续演进:随着摩尔定律的推进,硬件性能的提升使得单体架构在较长时间内成为主流,但对分布式计算的探索始终未曾中断。

6. 未来展望

  • 尽管早期的分布式愿景未能实现,但随着分布式架构的成熟和完善,特别是在2016年服务网格重新提出透明通信时,分布式系统的简单透明化愿景再次被拾起,并最终得以实现。

单体时代

单体架构(Monolithic Architecture)是指所有应用程序组件被组合成一个单一的可执行文件或应用程序。不同模块之间的调用都是进程内调用,这意味着它们共享同一个进程空间,避免了进程间通信带来的复杂性和性能损耗。单体架构通常以单层架构为主,应用程序的各个功能模块之间紧密耦合,通常由同一技术栈构建。

优势

  1. 简单性:单体架构的设计和开发相对简单,特别是在小型项目中。这种架构风格的学习曲线较低,且广泛应用于教育和初级开发者的学习中。
  2. 高效性:由于所有模块运行在同一进程内,单体架构避免了进程间通信(IPC)的开销,使其在性能上具有优势。
  3. 易于测试和部署:单体应用通常可以作为一个整体进行测试和部署,减少了版本管理和部署的复杂性。

缺陷

  1. 扩展性:随着系统规模的扩大,单体架构的模块化和扩展能力变得越来越有限。代码库膨胀、模块耦合度增加,导致维护和扩展难度增加。
  2. 隔离与自治能力不足:单体架构下,应用的所有部分共享同一进程空间,导致某个模块的问题可能影响整个系统。例如,内存泄漏或线程问题可能会导致整个应用程序崩溃。
  3. 难以技术异构:由于所有代码共享同一进程空间,通常要求使用相同的编程语言和框架,限制了技术栈的灵活性。

单体架构与微服务架构的关系

单体架构是软件架构发展中的早期形态,其广泛应用直到今天。然而,随着系统规模的扩大和对高可用性、可扩展性的要求增加,单体架构在大型系统中的不足逐渐显现。这促使开发者探索新的架构风格,例如微服务架构(Microservices Architecture)。

微服务架构通过将单体系统拆分为多个自治的、松耦合的服务,解决了单体架构中的许多问题,如可扩展性和技术异构性。同时,微服务架构允许每个服务独立开发、部署和维护,进一步提升了系统的灵活性和可靠性。

然而,微服务架构也带来了新的挑战,例如分布式系统的复杂性、服务间通信的开销等。因此,选择单体架构还是微服务架构,取决于项目的规模、团队的能力和系统的实际需求。

总结

单体架构仍然是许多小型应用和初创项目的首选,特别是在开发资源有限或系统复杂度较低的情况下。尽管单体架构在大型系统中面临挑战,但它依然是一种有效的架构风格,特别是在系统规模相对较小、技术栈统一的场景下。随着软件系统的演进,单体架构与微服务架构的选择应该根据具体需求进行权衡。


SOA时代

1. SOA架构及其背景

在大型单体系统进行拆分的过程中,开发者们尝试了多种架构模式以应对系统规模、复杂度和灵活性等挑战。以下是三种较为代表性的架构模式:

1. 烟囱式架构(Information Silo Architecture)

概念
烟囱式架构,也称为信息孤岛架构,是一种完全独立的设计模式,每个系统独立运行、独立维护,不与其他系统进行互操作或协作。这样的系统往往在不同部门或业务领域内单独开发和部署。

特点

  • 独立性:各系统之间没有交互,甚至没有任何共享数据或服务。
  • 简单性:由于系统之间没有耦合,开发和部署较为简单,风险较低。
  • 缺乏协同:这种独立性导致系统之间的数据和业务逻辑无法共享,容易形成信息孤岛。

局限性
烟囱式架构虽然简单易行,但在现代企业中几乎不存在完全不交互的系统。企业内部的不同部门或系统往往需要共享一些公共的数据,如人员、组织、权限等。烟囱式架构忽视了这种需求,导致了系统间的割裂,无法满足实际业务需求。

2. 微内核架构(Microkernel Architecture)

在这里插入图片描述

概念
微内核架构是一种插件式架构,它将核心的公共服务、数据和资源集中到一个内核系统中,具体的业务功能以插件模块的形式存在。这些插件可以独立开发、部署和更新,同时依赖于公共的内核系统。

特点

  • 可扩展性:通过插件的形式,可以灵活地添加新功能或特性。
  • 模块化:业务功能被分解为多个独立的插件,降低了系统的复杂性。
  • 隔离性:各个插件模块之间通常是独立的,减少了耦合度。

局限性
微内核架构的假设是各个插件之间互不认识,也不可预知系统将安装哪些模块。因此,插件可以访问内核中的公共资源,但不直接交互。这种假设在实际企业信息系统或互联网应用中并不总是成立,尤其是在需要子系统间频繁通信的场景中,微内核架构可能无法完全满足需求。

3. 事件驱动架构(Event-Driven Architecture)

在这里插入图片描述

概念
事件驱动架构通过在子系统之间建立一套事件队列管道,各个子系统可以发布、订阅和处理事件消息。子系统通过事件管道进行解耦,同时又能相互通信和协作。

特点

  • 解耦:系统高度解耦,每个子系统可以独立处理事件。
  • 灵活性:子系统可以根据需要订阅自己感兴趣的事件,也可以发布新事件。
  • 可扩展性:通过增加事件类型或子系统,系统可以灵活扩展。

局限性
事件驱动架构的实现复杂度较高,事件的处理顺序和依赖关系需要仔细设计。此外,由于事件管道的异步特性,系统的调试和问题排查也更加复杂。

这三种架构模式各有其适用场景和局限性。烟囱式架构适合在系统之间几乎没有交互需求的场景;微内核架构适合在功能模块化、需要频繁扩展和更新的场景;而事件驱动架构则适合在系统之间需要高效、松耦合的通信和协作的场景。

在实际应用中,开发者往往需要根据具体的业务需求和技术条件,选择合适的架构模式,甚至将多种架构模式结合起来使用,以实现最佳的系统设计。


SOA(Service-Oriented Architecture,面向服务的架构)是为了应对复杂分布式系统中的集成与互操作性挑战而提出的一种架构风格。SOA的核心思想是将系统功能划分为独立的服务,通过松散耦合的方式使这些服务能够独立开发、部署和维护。


2. SOA的核心组件和技术特征

SOA的实施依赖于以下几个关键技术组件和概念:

  • SOAP(Simple Object Access Protocol):一种轻量级的协议,用于在网络上交换结构化信息,通常与WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)共同使用。
  • ESB(Enterprise Service Bus):企业服务总线,用于在不同服务之间传递消息,实现服务间的松散耦合。
  • SCA(Service Component Architecture):服务组件架构,定义了服务的封装形式和运行容器。
  • SDO(Service Data Object):服务数据对象,用于标准化服务之间的数据访问和表示。

3. SOA的优势和局限性

优势:

  • 松散耦合:服务可以独立开发和部署,降低了系统的复杂性。
  • 标准化:通过标准协议(如SOAP),实现跨平台、跨语言的服务互操作。
  • 可重用性:服务可以被不同的应用程序复用,提升开发效率。

局限性:

  • 复杂性:由于需要遵循严格的标准,SOA的实施往往涉及大量的配置和管理,增加了系统的复杂度。
  • 性能开销:SOAP等协议的使用,带来了额外的性能开销,尤其是在高并发场景下。
  • 过度抽象:SOA试图通过一套统一的标准解决所有问题,但这种“一刀切”的方法在实际应用中往往缺乏灵活性。

4. SOA在软件架构演进中的作用与影响

SOA标志着软件架构从单体式向分布式系统转变的重要一步。尽管SOA未能成为普遍采用的架构风格,但它提出的松散耦合、服务重用等理念在后来的微服务架构中得到了继承和发展。SOA的经验教训为现代分布式系统的设计提供了重要的借鉴,促使架构师们更加注重简化和灵活性,避免过度复杂化的设计。


微服务时代

微服务架构(Microservices)是一种强调灵活性、独立性和分散治理的软件开发方法。它将一个大型应用程序拆分为多个小型服务,这些服务可以独立开发、部署和扩展。微服务架构允许每个服务使用不同的技术栈,根据业务需求进行定制,避免了传统单体架构中可能存在的技术和组织上的瓶颈。

微服务的起源与演变

微服务的概念虽然可以追溯到2005年,但它在最初几年并未引起广泛关注。微服务的发展历程与SOA(面向服务架构)紧密相关,甚至可以说微服务是SOA的一种演变形式。然而,随着时间的推移,微服务逐渐脱离了SOA的影子,成为一种独立的架构风格。

2014年,Martin Fowler和James Lewis发表了《Microservices: A Definition of This New Architectural Term》,正式为现代微服务奠定了理论基础。这篇文章中,作者明确了微服务的九个核心特征,强调了围绕业务能力构建、分散治理和独立自治等关键原则。

微服务的核心特征

  1. 围绕业务能力构建:服务是围绕业务需求设计的,团队的组织架构也应与业务需求相匹配。

  2. 分散治理:每个服务的开发团队可以自由选择适合的技术栈和工具,减少外部干预。

  3. 服务化组件:组件通过服务的方式进行通信,确保各服务的独立性和自治性。

  4. 产品化思维:开发团队不仅关注功能实现,还要关注服务的整个生命周期,包括运维和用户反馈。

  5. 数据去中心化:数据按领域进行分散管理,避免中心化存储带来的依赖和一致性问题。

  6. 强终端弱管道:提倡轻量级的通信方式,减少对复杂中间件的依赖。

  7. 容错性设计:设计时考虑到服务可能会出错,提供自动化的故障检测和恢复机制。

  8. 演进式设计:接受服务会被淘汰的现实,设计时要允许服务的替换和更新。

  9. 基础设施自动化:依赖于CI/CD等自动化工具,以应对大规模服务的部署和运维挑战。

微服务的优势与挑战

微服务架构提供了极大的自由度,但也带来了新的挑战。架构师在设计微服务系统时,面临的决策和权衡比以往任何时候都要复杂。微服务的自由度允许开发者根据业务需求和团队技术熟练度灵活选择工具和技术,但同时也要求架构师具备更广泛的知识面和决策能力。

微服务在解决了单体架构中的一些瓶颈问题的同时,也重新引入了分布式系统中的一些经典问题,如服务发现、负载均衡、故障隔离和数据一致性等。这些问题在微服务架构下没有统一的解决方案,要求架构师根据实际情况做出权衡。

微服务时代的未来

微服务架构虽然提供了高度的自由,但这种自由也是一把双刃剑。未来的架构探索可能会寻求在不牺牲灵活性的前提下,减少分布式系统中固有的复杂性和管理负担。理想的架构应该能够同时满足业务驱动的灵活性和技术标准的统一性,为开发者提供更加简便和高效的工具和平台。


后微服务时代

在后微服务时代,软件和硬件之间的界限变得模糊,解决分布式架构中的各种问题不再局限于软件层面,硬件基础设施也参与其中。这种软硬件合力的模式可以称为“云原生”时代。云原生不仅是一种架构理念,更是对微服务架构的继承与升华。

微服务架构中的挑战

分布式系统的典型问题如服务发现、负载均衡、配置管理、安全性、监控、伸缩等,早在 SOA 时代甚至更早期的分布式系统中就已经存在。传统上,这些问题通常通过专用的硬件设施来解决,例如使用负载均衡器进行流量分发,使用 DNS 进行服务发现,或通过硬件防火墙提供安全保障。然而,随着软件架构的灵活性提升,单靠硬件设施已难以满足动态变化的需求。这催生了微服务架构下,基于软件的解决方案。

虚拟化技术的崛起与 Kubernetes 的胜利

随着虚拟化技术的发展,尤其是 Docker 容器技术的普及,软件层面的分布式问题开始得到解决。容器技术提供了一个轻量级的服务运行环境,使得应用可以快速部署和伸缩。而真正标志着后微服务时代到来的,是 Kubernetes 在 2017 年容器编排战争中的胜利。Kubernetes 提供了一套基础设施层面的解决方案,如服务发现、负载均衡、配置管理、自动伸缩等功能,逐步取代了传统微服务架构中 Spring Cloud 提供的应用层面的解决方案。

基础设施与服务网格的融合

然而,Kubernetes 并非万能,特别是在一些需要精细化处理的场景下,基础设施的粒度过于粗糙,难以完全替代应用层面的控制。例如,在微服务的熔断、监控、认证授权等方面,Kubernetes 的功能并不如 Spring Cloud 精细。为此,虚拟化基础设施引入了服务网格(Service Mesh)技术,通过边车代理(Sidecar Proxy)模式,在不修改应用代码的情况下,实现更精细的服务治理功能。

服务网格的核心思想是在每个服务实例旁边部署一个代理,负责接管服务的所有通信。这些代理不仅处理数据平面的通信,还与控制平面通信相互配合,实现动态的流量控制、监控、认证、负载均衡等功能。这种模式使得微服务架构中的许多问题可以从应用代码中剥离,交由基础设施层面的服务网格来处理,从而实现业务与技术的彻底分离。

展望未来:云原生与后微服务时代的前景

在未来,Kubernetes 很可能成为服务器端标准的运行环境,而服务网格则会成为微服务通信的主流模式。业务逻辑与技术细节将彻底分离,开发者只需专注于业务本身,而不必为分布式架构的复杂性所困扰。这将是一个更为成熟、稳定的架构时代,真正实现“上帝的归上帝,凯撒的归凯撒”,即业务与技术的完全分离。


无服务时代 Serverless

无服务架构(Serverless)是近年来云计算领域中迅速崛起的一种架构风格。它的核心理念是将开发者从管理底层基础设施的繁杂任务中解放出来,让他们能够更加专注于业务逻辑的开发。

背景与起源

无服务架构的起源可以追溯到2012年,Iron.io 公司首次提出了“无服务”的概念。2014年,亚马逊推出了Lambda服务,这标志着无服务架构进入了商业化阶段,并逐渐被开发者所接受。此后,无服务架构成为了云计算发展的重要方向之一,不仅是工业界,学术界也在2019年UC Berkeley发表的论文中预言“无服务将会发展成为未来云计算的主要形式”。

概念与特点

无服务架构主要包括两大核心内容:

  1. 后端设施(Backend as a Service,BaaS):这是指数据库、消息队列、日志、存储等支持业务逻辑运行的技术组件,它们运行在云端,并由云服务商托管和管理。
  2. 函数(Function as a Service,FaaS):这是指开发者编写的业务逻辑代码,这些代码以函数的形式运行在云端,云服务商会自动管理这些函数的部署、扩展和执行。

无服务架构的主要优势包括:

  • 降低开发和运维成本:开发者不需要关心底层基础设施的管理、扩展或维护,只需专注于业务逻辑的开发。
  • 弹性扩展:无服务架构依托于云服务商的庞大资源池,可以在需求高峰时自动扩展,也能在需求低谷时减少资源占用。
  • 按使用量付费:无服务架构通常按照函数的执行时间和内存消耗进行计费,这种模式使得开发者能够更加精细地控制成本。

适用场景与局限性

无服务架构在以下场景中表现尤为出色:

  • 短链接、无状态、事件驱动的应用:如Web资讯类网站、小程序、公共API服务、移动应用服务端等,这些场景下无服务架构的优势能够得到充分发挥。
  • 离线大规模计算:不需要实时交互的计算任务,也非常适合无服务架构。

然而,无服务架构也存在一些天然的局限性:

  • 业务逻辑复杂、依赖服务端状态的应用:例如信息管理系统、网络游戏等,由于无服务架构的冷启动时间和短暂的运行生命周期,这些应用不太适合在无服务架构下实现。
  • 响应速度要求高的应用:无服务架构中的冷启动时间会对响应速度产生负面影响,尤其是对启动性能较差的语言如Java,冷启动时间甚至可能接近秒级。

展望与总结

无服务架构尽管有着光明的前景,但在短期内可能仍然难以全面取代其他架构形式。然而,随着云计算的不断发展,无服务架构将成为未来软件开发中的重要一环,尤其是在与微服务架构等其他架构形式融合使用时。

无论是通过物理机、虚拟机、容器,还是无服务云函数,未来的微服务实现方案将更加多样化,这也意味着软件开发的未来将是多种架构风格并存、相互融合的形态。
在这里插入图片描述

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

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

相关文章

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs&…

C#/.NET/.NET Core优质学习资料

前言 今天大姚给大家分享一些C#/.NET/.NET Core优质学习资料,希望可以帮助到有需要的小伙伴。 什么是 .NET? .NET 是一个免费的、跨平台的、开源开发人员平台,用于构建许多不同类型的应用程序。 使用 .NET,可以使用多种语言、编辑器和库来…

Java中Date类型上的注解

在日常开发中,涉及到日期时间类型Date和常用的注解DateTimeFormat和JsonFormat java.util.Date; org.springframework.format.annotation.DateTimeFormat; com.fasterxml.jackson.annotation.JsonFormat; 一 Date类型字段不使用注解 Data AllArgsConstructor N…

C语言程序设计——数组(一)

一、一维数组的定义和引用 数组:是一组具有相同数据类型的数据的有序集合。 1.1一维数组的定义 定义格式为: 类型说明符 数组名[常量表达式]; eg: int a[10]; 表示定义了一个整形数组,数组名为a,此数组有10个元素。 注:①数组名定名规则和变量名相同,遵循标识符…

【C++】STL学习——list模拟实现

目录 list介绍list结构介绍节点类的实现迭代器的实现构造函数运算符重载--运算符重载运算符重载!运算符重载*运算符重载->运算符重载 const迭代器的实现多参数模板迭代器list函数接口总览默认成员函数构造函数1构造函数2构造函数3 析构函数拷贝构造函数赋值重载函数 迭代器b…

八,SpringBoot Web 开发访问静态资源(附+详细源码剖析)

八,SpringBoot Web 开发访问静态资源(附详细源码剖析) 文章目录 八,SpringBoot Web 开发访问静态资源(附详细源码剖析)1. 基本介绍2. 快速入门2.1 准备工作 3. 改变静态资源访问前缀,定义为我们自己想要的4. 改变Spring Boot当中的默认的静态…

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext new ClassPathXmlApplicationContext("bean.xml"); } BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanFactory的功能相似,都是…

2024下学期学习总结加今日学习总结

Vue router Vue Router 是一个为 Vue.js 应用程序设计的官方路由管理器。它使你能够轻松地在 Vue 应用中实现页面导航,处理 URL 和视图的映射。 安装router 在运行框内输入 npm install vue-router4 //vue2专用 npm install vue-router3 //vue3专用 对router进…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

【验收交付体系文档】系统验收计划书,软件交付验收成套文档体系

软件系统验收计划书是确保新开发的软件系统符合预期要求并稳定运行的关键步骤。本计划书概述了验收过程的主要环节&#xff0c;包括系统功能的详细测试、性能评估、用户接受度测试以及文档完整性的核查。验收团队将依据项目需求规格说明书和合同要求&#xff0c;对系统进行全面…

axure判断

在auxre中我们也可以实现判断的功能&#xff0c;当目标等于什么内容时则执行下方的功能。 一、判断输入框中是否有值 画布添加一个输入框、一个文本标签删除其中内容&#xff0c;添加一个按钮&#xff0c;输入框命名为【文本显示】文本标签命名为【提示】 给按钮新增一个交互…

多个索引干扰导致索引失效如何解决

视频讲解&#xff1a;索引干扰导致索引失效如何解决_哔哩哔哩_bilibili 1 场景说明 表tb_order有订单状态order_status和创建时间create_time的索引。 现在业务的需求是&#xff0c;查询半年内&#xff0c;已支付订单状态的总数。SQL语句如下&#xff1a; SELECTCOUNT(1) FRO…

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元&#xff0c;传统键盘输入方式正悄然进化。以往&#xff0c;面对实体键盘&#xff0c;我们常需目光游离于屏幕与键盘之间&#xff0c;以确认指尖下的精准位置。而屏幕键盘虽直观可见&#xff0c;却常因占据屏幕空间&#xff0c;迫使我们在操作与视野间做出…

Windows系统下安装JMeter

目录 一、官网下载JMeter 二、运行 JMeter 一、官网下载JMeter JMeter 官网安装地址 Apache JMeter - Apache JMeter™https://jmeter.apache.org/ 下载Windows版本 下载完成后 解压 二、运行 JMeter 打开bin目录 下面两个文件其中一个均可运行双击jmeter.bat 或者使用…

支持黑神话悟空的超长视频理解,Qwen2-VL多模态大模型分享

Qwen2-VL是由阿里巴巴达摩院开发并开源的第二代视觉与语言多模态人工智能模型。 Qwen2-VL结合了视觉理解和自然语言处理的能力&#xff0c;使得它能够处理和理解图像、视频以及文本数据。 Qwen2-VL支持多种语言&#xff0c;包括但不限于英语、中文、大多数欧洲语言、日语、韩…

【分支-快速排序】

【分支-快速排序】 1. 颜色分类1.1 题目来源1.2 题目描述1.3 题目解析 2. 排序数组2.1 题目来源2.2 题目描述2.3 题目解析 3. 数组中的第K个最大元素3.1 题目来源3.2 题目描述3.3 题目解析 4. 库存管理 III4.1 题目来源4.2 题目描述4 .3 题目解析 1. 颜色分类 1.1 题目来源 7…

JS基础学习笔记

1.引入方式 内部脚本 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…

为什么要使用大模型RAG一体机

使用大模型RAG&#xff08;Retrieval-Augmented Generation&#xff09;一体机&#xff0c;如AntSKPro AI 离线知识库一体机&#xff0c;有以下几个原因和优势&#xff1a; 提高效率&#xff1a;RAG模型结合了检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generati…

鸿蒙(API 12 Beta6版)GPU加速引擎服务【自适应VRS】

XEngine Kit提供自适应VRS功能&#xff0c;其通过合理分配画面的计算资源&#xff0c;视觉无损降低渲染频次&#xff0c;使不同的渲染图像使用不同的渲染速率&#xff0c;能够有效提高渲染性能。 接口说明 以下接口为自适应VRS设置接口&#xff0c;如要使用更丰富的设置和查询…

windows10-VMware17-Ubuntu-22.04-海康2K摄像头兼容问题,求解(已解决)

文章目录 1.webrtc camera测试2.ffmpeg 测试3.Ubuntu 自带相机4.解决办法 环境&#xff1a;windows10系统下&#xff0c;VMware的Ubuntu-22.04系统 问题&#xff1a;摄像头出现兼容问题&#xff0c;本来是想开发测试的&#xff0c;Ubuntu方便些。买了海康2K的USB摄像头&#xf…