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

架构演变 -单体到云原生

软件架构的演变是随着技术发展、业务需求和硬件条件的变化而不断迭代的过程。以下是从单体架构到现代云原生架构的典型演变路径及关键阶段特点:

一、单体架构(Monolithic Architecture)

时间阶段:2000 年代前
特点

  • 单一应用:将所有功能模块(前端、业务逻辑、数据库访问等)打包成一个独立程序(如 WAR 包、EXE 文件)。
  • 技术栈统一:使用单一编程语言和框架(如 Java EE、PHP)。
  • 部署简单:直接部署在单台服务器上,维护成本低。

优点

  • 开发简单,适合小型项目快速上线。
  • 调试方便,模块间调用无需跨进程通信。

缺点

  • 扩展性差:修改一个模块需重新部署整个应用。
  • 技术栈僵化:难以引入新技术或框架。
  • 可靠性低:单点故障导致整个系统不可用。

典型场景:早期企业管理系统(如 OA、CRM)、小型网站。

二、垂直架构(Vertical Architecture)

时间阶段:2000 年代中期
特点

  • 按业务拆分:将单体应用拆分为多个独立的子应用(如电商拆分为用户中心、订单中心、支付中心)。
  • 技术栈独立:每个子应用可使用不同技术栈(如 Java、Python 混合)。
  • 独立部署:子应用间通过 HTTP 接口或 RPC 调用通信。

优点

  • 业务解耦,单个子应用故障不影响全局。
  • 支持团队并行开发,提高效率。

冗余、复用问题、孤岛 同一个模块写在不同系统,解决:抽取出来做一个服务

缺点

  • 重复开发:公共模块(如权限、日志)在多个子应用中重复实现。
  • 调用复杂:跨应用调用需处理网络延迟和容错。

典型场景:中等规模企业应用(如大型电商、社交平台早期阶段)。

三、SOA 架构(面向服务架构,Service-Oriented Architecture)

时间阶段:2010 年代初
核心思想:将应用拆分为可复用的独立服务,通过标准化接口(如 Web Service、RESTful API)通信。
关键技术

  • 服务注册与发现:如 Zookeeper、Eureka,用于管理服务地址。
  • ESB(企业服务总线):统一管理服务间的消息路由、协议转换和消息队列。
  • 契约优先:先定义接口契约(如 WSDL、Swagger),再开发服务。

优点

  • 服务可复用,减少重复开发。
  • 支持异构系统集成(如 Java 服务与 Python 服务通信)。

缺点

  • 架构复杂:需维护 ESB、注册中心等基础设施。
  • 性能瓶颈:分布式调用引入延迟,需处理分布式事务。

典型场景:大型企业复杂系统(如银行核心系统、电信计费系统)。

四、微服务架构(Microservices Architecture)

时间阶段:2010 年代中期至今
核心思想:将应用拆分为更小的独立服务(单个服务仅实现单一业务功能),服务间通过轻量级协议(如 HTTP/2、gRPC)通信,强调 “去中心化”。
关键技术

  • 服务网格(Service Mesh):如 Istio、Linkerd,处理服务间通信的负载均衡、熔断、认证等。
  • 容器化:Docker + Kubernetes,实现服务快速部署和弹性扩缩容。
  • 去中心化治理:无集中式 ESB,服务自行管理路由和容错。

优点

  • 高扩展性:单个服务可独立扩展(如订单服务流量高时单独扩容)。
  • 技术异构:不同服务可选择最适合的技术栈(如 Go 写网关,Python 写数据分析服务)。
  • 容错性强:通过熔断、重试机制隔离故障服务。

缺点

  • 运维复杂:需管理大量容器、服务实例和监控指标。
  • 分布式一致性:需通过事务补偿(如 TCC)或最终一致性解决跨服务数据问题。

典型场景:互联网大厂(如 Google、Netflix)、云原生应用。

五、云原生架构(Cloud Native Architecture)

时间阶段:2020 年代
核心思想:基于云平台特性设计架构,充分利用云计算的弹性、分布式和按需服务能力。
关键技术

  • 容器化与编排:Kubernetes 作为标准容器调度工具。
  • 声明式 API:通过 YAML 文件定义基础设施和应用状态(如 K8s Deployment)。
  • 不可变基础设施:通过镜像打包服务,避免环境差异导致的故障。
  • 事件驱动架构(EDA):结合消息队列(如 Kafka、RabbitMQ)实现异步通信和业务解耦。

优点

  • 弹性与自愈:自动扩缩容应对流量波动,故障节点自动替换。
  • 成本优化:按需分配资源,避免传统架构的资源浪费。
  • DevOps 集成:支持 CI/CD 流水线,实现快速迭代和发布。

典型场景:大规模互联网应用(如电商大促系统)、实时数据处理平台。

六、未来趋势:Serverless 与边缘计算架构

1. Serverless 架构
  • 特点:开发者无需管理服务器,仅需编写函数(如 AWS Lambda、阿里云函数计算),平台自动调度资源。
  • 优势:进一步降低运维成本,适合事件驱动的轻量级应用(如 API 服务、数据处理)。
2. 边缘计算架构
  • 特点:将计算逻辑下沉到靠近设备的边缘节点(如网关、边缘服务器),减少云端压力和延迟。
  • 关键技术:边缘节点与中心云协同(如 KubeEdge、OpenYurt),处理实时数据(如工业物联网、自动驾驶)。

架构演变的核心驱动力

  1. 业务复杂度:从单一业务到多元化场景,推动架构从单体走向分布式。
  2. 技术进步:容器化、云平台、边缘计算等技术降低分布式架构的落地门槛。
  3. 成本与效率:企业追求更高的资源利用率、更快的迭代速度和更低的运维成本。
  4. 用户体验:高并发、低延迟需求倒逼架构支持弹性扩展和实时响应。

总结:如何选择合适的架构?

  • 小型项目:优先选择单体架构或垂直架构,快速迭代验证业务。
  • 中大型项目:根据团队技术能力和业务复杂度,逐步从 SOA 过渡到微服务或云原生架构。
  • 云原生场景:直接采用容器化 + Kubernetes + 微服务的组合,充分利用云平台能力。

架构没有 “银弹”,需结合业务目标、团队能力和技术生态综合决策,并在演进过程中持续优化。

参考:

系统由单体架构到微服务架构到底是如何演进的?-腾讯云开发者社区-腾讯云

快速了解云原生架构-腾讯云开发者社区-腾讯云

云原生架构总览-腾讯云开发者社区-腾讯云

架构设计做什么

架构设计是软件开发中至关重要的环节,它通过规划系统的整体结构、组件关系和技术方案,确保系统能够高效、稳定、灵活地满足业务需求。以下是架构设计的核心工作内容和目标:

一、明确架构设计的核心目标

架构设计的本质是平衡业务需求与技术实现的矛盾,核心目标包括:

  1. 功能性目标
    • 实现业务需求定义的功能(如用户注册、订单处理、数据存储等)。
    • 确保功能的完整性、正确性和可扩展性(如支持未来新业务模块的接入)。
  2. 非功能性目标
    • 性能:支持高并发(如每秒处理 10 万次请求)、低延迟(如接口响应时间<50ms)。
    • 可用性:系统 7×24 小时运行,故障恢复时间(RTO)和数据丢失量(RPO)满足要求(如金融级系统 RTO<10 分钟)。
    • 可扩展性:方便扩展计算、存储资源或技术模块(如新增缓存层不影响现有业务)。
    • 可维护性:代码结构清晰、模块解耦,便于团队协作开发和故障排查。
    • 安全性:防止数据泄露、攻击(如 SQL 注入、DDoS),满足合规要求(如 GDPR、等保 2.0)。
    • 成本:优化资源利用率(如服务器成本、云服务费用),避免过度设计。

二、架构设计的核心工作内容

1. 业务需求分析与抽象
  • 拆解业务流程:将复杂业务(如电商交易)拆解为原子模块(用户中心、库存中心、支付中心等)。
  • 识别核心场景:区分高频操作(如商品浏览)和低频操作(如财务对账),针对性设计性能方案。
  • 定义边界:明确模块间的依赖关系(如订单中心调用库存中心接口),避免循环依赖。
2. 技术选型与架构模式设计
  • 选择架构模式
    • 单体架构(适合简单业务)、微服务架构(适合复杂分布式场景)、事件驱动架构(适合异步处理)等。
    • 示例:实时数据处理系统可采用 “消息队列 + 流计算框架(如 Flink)” 的事件驱动模式。
  • 技术栈选型
    • 语言:Java(企业级)、Go(高并发)、Python(快速开发)等。
    • 框架:Spring Boot(后端)、React/Vue(前端)、Kubernetes(容器编排)。
    • 中间件:Redis(缓存)、Kafka(消息队列)、Elasticsearch(搜索)。
  • 设计原则
    • 单一职责原则:每个模块仅负责单一功能(如用户模块只处理用户数据,不涉及支付逻辑)。
    • 接口隔离原则:避免模块间暴露过多无用接口,降低耦合度。
    • 依赖倒置原则:高层模块不依赖低层模块,两者依赖抽象接口(如通过 Spring 依赖注入实现)。
3. 系统分层与组件设计
  • 分层架构设计
    • 经典三层架构
      • 表现层(UI):处理用户交互(如 Web 页面、App 客户端)。
      • 业务逻辑层:实现核心业务规则(如订单状态更新、库存扣减)。
      • 数据访问层(DAO):操作数据库或缓存(如 MyBatis、Hibernate)。
    • 扩展分层:在复杂系统中增加网关层(如 Nginx、Spring Cloud Gateway)、服务层(微服务模块)、中间件层(消息队列、搜索引擎)等。
  • 组件设计
    • 定义独立组件(如认证中心、日志服务、监控服务),确保可复用和独立部署。
    • 示例:认证中心作为独立组件,为所有子系统提供统一登录和权限校验功能。
4. 通信与交互设计
  • 模块间通信方式
    • 同步通信:HTTP/RESTful、gRPC(适合实时交互,如用户下单调用库存接口)。
    • 异步通信:消息队列(如 Kafka、RabbitMQ),用于解耦和削峰填谷(如订单创建后异步通知物流系统)。
  • 协议与规范
    • 制定接口规范(如 OpenAPI、Protobuf),确保跨团队或跨语言调用的一致性。
    • 设计容错机制:熔断(如 Hystrix)、重试、限流(如 RateLimiter),防止级联故障。
5. 数据架构设计
  • 数据存储选型
    • 关系型数据库(如 MySQL、PostgreSQL):适合结构化数据(如用户信息、订单详情),支持事务和复杂查询。
    • 非关系型数据库(如 MongoDB、Redis):适合非结构化数据(如用户行为日志)或高性能场景(如缓存)。
    • 分布式数据库(如 TiDB、CockroachDB):支持海量数据存储和水平扩展。
  • 数据流动设计
    • 定义数据流向(如用户请求→网关→业务服务→数据库→缓存→返回结果)。
    • 处理数据一致性问题:通过分布式事务(如 Seata)或最终一致性(如消息队列 + 补偿机制)保证跨服务数据一致。
6. 基础设施与部署设计
  • 部署架构
    • 单节点部署(适合开发测试环境)或分布式部署(生产环境多节点负载均衡)。
    • 容器化部署:使用 Docker 镜像打包服务,通过 Kubernetes 实现自动扩缩容和故障转移。
  • 监控与运维
    • 设计监控指标(如 CPU 利用率、接口调用量、队列积压量),集成 Prometheus+Grafana 等工具。
    • 日志系统:集中管理日志(如 ELK Stack),便于故障追溯和性能分析。

三、架构设计的关键产出物

  1. 架构文档
    • 描述系统整体结构、分层、组件职责及交互关系(常用工具:Visio、PlantUML、Archimate)。
    • 示例图:微服务架构组件交互图、数据流向图。
  2. 技术选型清单
    • 列出使用的技术栈、中间件、工具链及其版本(如 Java 17 + Spring Boot 3.2 + Kubernetes 1.28)。
  3. 接口规范与数据模型
    • 定义 API 接口文档(如 Swagger)、数据库表结构或 NoSQL 数据模型。
  4. 非功能需求说明书
    • 明确性能指标、安全策略、容灾方案(如异地多活、数据备份频率)。

四、架构设计的挑战与应对策略

  1. 业务快速变化
    • 应对:采用模块化设计插件化架构,允许独立模块升级或替换(如电商系统新增促销模块不影响核心交易流程)。
  2. 技术债积累
    • 应对:定期进行架构重构(如将单体应用逐步拆分为微服务),通过自动化测试保障重构质量。
  3. 团队协作成本
    • 应对:制定统一的开发规范(如代码风格、分支管理),使用平台化工具(如 DevOps 流水线)提升协作效率。

五、不同规模团队的架构设计差异

团队规模架构特点典型工具 / 方法
小型团队(<10 人)以单体架构为主,优先快速实现业务功能,技术栈统一(如 Java + Spring Boot)。简单分层设计,手动部署,轻量级监控。
中型团队(10-50 人)垂直拆分或微服务架构,开始引入容器化(Docker)和 CI/CD 流水线。Kubernetes、Jenkins、ELK Stack。
大型团队(>50 人)复杂微服务 + 云原生架构,强调服务治理、灰度发布、混沌工程(Chaos Engineering)。Istio、Argo CD、Prometheus、Chaos Monkey。

总结:架构师的核心能力

架构设计不仅是技术决策,更是对业务、团队和技术的综合把控。优秀的架构师需具备:

  • 技术视野:熟悉主流技术栈和架构模式,能预判技术趋势(如 Serverless、边缘计算)。
  • 业务理解:深入理解业务目标,避免为技术而技术(如初创公司过早采用复杂微服务架构)。
  • 沟通与协调:向开发团队解释架构设计,协调不同模块的开发进度。
  • 持续优化思维:架构是演进的,需根据业务反馈和技术变化动态调整(如流量增长时从单体迁移到微服务)。

通过系统化的架构设计,团队可在快速迭代中保持系统的稳定性和可扩展性,为业务长期发展奠定基础。

   

中间件:解决并发

中间件(Middleware) 是位于操作系统、数据库和应用程序之间的软件层,用于解决分布式系统中 组件间通信、资源共享、协同工作 等核心问题,简化复杂应用的开发、部署和维护。以下是中间件的主要作用和解决的具体问题:

一、解决分布式系统中的通信与协作问题

1. 分布式通信
  • 场景:微服务架构中,不同服务可能部署在不同服务器或容器中,需跨网络通信。
  • 解决方案
    • 消息中间件(如 Kafka、RabbitMQ):通过异步消息队列解耦服务,支持高并发场景下的可靠消息传递(如订单系统中库存与支付服务的异步通信)。
    • RPC 框架(如 gRPC、Dubbo):提供远程过程调用机制,屏蔽网络细节,让服务调用像本地函数一样简单(如电商系统中用户服务与商品服务的同步调用)。
2. 服务发现与路由
  • 场景:分布式系统中服务实例动态增减,客户端需动态获取服务地址。
  • 解决方案
    • 服务注册中心(如 Consul、Nacos):服务实例注册自身地址,客户端通过注册中心发现可用服务,实现负载均衡和故障转移(如 Kubernetes 中的服务发现机制)。

二、提升系统性能与可扩展性

1. 缓存与数据加速
  • 场景:数据库面对高并发读请求时性能瓶颈明显(如秒杀活动中的商品查询)。
  • 解决方案
    • 缓存中间件(如 Redis、Memcached):将高频访问数据存储在内存中,降低数据库压力,提升响应速度(如电商首页商品列表的缓存)。
2. 负载均衡与流量调度
  • 场景:单台服务器无法处理高并发请求,需将流量分配到多台服务器。
  • 解决方案
    • 负载均衡中间件(如 NGINX、LVS):根据规则(如轮询、最少连接数)将请求分发到不同后端服务器,避免单点过载(如 Web 服务前端的负载均衡)。

三、简化开发与维护复杂度

1. 数据持久化与异步处理
  • 场景:复杂业务需操作多个数据库或执行耗时任务(如生成报表、文件上传)。
  • 解决方案
    • 数据库中间件(如 MyCat、ShardingSphere):封装数据库分库分表逻辑,提供统一访问接口,解决单机数据库存储和性能瓶颈(如金融系统中的海量交易数据分库)。
    • 任务调度中间件(如 Apache Quartz、XXL-JOB):管理定时任务和异步作业,避免阻塞主线程(如电商每日凌晨的库存统计任务)。
2. 监控与日志管理
  • 场景:分布式系统中故障定位困难,需集中监控服务状态和日志。
  • 解决方案
    • APM 中间件(如 SkyWalking、Pinpoint):通过链路追踪(Trace)分析服务调用链,定位性能瓶颈和故障点(如用户支付失败时追踪全链路日志)。
    • 日志中间件(如 ELK 栈:Elasticsearch + Logstash + Kibana):集中收集、存储和分析日志,支持实时查询和告警(如系统异常日志的快速检索)。

四、跨平台与技术栈适配

1. 协议转换与适配
  • 场景:不同系统使用不同协议(如 HTTP、TCP、WebSocket),需互通数据。
  • 解决方案
    • API 网关(如 Spring Cloud Gateway、Zuul):作为系统统一入口,处理协议转换、身份验证、流量控制等,屏蔽后端服务差异(如移动端通过 API 网关调用多个微服务)。
2. 异构系统集成
  • 场景:企业存在多个遗留系统(如 ERP、CRM),需整合数据和功能。
  • 解决方案
    • 企业服务总线(ESB)(如 Apache ServiceComb、Mule ESB):通过消息路由、转换和编排,连接不同技术栈的系统,实现数据共享(如电商系统与物流系统的数据同步)。

五、典型中间件分类与应用场景

类型代表产品核心功能应用场景
消息中间件Kafka、RabbitMQ异步消息传递、削峰填谷订单系统、实时日志采集
缓存中间件Redis、Memcached内存数据存储、高速读写热点数据缓存、计数器、会话管理
RPC 框架gRPC、Dubbo远程服务调用、接口定义与序列化微服务间同步通信、跨语言服务调用
数据库中间件MyCat、ShardingSphere分库分表、读写分离、分布式事务海量数据存储、高并发交易系统
API 网关Kong、Tyk流量控制、身份认证、协议转换微服务统一入口、移动应用后端适配
分布式事务中间件Seata、LCN跨服务事务管理、最终一致性保障金融支付、库存扣减等强一致性场景

总结

中间件是分布式系统的 “基础设施”,通过解耦组件、封装复杂度、优化性能、增强可观测性,帮助开发者更专注于业务逻辑,而非底层技术细节。其核心价值在于:让复杂系统更可靠、更高效、更易维护。选择合适的中间件需结合业务规模、技术栈和场景需求(如高并发、强一致性、实时性等),避免过度设计或引入不必要的复杂度。

缓存中间件:解决多表联查

消息中间件:解决消息丢失

 

相关文章:

架构演变 -单体到云原生

软件架构的演变是随着技术发展、业务需求和硬件条件的变化而不断迭代的过程。以下是从单体架构到现代云原生架构的典型演变路径及关键阶段特点: 一、单体架构(Monolithic Architecture) 时间阶段:2000 年代前 特点: …...

VSCode 安装教程

访问官网 Visual Studio Code 官网 打开下载的exe文件 选一个安装位置 创建桌面快捷方式 (D) 在桌面生成 VSCode 的快捷图标,方便快速启动程序。 将 “通过 Code 打开” 操作添加到 Windows 资源管理器文件上下文菜单 右键点击文件时,菜单中会新增 “通…...

开源表单设计器FcDesigner配置多语言教程

开源低代码表单设计器FcDesigner中提供了强大的多语言支持功能,允许开发者在表单中实现一键式语言切换。在现代业务应用中,多语言支持是一项基本需求,尤其在国际化产品中。 源码地址: Github | Gitee | 文档 | 在线演示 设计器中配置多语言…...

ONIE安装NOS操作说明

ONIE 安装 NOS 操作说明 1. ONIE 简介 ONIE(Open Network Install Environment)是开放网络设备的出厂预装环境,类似于服务器的PXE/BIOS,主要用于自动或手动安装网络操作系统(NOS,如SONiC、Cumulus、FBOSS等…...

fastadmin 数据导出,设置excel行高和限制图片大小

fastadmin默认导出图片全部都再一块,而且不在单元格里 话不多说,上代码 修改文件的路径: /public/assets/js/require-table.js exportOptions: {fileName: export_ Moment().format("YYYY-MM-DD"),preventInjection: false,mso…...

仿腾讯会议——音频服务器部分

1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数...

国产化替代对金融行业有哪些影响?如何应对?

在全球产业链重构与科技自主创新的时代背景下,国产化替代已从技术领域的局部探索,升级为金融行业应对复杂外部环境、夯实发展根基的战略选择。作为国家核心竞争力的重要组成部分,金融行业长期依赖国外技术设备的传统模式正面临安全性、可控性…...

包装类(1)

1.包装类的分类 1.针对八种基本数据类型相应的引用类型--包装类 2.有了类的特点,就可以调用类中的方法. 基本数据类型. 包装类 例: 手动装箱 int->Integer 手动执箱 Integer->int 注:jdk5后就可以自动装箱和拆箱 2.包装类和基本数据的转换 (1)jdk5前的…...

java中如何优雅处理多租户系统的查询?

多租户系统通常是指一个应用服务多个客户(租户),每个租户的数据需要隔离,确保数据安全和隐私。处理这样的系统需要考虑数据隔离、查询效率、代码的可维护性等方面。 首先,我应该明确多租户的实现方式。常见的多租户数据…...

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践

Ubuntu服务器部署多语言项目(Node.js/Python)方式实践 服务器脚本运行方式命令行直接执行nohup后台执行进程 Screen概述安装基本操作命令启动 Screen退出当前会话(不终止进程)查看所有会话重连会话关闭会话 常用快捷键典型使用场景…...

【MySQL】基础操作

MySQL(二)基础操作 一、数据库操作 1.创建库 2.查看库 3.选中库 4.删除库 二、表操作 1.创建表 1.1[comment 注释]: 1.2,...: 2.查看表 2.1查看所有表 2.2查看表结构 3.删除表 三、记录操作 1.插入记录 1.1全列插入 1.2指定列插入 1.3…...

在 Java MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 的解决方法

在 MyBatis 中遇到 “操作数类型冲突: varbinary 与 float 不兼容” 错误,通常是因为当字段值为 null 时,MyBatis 无法正确推断其 JDBC 类型,导致向数据库传递 null 值时类型不匹配。以下是原因分析和解决方案: 问题原因 未指定 j…...

课题推荐——扩展卡尔曼滤波(EKF)估计pmsm的位置误差

扩展卡尔曼滤波(EKF)是一种常用于非线性系统状态估计的方法,特别适用于永磁同步电机(PMSM)的位置和速度估计。EKF可以实时估计电机的转子位置误差(与实际转子位置的偏差),从而提高控…...

elasticsearch之记录es7.17升级8.17 springboot2.7.0 程序改造坑

es7.17升级8.x问题目录 一、硬件安装1-1. centos7 服务器上,删除elasticsearch7.17,安装es8.17 二、 程序改造2-1. Java API Client 8.17.52-2. 依赖引入2-3. 配置文件2-4. Java 配置类 三、根据 Elasticsearch 集群信息(版本 8.17.2&#xf…...

SpringBoot+ELK 搭建日志监控平台

ELK 简介 ELK(Elasticsearch, Logstash, Kibana)是一个目前主流的开源日志监控平台。由三个主要组件组成的: Elasticsearch: 是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建…...

家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析

文章目录 前言1. VMware安装飞牛云(fnOS)1.1 打开VMware创建虚拟机1.3 初始化系统 2. 安装Cpolar工具3. 配置远程访问地址4. 远程访问飞牛云NAS5. 固定远程访问地址 前言 在数字生活时代,数据管理正成为每个家庭的刚需。今天要向大家重点推荐…...

博客系统功能测试

博客系统网址:http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本,对博客系统进行的相关…...

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计(登录 每日3次 中奖40% 道具兑换码) ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …...

paddle ocr本地化部署进行文字识别

一、Paddle 简介 1. 基本概念 Paddle(全称 PaddlePaddle,飞桨)是百度开发的 开源深度学习平台,也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程…...

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成 在CentOS系统上部署GitLab Runner并配置CI/CD自动项目集成GitLab CI/CD是一个强大的持续集成和持续部署工具,能够显著提高开发团队的效率。 本文将详细介绍如何在CentOS系统上部署GitLab Runner&#xff0c…...

python学习day2(未写完,明天继续补充)

今天主要学习了变量的数据类型,以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求,也把数据分为不同的类型。 代码如下: """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...

深度强化学习框架DI-engine

深度强化学习框架DI-engine 一、DI-engine概述:决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎,基于PyTorch和JAX构建,旨在为强化学习(RL)、模仿学习(IL)、离线学习等场景提供…...

gitlab迁移

需求:需要将A服务器上的 gitlab 迁移到B服务器上,均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中,运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识…...

如何确保低空经济中的数据安全?

低空经济涉及大量敏感数据,如无人机的飞行轨迹、拍摄的地理图像和视频等。为确保这些数据的安全,可从以下几方面着手: 加强数据加密 传输加密 :采用 SSL/TLS 等加密协议,对数据在传输过程中进行加密,防止…...

在linux平台下利用mingw64编译windows程序

背景 笔者平时都是基于linux平台开发C代码,已经熟悉使用CMake这一套工具上一次开发windows应用程序还要追溯到10多年前,彼时还是使用微软的visual studio这个IDE,这个IDE确实也很强大,但也确实很笨重,当时用起来也很不…...

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡? code review! 参考笔记: 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡(Level) 和 关卡蓝图(Level Blueprint)的关系 2.虚幻引擎…...

[IMX] 04.定时器 - Timer

目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

前端 vue + element-ui 框架从 0 - 1 搭建

1. 安装node 地址: Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中,频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式,避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

算法刷题(Java与Python)2.数组、列表

目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗? 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

uniapp打包H5,输入网址空白情况

由于客户预算有限,最近写了两个uniapp打包成H5的案例,总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮,输入名称,网址 点击【发行】,生成文件 把这个给后端,就可以了 为什么空白呢 最重要一点&#xf…...

JavaScript 中使用 Elasticsearch 的正确方式,第一部分

作者:来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证?看看下一期 Elasticsearch 工程师培训什么时候开始吧! Elasticsearch 拥有大量新功能,能帮助你…...

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣(LeetCode) 题目 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今…...

排序复习/下(C语言版)

目录 1.快速排序(hoare法) 单趟: 整体: 代码优化: ​编辑三数取中代码: 小区间优化代码: hoare法疑问解答: 2.快速排序(挖坑法) 3.快速排序&#x…...

Vue百日学习计划Day33-35天详细计划-Gemini版

总目标: 在 Day 33-35 理解 Vue 组件从创建到销毁的完整生命周期,熟练掌握 Composition API 中主要的生命周期钩子,并知道在不同阶段执行哪些操作。 所需资源: Vue 3 官方文档 (生命周期钩子): https://cn.vuejs.org/guide/essentials/lifecycle.html你…...

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者:曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器?3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器: 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…...

统计客户端使用情况,使用es存储数据,实现去重以及计数

这篇文件的重点在tshark、filebeat、和logstash。 需求:统计客户使用的客户端版本 实现工具:tshark 1.10.14,filebeat 8.17.0,logstash 8.17.0,elasticsearch 8.17.0,kibana 8.17.0 总体设计&#xff1a…...

Git基础面试题

git的rm命令与系统的rm命令有什么区别 git rm 和系统的 rm (在 Windows 上是 del) 命令都用于删除文件,但它们在 Git 仓库的上下文中作用有所不同: 系统 rm (或 del) 命令: 作用: 直接从文件系统中删除文件。Git 的感知&#xff…...

conda 的常用命令

好的,下面为你介绍conda的常用命令: 环境管理 # 创建新环境 conda create -n env_name python3.8# 激活环境 conda activate env_name# 查看所有环境 conda env list# 复制环境 conda create -n new_env --clone old_env# 删除环境 conda remove -n en…...

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞:ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析:施耐德PLC与AB PLC的互联互通 在现代工业自动化中,设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关,将施耐德P…...

百度OCR:证件识别

目录 一、编写目的 二、准备工作 2.1 OCR密钥 三、代码实现 3.1 配置文件 3.2 请求接收封装 3.3 请求响应封装 3.4 服务类参数初始化 3.5 服务类实现 3.6 解析结果 3.7 定义Web接口 四 测试效果 五、总结 欢迎来到盹猫🐱的博客 本篇文章主要介绍了 [百…...

纯前端实现图文识别 OCR

Tesseract.js Tesseract.js 是一个基于 Google Tesseract OCR 引擎的 JavaScript 库,利用 WebAssembly 技术将的 OCR 引擎带到了浏览器中。它完全运行在客户端,无需依赖服务器,适合处理中小型图片的文字识别。 基本使用 以下示例展示了如何…...

2025.05.01【Barplot】柱状图的多样性绘制

Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...

在资源受限环境下,移动端如何实现流畅动画?如何在内存、CPU、GPU、网络等多种限制条件下,依然保持动画高帧率、低延迟、不卡顿?

在日常生活中,移动设备已经成为不可或缺的工具。从社交、购物到游戏、教育,几乎所有的应用场景都依赖于移动终端的计算和显示能力。然而,随着用户体验的不断提升需求,动画成为了界面交互中不可忽视的一环。动画不仅提升了视觉吸引…...

HJ10 字符个数统计【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ10 字符个数统计 一、题目描述 二、测试用例 三、解题思路 基本思路:   建立字符串的散列表,然后统计不同字符个数具体思路:   遍历字符串的字…...

关键点检测算法-RTMPose

一、网络框架(top-down模式) 二、各部分内容 1、骨干网络 对于网络而言,CXPset太大,可以换成starnet 2、一个卷积层 7x7的卷积核对性能提升最大 3、一个全连接层 将一维关键点表示扩展到由超参数控制的所需维度。 4、一个用…...

云原生安全:错误策略S3存储桶ACL设置为Everyone:FullControl

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础到实践的深度解析 1. 基础概念 S3存储桶与ACL Amazon S3(Simple Storage Service)是AWS提供的对象存储服务,支持存储和检索任意规模的数据。ACL(访问控制列表…...

Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...

图漾相机错误码解析(待补充)

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相机本身不支持改属性 2.4 -1…...