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

从单体到微服务:如何借助 Spring Cloud 实现架构转型

一、Spring Cloud简介

Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。

Spring Cloud 提供了诸如服务发现、配置管理、负载均衡、断路器、消息总线等一系列功能,简化了微服务的开发和运维。

image-20241206011507549

Spring Cloud官网:https://spring.io/projects/spring-cloud

image-20241206011455898

二、发展

2.1 发展历程

Spring Cloud 的发展历程是与微服务架构的发展以及云原生技术的普及紧密相连的。以下是 Spring Cloud 发展的一个详细时间线:

  • 2013年:Spring Boot 正式发布,简化了基于Spring的应用程序创建和部署过程。它通过自动配置机制减少了显式配置的需求,并支持独立运行、内嵌服务器、生产就绪特性等。
  • 2014年:随着 Netflix 公司推出了一系列开源的微服务工具包(Netflix OSS),包括 Eureka(服务发现)、Hystrix(熔断器)、Zuul(API网关)等,Spring Cloud 开始形成。这些工具被广泛应用于 Netflix 的分布式系统中。Spencer Gibb 和 Josh Long 等人意识到可以将 Netflix OSS 技术与 Spring 框架相结合,降低构建微服务的技术难度和成本,从而开始了 Spring Cloud 项目的开发。

Netflix(中文常称为奈飞公司)是全球领先的在线流媒体服务提供商,总部位于美国加利福尼亚州洛斯盖图斯。公司成立于1997年,由 Reed HastingsMarc Randolph 创办,最初作为一个DVD租赁平台运营。随着互联网技术的进步,Netflix逐渐转型为在线流媒体平台,推出了按需观看的订阅服务,并迅速成为全球娱乐行业的巨头。

4a71eecb-7963-46ff-95b3-3285efa59c7b

​ Spencer Gibb

image

Josh Long

  • 2015年:Spring Cloud 项目进入稳定发展阶段,发布了多个子项目来解决微服务架构中的关键问题,例如:

    • Spring Cloud Config:用于集中化管理应用的所有环境下的配置。
    • Spring Cloud Netflix Eureka:服务注册与发现组件。
    • Spring Cloud Hystrix:实现断路器模式,防止故障传播。
    • Spring Cloud Zuul:作为API网关,提供路由、过滤等功能。
  • 2016年:Spring Cloud 继续扩展,引入了更多项目如 Spring Cloud StreamSpring Cloud Function,并且 Spring Cloud Netflix 项目也得到了进一步完善和发展。

  • 2017年:Spring Cloud 探索服务网格(Service Mesh)技术,研究如何将 Istio 等服务网格技术与自身集成,以更好地支持微服务的监控、安全性和流量控制。

  • 2018年:整合与演进的一年,Spring Cloud 发布了 Spring Cloud Data Flow 来简化数据驱动的微服务应用开发,并加强了安全性功能,集成了 Spring Security 提供更全面的安全解决方案。

  • 2019年:Spring Cloud 向 Serverless 架构转变,发布了 Spring Cloud Function for Kubernetes,允许开发者在 Kubernetes 上以无服务器的方式运行 Spring Boot 函数,适应了云原生计算基金会(CNCF)生态系统的趋势。

  • 2020年及之后:Spring Cloud 持续创新,适应最新的技术和市场需求。比如:

    • 引入了对 Spring Native 的支持,使 Spring 应用可以编译为本地二进制文件,提高了启动速度和运行效率。
    • 扩展其对云原生和微服务的支持,如发布 Spring Cloud Alibaba,适配国内的技术生态。
    • 发布了新的版本号命名方案,第一个使用该方案的版本是 Spring Cloud 2020.0.0,标志着一个新时代的到来。
  • 2024年:到目前为止,Spring Cloud 持续更新,保持与新兴技术同步。它继续增强对容器化、Kubernetes 和其他云原生技术的支持,同时也关注于提高性能、简化操作以及提供更加丰富的微服务治理能力。

Spring Cloud 的发展史是不断适应新的技术挑战和市场需求的历史。它不仅推动了Java社区内的微服务实践,也为全球开发者提供了强大的工具链来构建灵活、可扩展且易于维护的云原生应用程序。

2.2 版本发展

Spring Cloud 的版本发展历程反映了其在微服务架构中的持续演进和技术适应。以下是 Spring Cloud 版本发展的详细时间线,涵盖了主要版本发布和重要变化:

早期阶段

  • 2015年:Spring Cloud 发布了它的第一个版本,即 Angel​ 系列。这一系列的版本为 Spring Cloud 奠定了基础,引入了诸如 Spring Cloud Netflix、Spring Cloud Config 和 Spring Cloud Bus 等关键组件。

主要版本发布

  • Brixton (2016年) :这是 Spring Cloud 的一个重要里程碑,它带来了更稳定的 API 和更多的特性支持。
  • Camden (2016年末至2017年初) :这个版本继续增强了功能,并对之前版本中的一些问题进行了修复。
  • Dalston (2017年3月) :引入了一些新的特性和改进,特别是针对 Spring Boot 1.5.x 的兼容性。
  • Edgware (2017年10月) :进一步加强了与 Spring Boot 2.0 的兼容性准备,并且添加了对新发布的 Spring Framework 5 的支持。
  • Finchley (2018年4月) :正式支持了 Spring Boot 2.0,并引入了新的模块如 Spring Cloud Gateway 来替代 Zuul 作为推荐的网关解决方案。
  • Greenwich (2018年12月) :继续增强 Spring Boot 2.0 和 Spring Framework 5 的集成,同时增加了对 Reactive 编程的支持。
  • Hoxton (2019年11月) :这是一个重要的版本,它标志着从基于旧版 Netflix OSS 组件(Eureka, Hystrix, Ribbon, Zuul)向新一代组件转变的关键点。例如,引入了 Spring Cloud Circuit Breaker 以统一熔断器编程模型,并用 Spring Cloud LoadBalancer 取代了 Netflix Ribbon。

新时代命名方案

  • 2020年:Spring Cloud 宣布采用全新的版本号命名方案,不再使用字母表顺序的名字,而是改为基于年份和季度的格式,比如 2020.0.x​,这被称为 “Ilford” 版本。这种新的命名方式旨在更好地反映项目的迭代周期,并简化版本管理和依赖关系处理。
  • 2020.0.x (Ilford) (2020年12月) :该版本是首个使用新命名方案的版本,基于 Spring Boot 2.4 和 Spring Framework 5.3。它还计划移除处于维护模式的老化项目,并简化了 Spring Cloud 的发布列车机制。

最近的发展

  • 2021年及以后:随着云原生技术和微服务架构的不断发展,Spring Cloud 持续更新,以适应最新的技术和市场需求。例如:

    • Spring Native 的支持,使得 Spring 应用可以编译成本地二进制文件,提高了启动速度和运行效率。
    • 扩展其对云原生的支持,如 Spring Cloud Alibaba,以便更好地适配国内技术生态。
    • 强化与 Kubernetes 的集成,以及对 Serverless 架构的支持。
  • 2024年:到目前为止,Spring Cloud 保持着与新兴技术同步的步伐,持续优化性能、简化操作流程,并提供更加丰富的微服务治理能力。最新版本通常会包含对最新 Spring Boot 和 Spring Framework 的支持,以及其他社区贡献的新特性和改进。

三、特点

3.1 主要特点

组件丰富,功能齐全

  • Spring Cloud 集成了多个子项目,每个子项目都专注于解决微服务架构中的某个特定问题,如配置管理(Spring Cloud Config)、服务发现(Eureka、Consul、Zookeeper)、断路器(Hystrix)、API网关(Zuul、Spring Cloud Gateway)、消息总线(Spring Cloud Bus)等。
  • 这些组件基本覆盖了日常开发中遇到的各种需求,确保开发者能够快速找到合适的工具来解决问题。

开箱即用,快速启动

  • 由于基于 Spring Boot 构建,Spring Cloud 继承了其自动配置的优势,使得开发者可以轻松地创建独立运行的应用程序,而无需复杂的配置文件。
  • 开发者只需引入相应的依赖项并遵循简单的约定,就可以立即开始使用这些强大的功能。

模块化部署,降低维护难度

  • 在 Spring Cloud 中,应用程序通常被拆分为多个独立的服务或模块,每个模块都可以单独开发、测试、部署和扩展。
  • 模块间的松耦合特性减少了不同部分之间的相互影响,从而降低了整个系统的复杂度,提高了项目的可维护性和灵活性。

良好的扩展性和稳定性

  • 基于微服务架构设计,各个服务拥有自己的数据库和其他资源,因此易于水平扩展以应对流量增长。
  • 同时,通过集成 Hystrix 等容错处理机制,当某一部分出现问题时,系统仍然能够保持稳定运行,避免了单点故障带来的风险。

提供全面的安全支持

  • Spring Cloud Security 提供了身份验证、授权等功能,保障了微服务间的通信安全。
  • 支持 OAuth2、JWT 等标准协议,允许开发者根据实际需要选择合适的安全策略。

与云平台和服务网格的良好兼容性

  • Spring Cloud 可以很好地与各大云服务平台(如 AWS、Azure、Google Cloud Platform)以及服务网格(如 Istio)进行整合。
  • 它不仅支持传统的 IaaS 和 PaaS 平台,还为 Kubernetes 等容器编排工具提供了良好的支持,便于在现代云环境中部署和管理应用。

社区活跃和技术文档完善

  • Spring Cloud 拥有一个庞大的开源社区,众多贡献者不断为其添加新特性和修复bug。
  • 官方网站上有详尽的技术文档、示例代码和教程,方便初学者学习和进阶开发者深入研究。

具有容错处理机制

  • 项目实际开发中可能会因为网络连接失败、超时、服务器硬件故障等原因导致某些模块无法正常运行,Spring Cloud 提供了如 Hystrix 断路器组件,专门用于处理这类情况,确保即使某一模块出错后,系统也能有其他备用方案或者善后处理措施。

综上所述,Spring Cloud 凭借其丰富的特性集、易用性和强大的社区支持,成为了当今最流行的微服务框架之一,极大地促进了软件开发领域内的创新与发展。如果您有关于具体特性的更详细问题,请随时提问!

3.2 与其他微服务解决方案对比

Spring Cloud 与其他微服务解决方案的对比可以从多个角度进行分析,包括但不限于架构设计、社区支持、技术栈兼容性、功能特性、部署灵活性以及性能等方面。以下是 Spring Cloud 与一些其他流行的微服务框架和解决方案之间的比较:

1. Spring Cloud vs. Dubbo

  • 架构完整性

    • Spring Cloud 提供了一站式的微服务解决方案,涵盖了配置管理、服务发现、负载均衡、断路器等功能,适用于更广泛的分布式系统需求。
    • Dubbo 更专注于服务治理层面,主要提供了高性能的服务调用机制(基于 RPC),需要额外集成其他工具来完成完整的微服务体系。
  • 社区活跃度

    • Spring Cloud 拥有一个非常活跃且庞大的开源社区,更新频繁,文档丰富,问题解决速度快。
    • Dubbo 的社区也相当活跃,特别是在中国地区,但由于历史原因曾经有一段时间停止了官方维护,不过现在已恢复并积极发展。
  • 协议支持

    • Spring Cloud 支持多种通信协议(HTTP, gRPC 等)和服务间调用方式(Feign, Ribbon 等)。
    • Dubbo 默认使用的是自定义的二进制协议,虽然也支持 HTTP 和 Hessian 协议,但在跨语言支持上不如 Spring Cloud。
  • 学习曲线

    • Spring Cloud 的组件较多,对于新手来说可能一开始会感觉复杂,但一旦掌握了基本原理后,开发效率很高。
    • Dubbo 的核心概念相对简单,如果只需要实现高效的服务调用,则更容易上手。

2. Spring Cloud vs. Service Mesh (如 Istio)

  • 抽象层次

    • Spring Cloud 是一个应用级别的框架,开发者需要直接在代码中引入依赖项并编写相关逻辑。
    • Service Mesh 则是基础设施级别的方案,通过代理(sidecar)模式在网络层面上处理服务间的交互,对应用程序透明。
  • 控制平面与数据平面分离

    • Spring Cloud 将所有功能都嵌入到了应用程序内部,因此没有明确的数据平面和控制平面之分。
    • Service Mesh 明确区分了这两者,控制平面负责策略管理和流量规则设置,而数据平面则执行实际的网络请求转发。
  • 适用场景

    • Spring Cloud 更适合于已经熟悉 Java 生态系统的团队,尤其是那些希望快速构建基于 JVM 的微服务应用的企业。
    • Service Mesh 如 Istio 更倾向于云原生环境下的多语言微服务架构,并且特别适用于高度动态变化的环境中,比如容器化部署。

3. Spring Cloud vs. KubeSphere / Kubernetes

  • 定位不同

    • Spring Cloud 是一个专门针对微服务的应用开发框架。
    • KubernetesKubeSphere 是容器编排平台,它们不仅限于微服务,而是为整个集群提供自动化运维能力,包括调度、扩展、监控等。
  • 集成程度

    • Spring Cloud 可以很好地与 Kubernetes 结合使用,例如通过 Helm Chart 方便地部署到 Kubernetes 集群中。
    • KubeSphere 作为 Kubernetes 的增强版,提供了图形化的界面和其他高级特性,简化了 Kubernetes 的操作,但它本身不是用来替代 Spring Cloud 的微服务功能。

总结

Spring Cloud:适用于 Java 开发者,特别是已经使用 Spring 生态的团队。提供了一整套功能丰富的微服务解决方案,特别注重易用性和与 Spring 生态系统的深度集成。

Kubernetes:更侧重容器化和基础设施层面的微服务管理,适合大规模、云原生的微服务架构。虽然不提供完整的应用级微服务功能,但可以与其他工具(如 Istio)结合使用。

Netflix OSS:适合需要高度定制化的微服务架构。Spring Cloud 其实是基于 Netflix OSS 构建的,适合对底层技术有较高要求的开发团队。

Apache Dubbo:专注于高性能 RPC,适合对低延迟、高吞吐量要求极高的应用场景。

Istio:更适合复杂的微服务网格,提供全面的流量管理、故障恢复、监控等功能,但也相对复杂,适合大规模的微服务架构。

选择哪种微服务解决方案取决于具体的业务需求和技术背景。如果您正在寻找一套全面、易于使用的Java微服务框架,并且您的团队已经熟悉了Spring生态系统,那么Spring Cloud可能是最佳选择。然而,如果您更关注服务网格提供的细粒度流量控制或者非JVM语言的支持,您可能会考虑像Istio这样的Service Mesh工具。对于大规模容器化部署的需求,Kubernetes则是不可或缺的基础平台。每个选项都有其独特的优势,在做决策时应该综合考量项目的特点和团队的技术栈。

四、架构及组件

4.1 架构

Spring Cloud 架构通常围绕以下几个核心概念构建:服务发现、负载均衡、配置管理、断路器、API 网关和消息总线等。这些概念通过不同的组件实现,以支持微服务架构中的各种需求。

在这里插入图片描述

4.2 组件

Spring Cloud 提供了许多用于实现微服务架构的关键组件,以下是一些核心组件的介绍:

1597213385700

Spring Cloud Netflix

Spring Cloud Netflix 是 Spring Cloud 的一部分,它整合了 Netflix 的多个开源项目,帮助开发人员构建高可用、可靠的微服务系统。

  • Eureka:一个服务注册与发现的工具,Eureka Server 作为服务注册中心,Eureka Client 用于服务的注册和发现,帮助服务自动发现对方的网络位置。
  • Ribbon:一个客户端负载均衡工具,支持 HTTP 和 TCP 协议的负载均衡。与 Eureka 配合使用时,Ribbon 可以动态选择一个健康的服务实例。
  • Hystrix:一个断路器工具,可以防止系统中出现级联故障。Hystrix 能够监控服务的健康状态,并在服务不可用时快速返回降级逻辑,防止故障蔓延。
  • Zuul:一个 API 网关,能够路由请求到微服务,并支持过滤器进行流量控制、负载均衡、身份验证等功能。Zuul 是一种边缘服务,可以将客户端请求转发到后端微服务。
  • Turbine:用于整合多个 Hystrix 实例的监控数据,将多个服务的监控信息聚合到一起,提供集中监控功能。

Spring Cloud Config

Spring Cloud Config 是一个用于集中管理和版本化微服务配置的组件,支持将配置存储在 Git、SVN 等版本控制系统中,支持配置的动态刷新。

  • Config Server:提供配置管理服务,可以从 Git 或其他版本控制系统加载配置信息,作为中心化配置服务。
  • Config Client:每个微服务作为客户端从 Config Server 获取配置。

Spring Cloud Stream

Spring Cloud Stream 是一个构建消息驱动微服务的框架,支持多种消息中间件(如 RabbitMQ、Kafka)作为消息队列来实现异步通信。

  • 提供了 Binder 抽象层,支持与消息中间件的集成。
  • 通过 Spring Integration 支持流式处理、事件驱动和消息的传递。

Spring Cloud Sleuth 和 Zipkin

  • Spring Cloud Sleuth:为分布式微服务系统提供链路跟踪功能,可以通过日志跟踪请求在微服务之间的流转路径。
  • Zipkin:一个分布式跟踪系统,用于收集和查询来自微服务的分布式跟踪数据,帮助开发者排查性能瓶颈和故障。

Spring Cloud Security

Spring Cloud Security 提供了微服务架构中的安全性控制,支持 OAuth2 等认证和授权协议,用于保护微服务的 API 安全性。

  • Spring Security OAuth2:帮助保护微服务,支持 JWT(JSON Web Tokens)和 OAuth2 协议,支持单点登录(SSO)。

Spring Cloud Bus

Spring Cloud Bus 是一种消息总线,帮助在多个服务实例之间传播事件(如配置变更、服务状态变化等)。它通常与 Spring Cloud Config 配合使用,在更新配置时自动广播配置变更。

Spring Cloud Gateway

Spring Cloud Gateway 是一个基于 Spring WebFlux 的 API 网关,支持反向代理、路由、负载均衡、限流、认证等功能。它是 Zuul 的替代品,提供了更高效的非阻塞式编程模型。

Spring Cloud LoadBalancer

Spring Cloud LoadBalancer 是 Spring 6.x 和 Spring Boot 2.x 引入的新的客户端负载均衡机制。它是 Ribbon 的替代品,提供了灵活的负载均衡策略,能够根据需求进行配置和扩展。

四、场景及案例

Spring Cloud 的应用场景广泛,特别适用于那些需要构建、部署和管理复杂分布式系统的组织。以下是 Spring Cloud 在不同场景下的应用实例:

1. 复杂业务逻辑的拆分
  • 适用行业:银行、保险、电信等。
  • 问题描述:这些行业的业务逻辑通常非常复杂,涉及多个不同的领域(如用户管理、订单处理、支付系统等)。传统的单体架构难以应对日益增长的业务需求和技术挑战。
  • 解决方案:采用微服务架构可以将复杂的业务逻辑分解为独立的服务,每个服务专注于特定的功能模块。例如,银行系统可以被拆分为账户服务、交易服务、客户服务等多个微服务。这种做法提高了系统的灵活性和可维护性,同时也便于团队并行开发。
2. 高并发与大流量处理
  • 适用行业:电子商务、在线旅游、社交媒体等。
  • 问题描述:在促销活动期间或节假日,网站可能会面临巨大的访问量,传统单体架构在这种情况下容易出现性能瓶颈甚至崩溃。
  • 解决方案:通过 Spring Cloud 实现的微服务架构允许不同的服务分别部署在不同的服务器上,从而降低了每个服务的压力,并且可以根据实际负载情况进行弹性扩展。此外,API 网关和服务发现机制可以帮助有效地管理和路由大量的客户端请求。
3. 多平台和多终端支持
  • 适用行业:智能家居、移动应用开发等。
  • 问题描述:现代企业往往需要同时支持 Web、iOS、Android 等多种平台的应用程序,而且各个平台之间可能存在差异化的功能要求。
  • 解决方案:利用 Spring Cloud 提供的 API 网关和其他中间件组件,可以轻松创建 RESTful API 或 GraphQL 接口,以满足不同终端的需求。这样不仅简化了跨平台集成工作,还能确保后端服务的一致性和稳定性。
4. 持续集成/持续交付 (CI/CD)
  • 适用行业:软件即服务 (SaaS) 提供商、互联网初创公司等。
  • 问题描述:快速迭代和频繁发布是当今软件开发的重要特征之一,如何保证每次更新都不会影响现有功能成为一大难题。
  • 解决方案:借助 Spring Cloud 的配置中心和版本控制特性,开发者可以在不影响生产环境的前提下对应用程序进行修改和测试。蓝绿部署或金丝雀发布的策略也使得新版本的上线更加平滑。
5. 混合云及多云环境
  • 适用行业:任何希望利用云计算优势的企业。
  • 问题描述:随着企业逐渐向云端迁移,它们可能需要在多个公有云提供商之间选择最佳的服务组合,或者结合私有云资源来优化成本和性能。
  • 解决方案:Spring Cloud 支持多种云平台,并提供了良好的抽象层,让开发者不必担心底层基础设施的变化。这有助于实现无缝的数据迁移和工作负载转移,同时也促进了 DevOps 文化的建立。
6. 分布式事务处理
  • 适用行业:金融、交易平台等。
  • 问题描述:当一个业务流程涉及到多个微服务时,确保所有操作要么全部成功,要么全部失败是非常重要的,尤其是在涉及资金转账等关键操作的情况下。
  • 解决方案:Spring Cloud 提供了分布式事务的支持,比如通过 TCC(Try-Confirm-Cancel)模式或其他补偿机制,来保证跨服务的一致性。
7. 微服务治理
  • 适用行业:几乎所有的微服务架构项目。
  • 问题描述:在一个包含大量微服务的环境中,如何有效地管理和监控这些服务是一个重大挑战。
  • 解决方案:Spring Cloud 包含了一系列用于服务注册与发现(Eureka)、断路器(Hystrix)、链路追踪(Sleuth)等功能的工具,帮助运维人员更好地理解和优化整个系统的运行状态。

综上所述,Spring Cloud 不仅能够解决上述提到的具体技术问题,还为企业提供了一套完整的微服务架构方案,使他们能够在不断变化的技术环境中保持竞争力。对于不同的企业来说,具体的应用场景可能会有所不同,但是采用 Spring Cloud 架构能够为企业信息技术的发展提供更多选择和可能性。

相关文章:

从单体到微服务:如何借助 Spring Cloud 实现架构转型

一、Spring Cloud简介 Spring Cloud 是一套基于 Spring 框架的微服务架构解决方案,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。 Spring Cloud 提供了诸如服务发现、配置管理、负载均衡、断路器、消息总线…...

RocketMq基础学习+SpringBoot集成

学习贴:参考https://blog.csdn.net/zhiyikeji/article/details/138286088 文章目录 普通消息顺序消息延迟消息批量消息事务消息 SpringBoot整合RocketMQ 3.1 NameServer NameServer是一个简单的路由注册中心,支持Topic和Broker的动态注册和发现。作用主…...

分布式cap

P(分区安全)都能保证,就是在C(强一致)和A(性能)之间做取舍。 (即立马做主从同步,还是先返回写入结果等会再做主从同步。类似的还有,缓存和db之间的同步。&am…...

mybatis-xml映射文件及mybatis动态sql

规范 XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。 XML映射文件的namespace属性为Mapper接口全限定名一致。 XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致…...

计算机网络复习——概念强化作业

物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...

用友BIP与旺店通数据集成方案解析

用友BIP与旺店通企业奇门的供应商集成同步方案 在现代企业的数据管理中,跨平台的数据集成是实现高效业务运作的关键环节。本文将分享一个实际案例:如何通过轻易云数据集成平台,将用友BIP系统中的供应商数据无缝对接到旺店通企业奇门&#xf…...

string类函数的手动实现

在上一篇文章中,我们讲解了一些string类的函数,但是对于我们要熟练掌握c是远远不够的,今天,我将手动实现一下这些函数~ 注意:本篇文章中会大量应用复用,这是一种很巧妙的方法 和以往一样,还是…...

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …...

transformers生成式对话机器人

简介 生成式对话机器人是一种先进的人工智能系统,它能够通过学习大量的自然语言数据来模拟人类进行开放、连贯且创造性的对话。与基于规则或检索式的聊天机器人不同,生成式对话机器人并不局限于预定义的回答集,而是可以根据对话上下文动态地…...

WPF中的VisualState(视觉状态)

以前在设置控件样式或自定义控件时&#xff0c;都是使用触发器来进行样式更改。触发器可以在属性值发生更改时启动操作。 像这样&#xff1a; <Style TargetType"ListBoxItem"><Setter Property"Opacity" Value"0.5" /><Setter …...

C#设计模式--状态模式(State Pattern)

状态模式是一种行为设计模式&#xff0c;它允许对象在其内部状态发生变化时改变其行为。这种模式的核心思想是将状态封装在独立的对象中&#xff0c;而不是将状态逻辑散布在整个程序中。 用途 简化复杂的条件逻辑&#xff1a;通过将不同的状态封装在不同的类中&#xff0c;可…...

〔 MySQL 〕索引

目录 1. 没有索引&#xff0c;可能会有什么问题 2. 认识磁盘 MySQL与存储 先来研究一下磁盘&#xff1a; 在看看磁盘中一个盘片​编辑 扇区 定位扇区​编辑 结论 磁盘随机访问(Random Access)与连续访问(Sequential Access) 3. MySQL 与磁盘交互基本单位 4. 建立共识…...

计算机网络研究实训室建设方案

一、概述 本方案旨在规划并实施一个先进的计算机网络研究实训室&#xff0c;旨在为学生提供一个深入学习、实践和研究网络技术的平台。实训室将集教学、实验、研究于一体&#xff0c;覆盖网络基础、网络架构、网络安全、网络管理等多个领域&#xff0c;以培养具备扎实理论基础…...

韩企研学团造访图为科技:共探人工智能创新前沿

今日&#xff0c;一支由韩国知名企业研学专家组成的代表团莅临图为科技深圳总部&#xff0c;展开了一场深度技术交流与研讨活动。 此次访问旨在通过实地探访中国领先的科技企业&#xff0c;促进中韩两国在科技创新领域的深入合作与交流。 韩国游学团合影 图为科技作为一家在人…...

html button 按钮单选且 高亮

<DIV class"middle"> <div class"containerTarget"> <span class"hover-target1" οnclick"btn(1);">韵达 </span> <span class"hover-target2" οnclick"btn(2);">中通 </span…...

图片上传HTML

alioss sky:jwt:# 设置jwt签名加密时使用的秘钥admin-secret-key: itcast# 设置jwt过期时间admin-ttl: 7200000# 设置前端传递过来的令牌名称admin-token-name: tokenalioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: $…...

C++学习-函数

C 函数 目录 函数默认参数引用传参函数重载 数量不同类型不同 内联函数 函数默认参数 #include<iostream>using std::cout; using std::endl;int power(int n, int x2); // x2 是默认参数int main() {cout << power(5) << endl; // 没有传 x 的值&#x…...

spring boot 测试 mybatis mapper类

spring boot 测试 mybatis mapper类 针对 mybatis plus不启动 webserver指定加载 xml 【过滤 “classpath*:/mapper/**/*.xml” 下的xml】, mapper xml文件名和mapper java文件名称要一样&#xff0c;是根据文件名称过滤的。默认情况加载和解析所有mapper.xml 自定义 MapperT…...

远程游戏新体验!

在这个数字化的时代&#xff0c;游戏已经不仅限于家里的电视或书房的电脑了。远程游戏&#xff0c;也就是通过远程控制软件在不同地点操作游戏设备&#xff0c;给玩家带来了前所未有的自由和灵活性。RayLink远程控制软件&#xff0c;凭借其出色的性能和专为游戏设计的功能&…...

Let up bring up a linux.part2 [十一]

之前的篇幅中我们已经将 Linux 内核 bringup 起来了&#xff0c;不知道大家有没有去尝试将根文件系统运行起来&#xff0c;今天我就带领大家完成这个事情&#xff0c;可以跟着下面的步骤一步步来完成&#xff1a; 在这里我们使用 busybox 构建 rootfs&#xff1a; 下载 busyb…...

调用大模型api 批量处理图像 保存到excel

最近需要调用大模型&#xff0c;并将结果保存到excel中&#xff0c;效果如下&#xff1a; 代码&#xff1a; import base64 from zhipuai import ZhipuAI import os import pandas as pd from openpyxl import Workbook from openpyxl.drawing.image import Image from io i…...

使用 Flownex 模拟热环境对原油运输的影响

石油和天然气行业经常使用管道仿真来模拟原油的流动。为了准确估计管道容量&#xff0c;必须考虑环境对管道的热影响以及环境温度如何影响油品特性。本博客介绍了如何通过将传热元件集成到管道流网中&#xff0c;以及使用新的工作液材料 Flownex 来模拟各种传热机制。 使用 Fl…...

【WRF-Urban】WPS中有关Urban的变量设置

【WRF-Urban】WPS中有关Urban的变量设置 地理数据源的配置WRF-Urban所需静态地理数据1、LANDUSE:包含城市地表分类的土地利用数据。2、URB_PARAM:城市参数数据集。3、FRC_URB2D:城市覆盖度数据集WRF默认设置(美国)数据集1-National urban dataset in China NUDC(中国)数…...

Socket编程-tcp

1. 前言 在tcp套接字编程这里&#xff0c;我们将完成两份代码&#xff0c;一份是基于tcp实现普通的对话&#xff0c;另一份加上业务&#xff0c;client输入要执行的命令&#xff0c;server将执行结果返回给client 2. tcp_echo_server 与udp类似&#xff0c;前两步&#xff1…...

Redis 之持久化

目录 介绍 RDB RDB生成方式 自动触发 手动触发 AOF&#xff08;append-only file&#xff09; Redis 4.0 混合持久化 Redis主从工作原理 总结 介绍 Redis提供了两个持久化数据的能力&#xff0c;RDB Snapshot 和 AOF&#xff08;Append Only FIle&#xff09;…...

视频监控汇聚平台:Liveweb安防监控平台实现接入监控视频集中管理方案

随着各行业数字化转型的不断推进&#xff0c;视频监控技术在行业内的安防应用及管理支撑日益增多。然而&#xff0c;由于前期规划不清晰、管理不到位等问题&#xff0c;视频监管系统普遍存在以下问题&#xff1a; 1. 各部门单位在视频平台建设中以所属领域为单位&#xff0c;导…...

ABAP - 系统集成之SAP的数据同步到OA(泛微E9)服务器数据库

需求背景 项目经理说每次OA下单都需要调用一次SAP的接口获取数据&#xff0c;导致效率太慢了&#xff0c;能否把SAP的数据保存到OA的数据库表里&#xff0c;这样OA可以直接从数据库表里获取数据效率快很多。思来想去&#xff0c;提供了两个方案。 在集群SAP节点下增加一个SQL S…...

uniapp使用ucharts修改Y、X轴标题超出换行

找到ucharts里面的u-charts.js。 Y轴的话找到drawYAxis方法。然后找到方法里面绘制文字的context.fillText方法。先把这个代码注释掉&#xff0c;然后加上下面代码 let labelLines item.split(\n); let currentY pos yAxisFontSize / 2 - 3 * opts.pix; labelLines.forEac…...

三分钟详细解读什么是Ecovadis认证?

Ecovadis认证&#xff0c;这一源自法国的全球性企业可持续性评估体系&#xff0c;宛如一面明镜&#xff0c;映照出企业在环境、社会和治理&#xff08;ESG&#xff09;领域的真实面貌。它不仅仅是一项简单的认证&#xff0c;更是一个推动全球企业和供应链向更加绿色、公正、透明…...

spring6:4、原理-手写IoC

目录 4、原理-手写IoC4.1、回顾Java反射4.2、实现Spring的IoC 4、原理-手写IoC 我们都知道&#xff0c;Spring框架的IOC是基于Java反射机制实现的&#xff0c;下面我们先回顾一下java反射。 4.1、回顾Java反射 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#x…...