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

10 种微服务设计模式

微服务的优势与挑战

在详细介绍设计模式之前,我觉得有必要先重申下微服务的概念以及它带来的挑战。

微服务是大型应用程序的一个小型、可独立部署的组件,专注于特定功能。每个微服务都运行自己的进程,通常通过 API 与其他服务进行通信,并且被设计为松散耦合,从而更容易扩展、开发和维护。

图片

与单体应用程序相比,微服务具有以下主要优势:

  • 可扩展性:各个微服务可以根据需求独立扩展,优化资源使用。

  • 灵活性:可以使用不同的技术来开发、测试、部署和维护不同的微服务。

  • 更快的开发:规模较小、专注的团队可以同时处理单独的微服务,从而加快开发周期和发布时间。

  • 弹性:一个微服务中的故障被隔离,不太可能影响整个系统,从而提高整体可靠性。

  • 更容易维护:每个微服务的较小代码库更容易理解、修改和调试,从而减少技术债务。

  • 灵活外包:将业务功能外包给第三方合作伙伴时,知识产权保护可能是一个问题。微服务架构可以通过隔离合作伙伴特定的组件来提供帮助,确保核心服务保持安全且不受影响。

另一方面,它也面临着一些挑战:

  • 复杂性:开发和维护基于微服务的应用程序通常比单一方法需要更多的努力。每个服务都需要自己的代码库、测试、部署管道和文档。

  • 服务间通信:微服务依赖于网络通信,这可能会在处理服务间通信时引入延迟、故障和复杂性。

  • 数据管理:分布式数据管理可能具有挑战性,因为每个微服务可能有自己的数据库,导致一致性、数据同步和事务等问题。

  • 部署开销:管理多个微服务的部署、版本控制和扩展可能需要复杂的编排和自动化工具,例如 Kubernetes。

  • 安全性:每个微服务都可能引入新的潜在漏洞,增加攻击面并需要仔细注意安全实践。

以下设计模式主要就是为了解决上述说的微服务面临的挑战(感觉翻成中文后不好理解了,还是直接放英文吧,大家可以结合后续的介绍来理解这些模式的含义)。这些模式大家在日常开发中或多或少都可能已经在用了,但不知道是这个设计模式:

  • Database Per Service Pattern

  • API Gateway Pattern

  • Backend For Frontend Pattern

  • Command Query Responsibility Segregation (CQRS)

  • Event Sourcing Pattern

  • Saga Pattern

  • Sidecar Pattern

  • Circuit Breaker Pattern

  • Anti-Corruption Layer

  • Aggregator Pattern

最近建了一些工作内推群,各大城市都有,欢迎各位HR和找工作的小伙伴进群交流,群里目前已经收集了不少的工作内推岗位。加苏三的微信:li_su223,备注:所在城市,即可进群。

Database Per Service Pattern

Database Per Service Pattern 的核心理念是为每个微服务配备独立的专属数据库。这意味着,只有对应的微服务可以通过自身的 API 访问其数据库,其他微服务无法直接操作该数据库。

图片

使用这种模式的主要优势

  1. 松耦合:微服务之间的依赖性减少,提升了系统的模块化程度。

  2. 技术灵活性:团队可以根据各微服务的需求,选择最适合的数据库类型和配置,例如数据库种类或大小。

需要权衡的挑战

  1. 复杂性增加:维护多个数据库会带来更高的管理成本,包括备份、恢复、扩展等。

  2. 跨服务查询困难:需要跨多个数据库查询时,通常需要借助 API Gateway Pattern 或 Aggregator Pattern 来实现。

  3. 数据一致性问题:为了确保不同微服务数据库间的一致性,需要结合其他设计模式进行精心设计。

API Gateway Pattern

API Gateway 模式的核心在于通过一个统一的入口点(API 网关)处理所有客户端请求。API 网关在客户端与微服务之间充当中介,负责请求路由、响应聚合,并处理身份验证、负载均衡、日志记录和速率限制等横切问题。

图片

使用 API 网关的主要优点

  1. 简化客户端交互:客户端只需与一个统一的 API 对接,而无需直接管理多个微服务的复杂性。

  2. 集中管理:在网关中处理跨服务的通用功能(如身份验证或日志记录),减少了重复代码,提高了维护效率。

  3. 增强安全性:通过网关强制实施安全策略和访问控制,有效保护底层微服务免受外部直接访问。

面临的主要挑战

  1. 单点故障风险:如果 API 网关出现问题,可能导致整个系统不可用。因此,需要确保网关的高可用性和弹性。

  2. 性能瓶颈:未优化的网关可能成为系统的性能瓶颈,增加延迟,特别是在高并发场景下。

Backend For Frontend Pattern(BFF)

Backend For Frontend (BFF) 模式的核心思想是为每个特定的前端或客户端应用程序(如 Web 应用、移动应用、桌面应用)提供一个专属的后端服务。每个 BFF 针对其前端的具体需求设计,负责处理数据聚合、转换以及与底层微服务或 API 的交互。这个模式特别适合同时支持多个需求不同的前端应用的场景。

图片

主要优势

  1. 优化前后端通信:BFF 精准响应前端的需求,减少不必要的数据传输,提高加载速度,带来更好的用户体验。

  2. 简化前端开发:通过将复杂的业务逻辑、数据聚合和格式化放在 BFF 中,前端代码可以更专注于用户界面。

  3. 独立演进:每个前端和对应的 BFF 可独立开发和迭代,提升了系统的灵活性和适应性。

主要挑战

  1. 复杂性增加:为每个前端维护单独的 BFF 需要额外的开发和运维成本。

  2. 代码重复风险:如果通用功能未能抽象共享,可能导致多个 BFF 中出现重复代码。

  3. 行为一致性:确保不同 BFF 之间的功能和逻辑一致性在大型系统中可能成为难题。

BFF 模式通过专用后端服务为前端提供量身定制的支持,但需要在设计和管理时平衡复杂性与灵活性,以避免潜在的维护负担。

Command Query Responsibility Segregation(CQRS)

CQRS(Command Query Responsibility Segregation)模式的核心思想是将数据的读取(查询)和写入(命令)职责分离到不同的模型或服务中。这种分离让每个模型可以专注于自己的功能,并进行针对性的优化。

模式核心:

  1. 命令模型(Command Model):专注于处理复杂的业务逻辑和状态变化,通常需要确保事务完整性。

  2. 查询模型(Query Model):优化高效的数据检索和表示,通常采用非规范化视图或缓存以提升查询性能。

命令与查询模型之间的通信可以通过事件源、消息队列等技术来实现。

图片

CQRS 模式的主要优点

  1. 性能优化:读写职责分离后,查询模型和命令模型可以根据不同需求独立优化,从而提升整体性能。

  2. 可扩展性:读写操作能够单独扩展。例如,查询操作通常比写操作更频繁,可以为查询模型分配更多资源。

  3. 维护性增强:分离职责后,代码库变得清晰,更易于理解、测试和修改。

面临的主要挑战

  1. 系统复杂性:需要单独管理和维护两个模型,并确保它们的正确通信和同步。

  2. 数据一致性问题:在分布式环境下,命令和查询模型的数据可能存在延迟更新的问题,增加了设计复杂性。

  3. 数据同步挑战:同步读取和写入模型,尤其是在数据量大或转换复杂的情况下,可能需要依赖事件源或消息队列等机制。

CQRS 模式适合复杂领域逻辑或高并发系统,虽然引入了额外的复杂性,但通过合理的设计和工具支持,可以有效提升系统的性能和可扩展性。

Event Sourcing Pattern

Event Sourcing Pattern(这个可以翻译成 “事件朔源模式“) 的核心是将系统中的状态变更以事件序列的形式记录下来,并存储在事件存储中,而不是直接保存当前状态。这些事件记录了每次状态变更的具体细节,允许通过重放事件来重建系统的当前状态。

模式核心:

  1. 事件存储:作为一个记录所有事件的存储系统,它类似消息代理,服务可以通过 API 订阅这些事件。

  2. 事件重放:为了重建当前状态,事件存储中的事件会按顺序重放。如果事件量大,可利用快照优化,只需重放快照之后的事件。

  3. 事件广播:当一个事件被记录后,会被推送给所有订阅者,实现事件驱动的交互。

图片

主要优点

  1. 完整的审核跟踪:系统保留了所有状态变更的历史记录,便于审计、调试和了解系统的演变过程。

  2. 高扩展性:仅存储事件的方式支持高效的写入操作,能够处理高并发和多消费者之间的大量写入请求。

  3. 灵活的功能扩展:通过引入新的事件类型,可以轻松添加新功能,而无需修改现有逻辑。

面临的挑战

  1. 实现复杂性:与传统方法相比,管理事件流和重建状态需要更复杂的设计,并且团队需要时间掌握相关实践。

  2. 存储空间消耗:因为所有事件都必须永久存储,用于追溯和重建,存储需求可能远高于传统方法。

  3. 复杂的查询需求:直接查询事件数据通常较困难,必须依赖事件重建当前状态,可能导致性能问题。

Saga Pattern

Saga 模式是一种专为分布式系统设计的事务管理方式,用于协调跨多个微服务或数据库的长时间运行的业务事务。它将事务拆分为一系列本地事务,每个本地事务独立完成数据库更新并通过事件触发下一步操作。如果某一步失败,Saga 会执行补偿事务以撤销已完成的操作,从而保证数据的一致性。

图片

下面是带有补偿事务的 saga 模式的说明示例:

图片

img

Saga 模式的协调方式:

1)Choreography(协作式编排)

图片

  • 每个服务监听特定事件并触发下一步操作。

  • 无需中央控制,事件驱动的方式分散了服务间的压力,适合更去中心化的架构。

  • 示例:订单服务完成订单后发布事件,支付服务监听该事件并执行支付操作,支付完成后发布支付成功事件,触发后续物流服务。

2)Orchestration(集中式编排)

图片

img

  • 由一个中央编排器负责协调 Saga 的执行。

  • 编排器明确指示每个服务何时执行事务,并负责管理事务的整体流程。

  • 示例:一个专门的 Saga 管理器控制每个步骤的执行,确保从下单到支付再到发货按顺序完成。

虽然 "Choreography" 和 "Orchestration" 都可以翻译为“编排”,它们在实现方式上有显著差异:

  • Choreography 是对等模型,多个服务协作完成事务,强调去中心化。

  • Orchestration 是层次化模型,由中央服务负责协调,强调集中管理。

Saga 模式的主要优点

  1. 数据最终一致性:在分布式环境中,通过一系列事件和补偿操作,实现跨多个服务的数据一致性。

  2. 弹性增强:将事务分解为小的独立步骤,结合补偿机制,使系统在发生故障时能够快速恢复并保持一致性。

面临的挑战

  1. 复杂性增加:补偿事务的设计和步骤的正确协调需要额外的开发工作,增加了系统实现和维护的难度。

  2. 缺乏自动回滚:不像传统的 ACID 事务,Saga 模式没有内置的回滚机制,开发人员需要手动设计补偿逻辑以撤销已执行的操作。

  3. 隔离性不足:Saga 不保证事务隔离,多个并发执行的 Saga 可能导致数据异常或冲突,需要额外的机制解决并发问题。

Saga 模式特别适合需要数据最终一致性、支持跨服务事务且容错能力强的分布式系统。通过在 Choreography 和 Orchestration 之间选择合适的方式,可以灵活满足不同场景的需求。然而,其实现复杂性和数据隔离问题需要在设计时重点考虑。

Sidecar Pattern

Sidecar 模式是一种将服务中的非核心功能分离到独立组件(称为 Sidecar 容器)的设计模式。这种模式允许核心服务专注于其主要职责,而 Sidecar 则负责处理辅助任务,如日志记录、监控或安全管理。通过这种解耦方式,增强了系统的模块化和可扩展性,同时避免了对核心服务代码的直接修改。

图片

Sidecar 模式的典型用例

  1. 日志记录与监控:Sidecar 收集核心服务的日志或性能指标,并将其发送到集中式日志系统或监控工具。比如 一个 Sidecar 容器监控主服务的流量,并向 Prometheus 或 ELK 等系统推送数据。

  2. 安全管理:Sidecar 负责身份验证、授权和加密等任务,从而简化主服务的安全实现。比如使用 Sidecar 执行 TLS 加密,为核心服务提供安全通信支持。

Sidecar 模式的主要优点

  1. 模块化和灵活性:通过将辅助功能封装到 Sidecar 容器中,开发人员可以轻松添加或移除功能,无需改动核心服务的代码。另外,这种设计促进了代码重用,提升了系统的可维护性。

  2. 关注点分离:核心服务与 Sidecar 容器独立运行,隔离了辅助功能,降低了因 Sidecar 故障导致核心服务受影响的风险。

  3. 独立扩展性:核心服务和 Sidecar 可以分别根据各自的需求进行扩展,提升资源利用率和系统弹性。

Sidecar 模式的主要缺点

  1. 增加系统复杂性:需要额外的容器部署和协调工作,增加了运维和管理的复杂度。比如 Kubernetes 环境中需要为每个 Pod 配置 Sidecar,增加了部署开销。

  2. 潜在的单点故障:如果 Sidecar 容器失效,可能导致辅助功能不可用,需要冗余机制确保高可用性。

  3. 性能开销:引入额外的通信路径,可能导致延迟上升,尤其在需要高实时性或高性能的场景中表现明显。

  4. 同步和协调挑战:主服务与 Sidecar 之间需要保持严格同步,特别是在动态环境中,可能带来调试和配置上的困难。

总的来说,Sidecar 模式适用于微服务架构,尤其是在需要处理跨服务的通用功能时,如安全、日志或监控。尽管引入了额外的复杂性,但它通过解耦核心功能和辅助功能,提供了更大的灵活性和可扩展性。在设计时需仔细权衡其性能开销与管理难度,以确保满足系统需求。

Circuit Breaker Pattern

断路器模式(Circuit Breaker Pattern)是一种增强分布式系统弹性与稳定性的设计模式。它通过监控服务调用的状态,在检测到连续故障后中断请求流,防止故障蔓延,确保系统能够优雅降级并快速恢复。

图片

断路器的运行机制:

断路器通常有以下三种主要状态,每个状态对应服务调用的不同处理方式:

  1. Closed(闭合):

    • 请求正常传递到服务,并监控响应状态。

    • 当检测到失败次数超过预设的阈值时,断路器会转为 Open(断开) 状态。

  2. Open(断开):

    • 阻止请求传递到服务,并直接返回错误或触发回退逻辑。

    • 此状态为服务提供恢复时间,避免进一步施加压力。

  3. Half-Open(半开):

    • 在预定义的恢复时间后,断路器允许少量测试请求通过以评估服务是否恢复。

    • 如果这些请求成功,断路器返回 Closed(闭合) 状态;否则回到 Open(断开) 状态。

断路器模式的优点

  1. 防止级联故障:当某服务不可用时,及时中断请求流,防止故障扩散至系统其他部分。

  2. 增强系统弹性:通过隔离和控制故障,确保系统的其他部分能够持续运行,避免全局性崩溃。

  3. 可靠性提升:在服务出现问题时,通过回退机制或错误响应,确保系统以可控方式对外提供服务,改善用户体验。

断路器模式的主要挑战:

  1. 阈值与恢复时间的配置:需要根据系统的特性与业务需求仔细调整阈值(如失败次数、时间窗口)和恢复时间,避免误判或延迟恢复。

  2. 回退机制设计:系统需要有效的回退逻辑,以便在服务不可用时提供合理的替代响应。比如在搜索服务故障时,提供默认推荐或缓存数据,而不是返回完全的错误。

  3. 复杂的监控与调试:分布式系统中,诊断断路器触发的原因或定位问题点可能较为复杂,特别是在系统调用链较长时。

使用场景

  • 外部 API 调用:在调用第三方服务时,避免因其不可用而拖垮本地系统。

  • 微服务架构:隔离关键微服务故障对全局的影响,保障整体系统的稳定性。

  • 高并发系统:在流量高峰时,通过断路器避免部分服务过载。

Anti-Corruption Layer(ACL)

ACL模式(反腐败层)旨在保护内部系统不受外部系统设计、协议和数据模型的影响。它通过在两个系统之间设置一层“屏障”,确保外部系统的复杂性或不一致性不会破坏内部系统的设计与稳定性。ACL 在系统架构中的作用类似于一个保护层,隔离了外部系统的变化对内部系统的影响。通过引入反腐败层,外部系统的变化不需要直接影响到内部系统的核心逻辑和数据模型。

图片

ACL 内部的设计可以这样表示:

图片

ACL 模式的主要优点

  • 保护:保护内部系统免受外部更改和潜在损坏的影响。

  • 灵活性:通过管理数据模型和协议的差异,更轻松地与外部系统集成。

  • 可维护性:简化对内部或外部系统的修改和更新,而不影响另一个系统。

ACL 模式的主要缺点

  • 延迟:两个系统之间的调用会增加延迟。

  • 扩展:使用许多微服务或整体应用程序扩展 ACL 可能是开发团队关心的问题。

  • 增加复杂性:由于需要翻译和适应逻辑,引入了额外的复杂性。

Aggregator Pattern

Aggregator Pattern(聚合器)核心是将多个源的数据或响应合并为一个统一的结果。Aggregator 组件或服务管理来自不同源的数据收集,协调获取、合并和处理数据的过程。

图片

以下是聚合器模式的主要好处:

  • 简化的客户端交互:客户端与一个服务或端点交互,降低了复杂性并提高了易用性。

  • 减少网络调用:将多个来源的数据聚合到一处,最大限度地减少客户端所需的调用或请求数量,并提高整体效率。

  • 集中数据处理:集中处理数据处理和转换,确保不同数据源之间的一致性和连贯性。

以下是这种模式的缺点:

  • 增加复杂性:实现聚合逻辑可能很复杂,尤其是在处理不同的数据源和格式时。

  • 单点故障:由于聚合器充当数据收集的中心点,因此聚合器的任何问题或故障都可能影响整个系统的可用性或功能。

  • 延迟增加:聚合来自多个源的数据可能会带来额外的延迟,特别是当源是分布式的或者聚合涉及复杂的处理时。

  • 可扩展性挑战:扩展聚合器以处理不断增加的数据或请求量可能具有挑战性,需要仔细设计来管理负载并确保响应能力。

相关文章:

10 种微服务设计模式

微服务的优势与挑战 在详细介绍设计模式之前,我觉得有必要先重申下微服务的概念以及它带来的挑战。 微服务是大型应用程序的一个小型、可独立部署的组件,专注于特定功能。每个微服务都运行自己的进程,通常通过 API 与其他服务进行通信&…...

深入拆解 MinerU 解析处理流程

概述 MinerU更新频率也相当频繁,在短短一个月内,更新了10个小版本。 本文结合最新版本v1.3.10,深入拆解下它进行文档解析时的内部操作细节。 MinerU仓库地址:https://github.com/opendatalab/MinerU 环境准备 在之前的文章中,已经安装了magic-pdf(MinerU的解析包名),…...

Nginx部署Vue+ElementPlus应用案例(基于腾讯云)

案例代码链接:https://download.csdn.net/download/ly1h1/90735035 1.参考链接: 基于以下两个链接的参考,创建项目 1.1.基于Vue3前端项目创建-CSDN博客 1.2.基于Vue3引入ElementPlus_vue如何引入elementplus-CSDN博客 2.修改main.js&#…...

设计模式简述(十六)门面模式

门面模式 描述基本组件 描述 门面模式是一种概念相对简单的设计模式。 其核心思想就是:封装内部子系统的复杂调用,提供一个门面对象供外部调用。 基本组件 定义子系统对象(这里做了简化,没有声明抽象) public clas…...

云原生后端:构建高效、可扩展的现代后端架构

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 随着云计算技术的迅猛发展,云原生(Cloud Native)架构已经成为现代软件开发的核心趋势。云原生后端指的是在云环境中构建和部署的后端系统,这些系统具有弹性、可扩展性、自动化运维等特性,能够更…...

基于bert的情感分析程序

文章目录 任务介绍数据概览注意事项数据处理代码准备模型构建与训练模型类构建数据集构建数据批处理模型参数查看模型训练结果推理与评估模型推理准确率评估附录任务介绍 在当今信息爆炸的时代,互联网上充斥着海量的文本数据,如社交媒体评论、产品评价、新闻报道等。这些文本…...

情境领导理论——AI与思维模型【89】

一、定义 情境领导理论思维模型是一种强调领导者应根据下属的成熟度(包括工作能力和工作意愿两个方面)来调整领导风格,以实现有效领导的动态理论。该模型认为,没有一种放之四海而皆准的领导方式,领导者的行为要与下属…...

WPF之ProgressBar控件详解

文章目录 1. ProgressBar控件简介2. ProgressBar的基本属性和用法2.1 基本属性2.2 基本用法2.3 代码中修改进度 3. 确定与不确定模式3.1 确定模式(Determinate)3.2 不确定模式(Indeterminate) 4. 在多线程环境中更新ProgressBar4.…...

计算机网络01-网站数据传输过程

局域网: 覆盖范围小,自己花钱买设备,宽带固定,自己维护,,一般长度不超过100米,,,带宽也比较固定,,,10M,,&…...

泰迪杯特等奖案例学习资料:基于边缘计算与多模态融合的温室传感器故障自诊断系统设计

(第十四届泰迪杯数据挖掘挑战赛A题特等奖案例解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 在现代智能温室中,传感器网络是环境调控的核心依据,但其长期运行面临以下挑战: 数据异常频发: 传感器老化:温湿度传感器SHT35的精度在连续使用2年后可能漂移1℃。 环…...

力扣面试150题--分隔链表

day 39 题目描述 思路 遍历链表,每一个点与值比较,比值小就继续,比值大就放到链表尾部即可 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int…...

Shell 脚本基础

一、Shell 简介 1.Shell 的定义与作用 Shell,通常被称为命令行解释器 (Command Line Interpreter),是用户 👤 与 Linux/Unix 操作系统内核进行交互 ↔️ 的“桥梁” 🌉。它扮演着翻译官 🗣️ 的角色: 接…...

【AI面试准备】元宇宙测试:AI+低代码构建虚拟场景压力测试

介绍元宇宙测试:AI低代码构建虚拟场景压力测试(如数字孪生工厂)。如何快速掌握,以及在实际工作中如何运用。 目录 **元宇宙测试:AI低代码构建虚拟场景压力测试****一、元宇宙测试的核心挑战与需求**1. **元宇宙测试的独…...

【网络层】之IP协议

网络层之IP协议 网络层的作用IP地址不足的问题私网IP和公网IP网段划分传统的网段划分的方法CIDR网段划分路由器的角色理解运营商的角色子网划分的过程 路由表IP协议介绍报文如何分离、交付 网络层的作用 IP协议是网络层的一种典型协议,只要弄清楚了IP协议的作用&…...

AI编译器对比:TVM vs MLIR vs Triton在大模型部署中的工程选择

引言:大模型部署的编译器博弈 随着千亿参数大模型成为常态,推理延迟优化成为系统工程的核心挑战。本文基于NVIDIA A100与Google TPUv4平台,通过BERT-base(110M)和GPT-2(1.5B)的实测数据&#x…...

【dify—10】工作流实战——文生图工具

目录 一、创建工作流 应用 二、安装硅基流动 三、配置硅基流动 四、API测试 (1)进入API文档 (2)复制curl代码 (3)Postman测试API 五、 建立文生图工作流 (1)建立http请求 &…...

企业级分布式 MCP 方案

飞书原文档链接地址:https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 [!TIP] 背景:现阶段 MCP Client 和 MCP Server 是一对一的连接方式,若当前 MCP Server 挂掉了,那么 MCP Client 便不…...

玩转Docker(一):基本概念

容器技术是继大数据和云计算之后又一炙手可热的技术,而且未来相当一段时间内都会非常流行。 本文将对其基本概念和基本使用做出介绍。包括容器生态系统、容器的原理、怎样运行第一个容器、容器技术的概念与实践、Docker镜像等等 目录 一. 鸟瞰容器生态系统 1. 容器…...

Linux系统安装方式+适合初学者的发行版本

Linux系统安装方式适合初学者发行版—目录 一、Linux系统的安装方式1. 物理机直接安装2. 虚拟机安装3. 双系统安装4. Live USB试用5. 云服务器安装 二、适合初学者的Linux发行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、选择建议场…...

开启 Spring AI 之旅:从入门到实战

开启 Spring AI 之旅:从入门到实战 引言 在当今人工智能飞速发展的时代,Spring AI 为开发者们提供了一个强大而便捷的工具,用于在 Spring 生态系统中构建 AI 应用程序。本文将为你提供如何开始使用 Spring AI 的详细指南,帮助你…...

python数据分析(七):Pandas 数据变形与重塑

Pandas 数据变形与重塑全面指南 1. 引言 在数据分析过程中,我们经常需要将数据从一种结构转换为另一种结构,以适应不同的分析需求。Pandas 提供了丰富的数据变形与重塑功能,包括旋转(pivot)、堆叠(stack)、融合(melt)等多种操作。本文将详细…...

SX24C01.UG-PXI程控电阻桥板卡

PXI程控电阻桥板卡 概述 简介 程控电阻桥板卡采用4 个可程控精密调节的电阻臂组成桥式电路,通过计算机PXI总线控制继电器通断进行电阻调节;可根据具体情况,方便地选择不同桥路的连接;程控电阻桥板卡支持“1/4 桥”、“半桥”和…...

Python项目源码69:一键解析+csv保存通达信日线数据3.0

Python项目源码39:学生积分管理系统1.0(命令行界面Json) Python项目源码38:模拟炒股系统2.0(tkinterJson) Python项目源码35:音乐播放器2.0(Tkintermutagen) Python项…...

Conda 与 Spyder 环境管理

前言 作为 Python 科学计算领域的黄金搭档,Anaconda 和 Spyder 为研究人员和数据分析师提供了强大的工作环境。本文将详细介绍如何使用 Conda 管理 Python 环境,并在 Spyder IDE 中灵活切换这些环境,助你打造高效的 Python 开发工作流。 一…...

头皮理疗预约小程序开发实战指南

生活服务类小程序开发正成为互联网创业的热点领域,头皮理疗预约小程序作为其中的细分品类,具有广阔的市场前景和用户需求。基于微信小程序原生开发或uniapp框架,结合Java后端和MySQL数据库,可构建一个功能完善、性能稳定且易于维护的头皮理疗预约平台。本文将从零开始,详细…...

cPanel 的 Let’s Encrypt™ 插件

在 cPanel & WHM 中,推出了一个名为 AutoSSL 的功能。可能有些朋友还不了解 AutoSSL,它是一个能够自动为您的网站申请和安装免费 SSL 证书的工具,这些证书由 Comodo 签发,保证网站的安全性。 AutoSSL 与 Let’s Encrypt Let’…...

《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)

目录 第十一章:Android 中的图片加载与缓存(Glide 使用详解) 🔹 11.1 Glide 简介 🔸 11.2 添加 Glide 依赖 🔸 11.3 基本用法 ✦ 加载网络图片到 ImageView: ✦ 加载本地资源 / 文件 / UR…...

MySQL 中的游标(Cursor)

一、游标的作用 ​​逐行处理数据​​:当需要对查询结果集中的每一行进行特定操作(如计算、条件判断、调用其他过程)时使用。​​替代集合操作​​:在无法通过单一 SQL 语句完成复杂逻辑时,游标提供逐行处理的能力。​…...

【嵌入式Linux】基于ARM-Linux的zero2平台的智慧楼宇管理系统项目

目录 1. 需求及项目准备(此项目对于虚拟机和香橙派的配置基于上一个垃圾分类项目,如初次开发,两个平台的环境变量,阿里云接入,摄像头配置可参考垃圾分类项目)1.1 系统框图1.2 硬件接线1.3 语音模块配置1.4 …...

记忆翻牌游戏:认知科学与状态机的交响曲

目录 记忆翻牌游戏:认知科学与状态机的交响曲引言第一章 网格空间拓扑学1.1 自适应网格算法1.2 卡片排布原理 第二章 状态机设计2.1 状态跃迁矩阵2.2 时空关联模型 第三章 记忆强化机制3.1 认知衰减曲线3.2 注意力热力图 第四章 动画引擎设计4.1 翻牌运动方程4.2 粒…...

【业务领域】InfiniBand协议总结

InfiniBand协议总结 InfiniBand协议是什么?Infiniband产生的原因Mellanox公司介绍及其新闻基于TCP/IP的网络与IB网络的比较IB标准的优势什么是InfiniBand网络什么是InfiniBand架构Mellanox IB卡介绍InfiniBand速率发展介绍InfiniBand网络主要上层协议InfiniBand管理…...

使用Java正则表达式检查字符串是否匹配

在Java开发中,正则表达式(Regular Expression,简称Regex)是处理字符串的强大工具,广泛应用于模式匹配、数据验证和文本处理。Java通过java.util.regex包提供了对正则表达式的支持,包含Pattern和Matcher两个…...

个人健康中枢的多元化AI硬件革新与精准健康路径探析

在医疗信息化领域,个人健康中枢正经历着一场由硬件技术革新驱动的深刻变革。随着可穿戴设备、传感器技术和人工智能算法的快速发展,新一代健康监测硬件能够采集前所未有的多维度生物数据,并通过智能分析提供精准的健康建议。本文将深入探讨构成个人健康中枢的最新硬件技术,…...

Android基础控件用法介绍

Android基础控件用法详解 Android应用开发中,基础控件是构建用户界面的核心元素。本文将详细介绍Android中最常用的基础控件及其用法。 一、TextView(文本显示控件) TextView用于在界面上显示文本信息。 基本用法 <TextViewandroid:id="@+id/textView"andr…...

iO(不可区分混淆)是Web3隐私的圣杯?

1. 引言 iO 是区块链隐私的圣杯吗&#xff1f;本文将探讨&#xff1a; 不可区分混淆&#xff08;indistinguishability obfuscation, iO&#xff09;的局限性iO可能带来的变革iO为何重要&#xff1f;iO是否能真正成为可信硬件的替代方案&#xff1f; 区块链隐私面临的最大挑…...

文章三《机器学习基础概念与框架实践》

文章3&#xff1a;机器学习基础概念与框架实践 ——从理论到代码&#xff0c;用Scikit-learn构建你的第一个分类模型 一、机器学习基础理论&#xff1a;三大核心类型 机器学习是人工智能的核心&#xff0c;通过数据让计算机自动学习规律并做出预测或决策。根据学习方式&#…...

中小企业MES系统概要设计

版本&#xff1a;V1.0 日期&#xff1a;2025年5月2日 一、系统架构设计 1.1 整体架构模式 采用分层微服务架构&#xff0c;实现模块解耦与灵活扩展&#xff0c;支持混合云部署&#xff1a; #mermaid-svg-drxS3XaKEg8H8rAJ {font-family:"trebuchet ms",verdana,ari…...

自动化测试项目1 --- 唠嗑星球 [软件测试实战 Java 篇]

目录 项目介绍 项目源码库地址 项目功能测试 1.自动化实施步骤 1.1 编写测试用例 1.2 自动化测试脚本开发 1.2.1 配置相关环境, 添加相关依赖 1.2.2 相关代码编写 2. 自动化功能测试总结 2.1 弹窗的解决相关问题 2.2 断言的使用和说明 2.3 重新登录问题 项目性能…...

c语言 关键字--目录

1.c语言 关键字 2.typedef 关键字 3.volatile 关键字 4.register 关键字 5.const关键字用法 6.extern关键字...

C语言与指针3——基本数据类型

误区补充 char 的 表示范围0-127 signed char 127 unsigned char 0-255enum不常用&#xff0c;但是常见&#xff0c;这里记录一下。 enum Day {Monday 1,//范围是IntTuesday 2,Wednesday 3 }; enum Day d Monday; switch (d) {case Monday:{printf("%d",Monday);…...

[更新完毕]2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题

完整内容请看文章最下面的推广群 社交媒体平台用户分析问题 在问题一中为解决博主在特定日期新增关注数的预测问题&#xff0c;本文构建了基于用户历史行为的二分类模型。首先&#xff0c;从用户对博主的观看、点赞、评论、关注等交互行为中提取统计与时序特征&#xff0c;形成…...

使用Vite创建vue3项目

什么是vite Vite 是新一代构建工具&#xff0c;由 Vue 核心团队开发&#xff0c;提供极快的开发体验。 它利用浏览器原生ES模块导入功能&#xff0c;提供了极快的热模块更新&#xff08;HMR&#xff09;和开发服务器启动速度。 官网&#xff1a;https://vitejs.cn/vite3-cn/…...

Linux管道识

深入理解管道 (Pipes)&#xff1a;连接命令的瑞士军刀 在 Linux 和类 Unix 系统&#xff08;包括 macOS&#xff09;的命令行世界里&#xff0c;管道&#xff08;Pipe&#xff09;是一个极其强大且基础的概念。它允许你将一个命令的输出直接作为另一个命令的输入&#xff0c;像…...

LabVIEW 中VI Server导出 VI 配置

该 LabVIEW VI 展示了在 VI Server 中配置和执行 Exported VIs 的过程&#xff0c;实现对服务器端导出 VI 的远程调用与操作。 ​ 具体过程及模块说明 前期配置&#xff1a;需确保在 LabVIEW 的 “Tools> Options > VI Server > Protocols” 路径下&#xff0c;启用 …...

map和set的遗留 + AVL树(1):

在讲解新的东西之前&#xff0c;我们把上节遗留的问题说一下&#xff1a; 遗留问题&#xff1a; 首先&#xff0c;我们的最上面的代码是一个隐式类型转换&#xff0c;我们插入了一对数据。 我们说了&#xff0c;我们的方括号的底层是insert&#xff0c;当我们调用operator的[…...

Java学习手册:Spring Security 安全框架

一、Spring Security 简介 Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架&#xff0c;用于保护 Java 应用程序&#xff0c;尤其是基于 Spring 的应用。它构建在 Spring 框架之上&#xff0c;能够轻松地集成到基于 Spring 的应用程序中&#xff0c;包括…...

pip 常用命令及配置

一、python -m pip install 和 pip install 的区别 在讲解 pip 的命令之前&#xff0c;我们有必要了解一下 python -m pip install 和 pip install 的区别&#xff0c;以便于我们在不同的场景使用不同的方式。 python -m pip install 命令使用 python 可执行文件将 pip 模块作…...

C++_STL

C 标准模板库&#xff08;Standard Template Library&#xff0c;STL&#xff09;是一套功能强大的 C 模板类和函数的集合&#xff0c;它提供了一系列通用的、可复用的算法和数据结构。 STL 的设计基于泛型编程&#xff0c;这意味着使用模板可以编写出独立于任何特定数据类型的…...

[FPGA Video] AXI4-Stream Remapper

Xilinx AXI4-Stream Remapper IP (PG379) 详细介绍 概述 Xilinx LogiCORE™ IP AXI4-Stream Remapper 核是一个专为视频处理设计的模块&#xff0c;用于在不同每时钟像素数&#xff08;Pixels Per Clock, PPC&#xff09;要求之间重新映射视频像素。它支持将输入 AXI4-Stream…...

【数据结构】励志大厂版·初阶(复习+刷题):栈与队列

前引&#xff1a;本篇将由小编与大家一起复习 栈 、队列 的知识点&#xff0c;栈、队列的顺序、链式结构各个缺点好处&#xff0c;如何实现、对于一般的增删查找此篇文章一定再详细不过&#xff01;对代码的注释、何时需要判断、特殊情况&#xff0c;白话文版一解到底&#xff…...