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

架构01-演进中的架构

零、文章目录

架构01-演进中的架构

1、原始分布式时代:Unix设计哲学下的服务探索

(1)背景
  • 时间:20世纪70年代末到80年代初
  • 计算机硬件:16位寻址能力、不足5MHz时钟频率的处理器、128KB左右的内存
  • 转型:从大型机到微型机,计算机逐渐从科研设备转变为商业和家用设备
(2)探索动机
  • 硬件限制:单台计算机的运算处理能力有限,阻碍了信息系统软件的最大规模
  • 目标:使用多台计算机共同协作,支撑同一套软件系统的运行
(3)重要技术和概念
  • Network Computing Architecture (NCA):远程服务调用的雏形
  • Andrew File System (AFS):分布式文件系统的最早实现
  • Kerberos 协议:服务认证和访问控制的基础性协议
  • **Distributed Computing Environment (DCE):**一套完整的分布式服务组件规范与实现
    • 远程服务调用规范 (RPC)
    • 分布式文件系统 (DFS)
    • 服务认证规范
    • 时间服务、命名与目录服务
    • 通用唯一识别符 (UUID)
(4)DCE 的特点
  • 透明化:尽可能透明化分布式环境中的服务调用、资源访问、数据存储等操作
  • 复杂性:远程方法调用与本地方法调用的复杂度差异巨大,涉及服务发现、负载均衡、网络分区、超时、错误处理、序列化协议、传输协议、服务权限管理、通信安全、分布式数据一致性等问题
(5)面临的挑战
  • 性能与分布式设计的矛盾:开发者需在方法运行时间和远程调用成本之间做出权衡
  • 编程技巧要求高:设计良好分布式应用需要极高的编程技巧和知识
(6)结果与教训
  • DCE 和 CORBA 的局限性:分布式带来的问题和代价超过了其收益
  • 凯尔·布朗的评价:某个功能能够进行分布式并不意味着应该进行分布式,强行追求透明的分布式操作只会自寻苦果
(7)后续发展
  • 单体时代的兴起:摩尔定律作用下,单机处理能力迅速提升,单体系统成为主流
  • 分布式计算的持续探索:对远程服务调用的探索从未中断,现代 RPC 和 RESTful 成为关键

2、单体系统时代:应用最广泛的架构风格

(1)单体架构的定义与历史
  • 定义:单体架构是一种将所有组件结合成一个单一程序的软件架构风格。
  • 历史:
    • 出现时间最早、应用范围最广、使用人数最多、统治历史最长的架构风格。
    • “单体”这一概念是在微服务流行后才被“事后追认”的。
    • 缺乏专门的开发材料,体现了其简单性和普遍性。
(2)单体架构的优势
  • 易于开发:开发工具(如IntelliJ IDEA、Eclipse)对单体架构友好,提供强大的代码分析、重构、部署和调试能力。
  • 易于测试:所有功能、模块、方法的调用在进程内进行,测试更为简便。
  • 易于部署:单体系统可以轻松部署和管理。
  • 高效交互:进程内调用无需进程间通信,运行效率高。
  • 适用于小型系统:对于小型系统,单体架构不仅易于开发、测试、部署,而且运行效率高。
(3)单体架构的误区
  • **并非不可拆分:**单体系统可以在纵向和横向上进行拆分。

    • 纵向拆分:采用分层架构,实现不同层次的拆分和数据流转传递。

    image-20241123204600018

    • 横向拆分:支持按技术、功能、职责等角度进行模块化拆分,以便重用和团队管理。
  • 并非一定会被微服务取代:单体架构在某些场景下仍然具有优势,不应被简单地贴上“落后”的标签。

(4)单体架构的缺陷
  • 隔离与自治能力欠缺:
    • 全局影响:任何部分的代码出现问题,都会影响整个系统的运行。
    • 资源消耗:内存泄漏、线程爆炸等问题会影响整个程序甚至整台机器。
  • 动态可维护性差:
    • 停机更新:无法单独停止、更新某一部分代码,需要制定专门的停机更新计划。
    • 灰度发布复杂:相比微服务,灰度发布更加复杂。
  • 技术异构困难:
    • 技术栈限制:虽然可以通过JNI等技术实现异构,但非常麻烦。
(5)单体系统与微服务的对比
  • 微服务的优势:
    • 隔离与自治:每个服务独立运行,互不影响。
    • 动态可维护性:可以单独更新、部署服务。
    • 技术异构:允许使用不同的技术栈。
  • 单体系统的适用场景:
    • 小型系统:单体架构在小型系统中表现出色。
    • 性能需求不高:对于不需要高度扩展和隔离的系统,单体架构更为合适。
(6)未来发展方向
  • 持续优化:单体系统将继续优化,提高其在大规模系统中的适用性。
  • 混合架构:结合单体和微服务的优势,形成混合架构,以适应不同的业务需求。

3、SOA时代:成功理论与失败实践

(1)SOA架构的背景
  • 首次广泛使用:SOA架构是第一次被广泛使用的通过分布式服务来构建信息系统的工程实践。
  • 技术问题解决:SOA架构解决了分布式系统中几乎所有主要的技术问题。
  • 未成为普适架构:尽管有完善的理论和工具,SOA架构最终未能成为一种普适的软件架构。
(2)代表性服务拆分架构模式
  • 烟囱式架构:

    • 特点:系统之间完全不互操作或协调。
    • 问题:现实中几乎不存在完全不交互的部门或系统。

    image-20241123205040881

  • 微内核架构:

    • 特点:核心系统集中管理公共数据和资源,业务系统以插件形式存在。
    • 优点:可扩展、灵活、天然隔离。
    • 局限:假设各插件模块之间不直接交互,不适用于需要频繁交互的场景。

    image-20241123204932590

  • 事件驱动架构:

    • 特点:通过事件队列管道实现子系统间的通讯。
    • 优点:独立、高度解耦,可以顺畅地互相调用通讯。

    image-20241123205250496

(3)SOA架构的发展历程
  • 提出:Gartner公司在1994年提出SOA概念。
  • 标准化:
    • OSOA联盟:2006年成立,联合制定和推进SOA相关行业标准。
    • OASIS:2007年,OSOA转变为制定行业标准的国际组织。
    • Open CSA:联合OASIS成立,负责SOA的管理。
(4)SOA架构的特点
  • 更具体:
    • 技术标准:拥有领导制定技术标准的组织。
    • 设计原则:服务的封装性、自治、松耦合、可重用、可组合、无状态。
    • 协议:采用SOAP协议族进行服务的发布、发现和治理。
    • 企业服务总线(ESB):实现子系统间的通讯交互。
    • 服务数据对象(SDO):访问和表示数据。
    • 服务组件架构(SCA):定义服务封装和服务运行的容器。
  • 更系统:
    • 目标:总结出一套自上而下的软件研发方法论,解决软件开发过程中的全套问题。
    • 愿景:实现软件开发的工业化大生产。
(5)SOA架构的失败原因
  • 复杂性:
    • 严谨流程:需要专业人员才能驾驭。
    • 过度复杂:Web Service的兴起与衰落,ESB、BPM、SCA、SDO等上层建筑进一步加剧了复杂性。
  • 与EJB的相似之处:
    • 失败原因:脱离了人民群众,被“草根框架”打败。
(6)总结与思考
  • 成功部分:提出了技术解决方案,解决了分布式环境下的主要技术问题。
  • 失败部分:过于复杂的流程和理论限制了其普及。
  • 未来展望:微服务时代的开启,带着对SOA架构的自省。

4、微服务时代:SOA的革命者

(1)微服务的起源与发展
  • 早期提出:2005年,Peter Rodgers博士在云计算博览会上首次提出“Micro-Web-Service”概念,指的是专注于单一职责、与语言无关的细粒度Web服务。
  • SOA背景:微服务最初是作为SOA的一种轻量级补救方案提出的,被视为SOA的一个变种。
  • 发展过程:在最初的10年里,微服务并未受到广泛关注。2012年,Thoughtworks首席咨询师James Lewis在“33rd Degree Conference”大会上提出了微服务的现代定义,强调了单一服务职责、康威定律、自动扩展、领域驱动设计等原则。
(2)现代微服务的定义与特征
  • 定义:微服务是一种通过多个小型服务组合构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。
  • 核心特征:
    1. 围绕业务能力构建:强调康威定律的重要性,团队结构应与产品结构一致。
    2. 分散治理:开发团队对服务运行质量负责,有权选择技术实现。
    3. 独立自治的组件:通过服务而非类库实现组件化。
    4. 产品化思维:软件研发应视为持续改进的过程,开发团队负责整个生命周期。
    5. 数据去中心化:数据按领域分散管理。
    6. 轻量级通讯机制:反对复杂的通讯机制,提倡简单的RESTful风格。
    7. 容错性设计:接受服务会出错的现实,设计自动故障检测和隔离机制。
    8. 演进式设计:服务应能被报废淘汰,系统不应存在不可更改的服务。
    9. 基础设施自动化:CI/CD等自动化工具降低运维复杂性。
(3)微服务与SOA的区别
  • 拒绝SOA标签:微服务支持者倾向于拒绝SOA标签,尽管有些人认为微服务是SOA的一种变体。
  • 自由与约束:微服务追求更自由的架构风格,摒弃了SOA的复杂技术标准,但这也带来了新的挑战,如服务间通讯和服务发现等问题。
(4)微服务的优势与挑战
  • 优势:
    • 降低复杂度:简单服务不必同时面临所有分布式问题。
    • 灵活选择:根据需要引入工具,团队熟悉的技术优先。
    • 友好开发:Spring Cloud等工具集降低切换成本。
  • 挑战:
    • 高要求架构者:对架构能力的要求极高,需要权衡利弊。
    • 选择困难:多种解决方案并存,缺乏统一标准。
(5)未来展望
  • 自由与迷茫:微服务时代充满自由,但也伴随着选择的迷茫。
  • 持续探索:微服务可能不是架构探索的终点,未来的信息系统需要同时拥有自由权利和解决分布式问题的能力。

5、后微服务时代:跨越软件与硬件之间的界限

(1)引言
  • 背景:微服务架构面临的问题(注册发现、跟踪治理、负载均衡、传输通讯等)在分布式系统中普遍存在。
  • 问题:这些问题是否必须由分布式系统自己解决?
(2)常见的解决方法
  • 伸缩扩容:购买新的服务器,多部署几套副本实例。
  • 负载均衡:布置负载均衡器,选择合适的均衡算法。
  • 安全传输:布置 TLS 传输链路,配置 CA 证书。
  • 服务发现:设置 DNS 服务器,使用稳定的服务名。
(3)微服务时代的无奈
  • 原因:硬件基础设施的灵活性无法跟上软件应用服务的灵活性。
  • 解决方案:虚拟化技术和容器化技术(如 Docker)的兴起。
(4)容器生态的发展
  • 里程碑:2017 年 Kubernetes 赢得容器战争的胜利。
  • 事件:
    • CoreOS 放弃 Fleet,转向 Kubernetes。
    • Rancher Labs 提出"All-in-Kubernetes"战略。
    • Apache Mesos 宣布“Kubernetes on Mesos”集成计划。
    • Docker 宣布支持 Swarm 与 Kubernetes 两套容器管理系统。

image-20241123211913626

(5)Kubernetes 的贡献
  • 虚拟化基础设施:容器间网络、服务、负载均衡、配置等。
  • 目标:开启下一个软件架构发展的新纪元。
(6)云原生时代的到来
  • 定义:通过一系列小型服务构建大型系统。
  • 特点:软件与硬件的界限模糊,应用代码与基础设施软硬一体。
  • 前景:实现“透明的分布式应用”、“凤凰服务器”、“不可变基础设施”。
(7)Kubernetes 的局限
  • 问题:某些边缘问题难以在基础设施层面精细化解决(如熔断、监控、认证、授权、负载均衡)。

image-20241123212043286

  • 解决方案:引入“服务网格”(Service Mesh)的“边车代理模式”(Sidecar Proxy)。

image-20241123212153760

(8)服务网格
  • 定义:在服务的资源容器中注入一个通讯代理服务器,实现流量劫持和精细管理。
  • 功能:熔断、认证、度量、监控、负载均衡等。
  • 优势:无需改动应用代码,提供精细管理能力。
(9)未来展望
  • 趋势:Kubernetes 成为服务器端标准运行环境,服务网格成为微服务间通讯交互的主流模式。
  • 目标:业务与技术完全分离,远程与本地完全透明。

6、无服务时代:“不分布式”云端系统的起点

(1)分布式架构的背景
  • 初衷:解决单台机器性能瓶颈
  • 演进:考虑容错能力、技术异构、职责划分等
  • 现状:虽然分布式架构带来性能提升,但也引入了新的问题(如服务安全、容错、分布式事务一致性)
(2)云计算的崛起
  • 无限性能:云计算提供了相对无限的性能支持
  • 云服务提供商:AWS、阿里云等能够满足系统对性能的需求
(3)无服务架构的兴起
  • 概念提出:2012年,iron.io公司率先提出
  • 商业化应用:2014年,AWS发布Lambda
  • 国内发展:2019年,阿里云、腾讯云等发布无服务产品
(4)无服务架构的核心
  • 后端设施:数据库、消息队列、日志、存储等,统称为“后端即服务”(BaaS)
  • 函数:业务逻辑代码,统称为“函数即服务”(FaaS)
(5)无服务架构的优势
  • 简化开发:开发者只需关注业务逻辑
  • 无需考虑技术组件:现成的后端设施
  • 无需考虑部署:部署过程完全托管到云端
  • 无需考虑算力:算力被认为是无限的
  • 无需操心运维:云服务商负责系统平稳运行
(6)无服务架构的局限性
  • 冷启动:函数在请求到达时才开始运行,导致延迟
  • 无状态:不适合依赖服务端状态的应用
  • 运行时间限制:函数运行时间受限
  • 适用场景:适合离线大规模计算、Web资讯类网站、小程序、公共API服务、移动应用服务端等
(7)无服务架构的未来
  • 谨慎乐观:类似于微服务架构的早期,无服务架构的推广仍需时间
  • 融合互补:未来多种架构风格将共存,分布式与非分布式边界将模糊
  • 应用案例:企业微信、QQ小程序、腾讯新闻等产品已使用无服务框架

相关文章:

架构01-演进中的架构

零、文章目录 架构01-演进中的架构 1、原始分布式时代:Unix设计哲学下的服务探索 (1)背景 时间:20世纪70年代末到80年代初计算机硬件:16位寻址能力、不足5MHz时钟频率的处理器、128KB左右的内存转型:从…...

npm-运行项目报错:A complete log of this run can be found .......npm-cache_logs\

1.问题 没有找到对应的某种依赖,node_modules出现问题。 2.解决 (1)查看对应依赖是否引入或者是由于合并分支错误 引入js或依赖不存在。谨慎删除依赖包 (2)查找对应引入依赖进行安装最后解决方法-删除依赖包清除缓存 npm cache clean --force (2)重新向同事引入…...

C++中的函数对象

C 中函数对象的定义和特点 定义:函数对象(Function Object)也叫仿函数(Functor),是一个类,这个类重载了函数调用运算符()。当创建这个类的对象后,可以像使用函数一样使用这个对象&am…...

godot游戏引擎_瓦片集和瓦片地图介绍

在 Godot 中,TileSet 和 TileMap 是用于处理瓦片地图的两个关键概念,它们的作用和用途有明显的区别。以下是两者的详细对比: 1. TileSet(瓦片集) TileSet 是资源,定义瓦片的内容和属性。 特点&#xff1a…...

[C++ 核心编程]笔记 4.1 封装

4.1.1 封装的意义 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制 封装意义一: 在设计类的时候,属性和行为写在一起,表现事物 语法: class 类名{ 访问权限: 属性 /行为 }…...

学习使用jquery实现在指定div前面增加内容

学习使用jquery实现在指定div前面增加内容 设计思路代码示例 设计思路 选择要添加内容的指定元素‌: 使用jQuery选择器来选择你希望在其前添加内容的元素。例如,如果你有一个 元素,其ID为qipa250,你可以使用$(‘#qipa250’)来选择…...

如何写出好证明(支持思想的深入数学写作)

不断的修改和精炼是写作过程中的重要环节,数学写作最终目的是提供对问题的深刻洞察而非仅仅陈述细节。 根据harvey mudd college Francis Su教授的《GUIDELINES FOR GOOD MATHEMATICAL WRITING》讲稿,总结出撰写好的数学证明需要注意以下几个要点&#x…...

基于边缘智能网关的机房安全监测应用

随着我国工业互联网的扎实推进,越来越多地区积极建设信息基础设施,以充沛算力支撑产业物联网的可持续发展,数据机房就是其中的典型代表。而且随着机房规模的扩大,对于机房的安全管理难题挑战也日益增加。 面向数据机房安全监测与管…...

在WSL 2 (Ubuntu 22.04)安装Docker Ce 启动错误解决

查看WSL版本 在 Windows 命令提示符(CMD)或 PowerShell 中,你可以使用以下命令来查看已安装的 WSL 发行版及其版本信息: wsl -l -v(base) PS C:\Users\Lenovo> wsl -l -vNAME STATE VERSION * Ubuntu-2…...

【RISC-V CPU debug 专栏 3 -- Debugging RISC-V Cores】

文章目录 RISC-V 调试规范开源与多样性挑战调试规范的重要性外部调试支持的主要组件调试功能Lauterbach 的贡献RISC-V 调试规范 调试 RISC-V 内核涉及许多独特的挑战,这是由 RISC-V 的开源特性和多样化的生态系统所决定的。为了避免专有调试接口的泛滥,RISC-V 基金会内的工作…...

Unity Banner广告后面自定义背景,高度适配

目的是实现这个,代码放下面 已经测试十几台设备包括pad没问题 以Max聚合为例 展示(关闭)Banner的时候调用Show,Banner加载成功回调里调用RefreshSizeDelta 最终获得是像素 所以UGUI的Canvas使用Constant Pixel Size模式&#xff0…...

【技术文档:技术传播的灯塔】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

git的使用(简洁版)

什么是 Git? Git 是一个分布式版本控制系统 (DVCS),用于跟踪文件的更改并协调多人之间的工作。它由 Linus Torvalds 在 2005 年创建,最初是为了管理 Linux 内核的开发。Git 的主要目标是提供高效、易用的版本控制工具,使得开发者…...

数据库编程(sqlite3)

一:数据库分类 常用的数据库 大型数据库 :Oracle商业、多平台、关系型数据库功能最强大、最复杂、市场占比最高的商业数据库 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 小型数据库 : mySQL是一个小型关系型…...

Python 中如何处理异常?

在Python中,异常处理是一种重要的编程技术,它允许开发者优雅地处理程序运行过程中出现的错误或异常情况,而不是让程序直接崩溃。 通过异常处理,我们可以使程序更加健壮、用户友好。 异常处理的基本结构 Python中最基本的异常处…...

RHCE——nfs网络文件系统

简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上使用…...

【人工智能】Python常用库-Scikit-learn常用方法教程

Scikit-learn 是一个功能强大的机器学习库,支持数据预处理、分类、回归、聚类、降维等功能,广泛用于模型开发与评估。以下是 Scikit-learn 的常用方法及详细说明。 1. 安装与导入 安装 Scikit-learn: pip install scikit-learn导入基本模块…...

sargo 官方镜像刷机

资料 官方镜像https://developers.google.cn/android/images?hlzh-cn zip镜像 https://googledownloads.cn/dl/android/aosp/sargo-rq3a.211001.001-factory-2a1befea.zip 使用 fastboot 刷写 下载好的镜像 步骤 先使用命令 adb reboot bootloader 再使用./falsh-all.sh 命…...

解决首次加载数据空指针异常

起初效果&#xff1a; 使用async...await异步加载数据 最终效果&#xff1a; 代码&#xff1a; <template><div class"user-list-container"><!-- 加载状态 --><div v-if"loading" class"loading">正在加载用户数据..…...

BERT的中文问答系统35

优化GUI布局、显示问答内容、增加自动搜索功能等。以下是完整的项目结构和代码&#xff1a; 项目结构 xihe241117/ ├── data/ │ └── train_data.jsonl ├── logs/ ├── models/ │ └── xihua_model.pth ├── requirements.txt ├── README.md └── 智…...

若依框架部署在网站一个子目录下(/admin)问题(

部署在子目录下首先修改vue.config.js文件&#xff1a; 问题一&#xff1a;登陆之后跳转到了404页面问题&#xff0c;解决办法如下&#xff1a; src/router/index.js 把404页面直接变成了首页&#xff08;大佬有啥优雅的解决办法求告知&#xff09; 问题二&#xff1a;退出登录…...

DB2数据库

DB2数据库是IBM公司开发的一种关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它支持多种数据模型&#xff0c;包括关系模型、文档模型、图模型等。DB2最初是为大型机环境设计的&#xff0c;但现在它已扩展到各种平台&#xff0c;包括Windows、Linux和Unix等&…...

python excel接口自动化测试框架!

今天采用Excel继续写一个接口自动化测试框架。 设计流程图 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件&#xff0c;得到测试信息&#xff0c;然后通过封装的requests方法&#xff0c;用unittest进行测试。 其中&#xff0c;接口关联的参数通过正则进…...

Spring框架整合单元测试

目录 一、配置文件方式 1.导入依赖 2.编写类和方法 3.配置文件applicationContext-test.xml 4.测试类 5.运行结果 二、全注解方式 1.编写类和方法 2.配置类 3.测试类 4.运行结果 每次进行单元测试的时候&#xff0c;都需要编写创建工厂&#xff0c;加载配置文件等相关…...

Java部分新特性

模式匹配 instance of 模式匹配 之前写法 public void print(Object o) {if (o instanceof String){String str (String) obj;System.out.println("This is a String of length " s.length());} else {System.out.println("This is not a String");} …...

keepalived+lVS(dr)高可用集群

keepalivedlVS(dr)高可用集群 规划 服务器名称IP描述masterkeepalivedlvsVIP:192.168.238.100DIP:192.168.238.151keepalived的master节点和lvs负载均衡backupkeepalivedlvsVIP:192.168.238.100DIP:192.168.238.152keepalived的备份节点和lvs负载均衡server1VIP:192.168.238.…...

【前端】JavaScript中的柯里化(Currying)详解及实现

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是柯里化&#xff1f;&#x1f4af;柯里化的特点&#x1f4af;柯里化的简单示例&#x1f4af;通用的柯里化实现&#x1f4af;柯里化让代码更易读的原因&#x1f4af…...

Cyberchef 辅助网络安全运营-数据格式转换

在网络安全的世界中&#xff0c;经常会遇到各种格式的数据&#xff0c;比如二进制&#xff0c;比如说16进制&#xff0c;URL编码&#xff0c;HTML编码&#xff0c;Unicode编码&#xff0c;Base格式的编码。网络安全运营一个明确的目标就是把这些不同的数据格式换成为可读的字符…...

鸿蒙面试 --- 性能优化(精简版)

一、性能优化的三个方面 感知流畅&#xff1a;通过合理运用动画提升用户对应用操作的感知流畅度&#xff0c;同时避免因动画滥用导致性能下降。涵盖视觉感知优化、转场场景动效感知流畅&#xff08;如出现 / 消失转场、导航转场、模态转场、共享元素转场等&#xff09;&#x…...

qsort函数详解+代码展示

文章目录 概要系列文章目录前言(1) 定义(2) 使用&#xff08;举例子 上代码&#xff09;1、定义数组&#xff1a;2、定义比较函数&#xff1a;3、调用 qsort&#xff1a;4、输出结果&#xff1a; (3) 注意事项 小结 概要 本篇博客将详细地介绍qsort排序函数&#xff0c;&#x…...

ms-hot29 解码方法

leetcode原题链接: 解码方法 ms-hot目录: ​​​​​​ ms-hot目录 上一篇&#xff1a;ms-hot28 合并两个有序数组 下一篇&#xff1a;二叉树的中序遍历 题目描述 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; "1" -> A "2"…...

【5】STM32·FreeRTOS·临界段保护与调度器挂起

目录 一、临界段代码保护简介 二、临界段代码保护函数介绍 2.1、调用示例 2.2、内部实现 三、任务调度器的挂起和恢复 3.1、调用示例 3.2、内部实现 一、临界段代码保护简介 什么是临界段&#xff1a;临界段代码也叫做临界区&#xff0c;是指那些必须完整运行&#xff…...

daos源码编译

1. 前言 本文详细介绍如何在almalinux8.9上编译daos.2.0.0源码。系统环境如下&#xff1a; daos: 2.0.0 linux os: almalinux 8.9 linux kernel: 4.18.0-513.5.1.el8_9.x86_64之所以选择2.0.0版本&#xff0c;是因为daos从2.0.0开始是一个全新的架构设计&a…...

Flink--API 之Transformation-转换算子的使用解析

目录 一、常用转换算子详解 &#xff08;一&#xff09;map 算子 &#xff08;二&#xff09;flatMap 算子 &#xff08;三&#xff09;filter 算子 &#xff08;四&#xff09;keyBy 算子 元组类型 POJO &#xff08;五&#xff09;reduce 算子 二、合并与连接操作 …...

火山引擎VeDI在AI+BI领域的演进与实践

随着数字化时代的到来&#xff0c;企业对于数据分析与智能决策的需求日益增强。作为新一代企业级数据智能平台&#xff0c;火山引擎数智平台VeDI基于字节跳动多年的“数据驱动”实践经验&#xff0c;也正逐步在AI&#xff08;人工智能&#xff09;与BI&#xff08;商业智能&…...

java获取docker镜像构建日志

在Java中获取Docker镜像的构建日志&#xff0c;你可以使用Docker Engine API。以下是一个使用OkHttp库的示例代码&#xff0c;用于获取构建日志&#xff1a; import okhttp3.*; import java.io.IOException; public class DockerLogsFetcher { private static final St…...

Spring-boot整合Webservice服务端

Spring Boot整合Webservice服务端 本文是基于前辈一顿吃不饱的文章SpringBoot整合WebService&#xff08;服务端客户端&#xff09;-CSDN博客&#xff0c;由于工作需要用.NET调用其他系统发布的WebService服务&#xff0c;尝试用java搭建一个WebService服务端测试一下&#xf…...

动静分离具体是怎么实现的?

在 Nginx 中实现动静分离是一种常见的优化手段&#xff0c;用于提高网站的性能和可扩展性。以下是 Nginx 动静分离的一些基本概念和配置方法&#xff1a; 1、什么是动静分离&#xff1a; 动静分离是指将网站的静态资源&#xff08;如图片、CSS、JavaScript 文件&#xff09;与…...

如何取出.vmdk文件中的数据

前提&#xff1a;我的云服务器到期了&#xff0c;于是我将云服务器导出了.vmdk镜像。本想在vm虚拟机中启动&#xff0c;但是一直报错。很是苦恼。 首先下载DiskGenius这个软件。 点击磁盘-》打开磁盘 打开.vmdk文件 可以看到内部的文件了&#xff0c;可以选择对应文件导出到桌…...

Vue2中 vuex 的使用

1.安装 vuex 安装vuex与vue-router类似&#xff0c;vuex是一个独立存在的插件&#xff0c;如果脚手架初始化没有选 vuex&#xff0c;就需要额外安装。 yarn add vuex3 或者 npm i vuex3 233 Vue2 Vue-Router3 Vuex3 344 Vue3 Vue-Router4 Vuex4 2. 新建 store/index.j…...

Swift 数据类型

Swift 数据类型 Swift 是一种强类型语言&#xff0c;这意味着在 Swift 中声明的每个变量和常量都必须具有明确的类型。Swift 的类型系统旨在帮助开发者编写清晰、安全的代码。本文将详细介绍 Swift 中的基本数据类型&#xff0c;包括整数、浮点数、布尔值、字符和字符串。 整…...

【pyspark学习从入门到精通22】机器学习库_5

训练-验证分割 TrainValidationSplit 模型为了选择最佳模型&#xff0c;会对输入数据集&#xff08;训练数据集&#xff09;进行随机分割&#xff0c;分成两个子集&#xff1a;较小的训练子集和验证子集。分割只执行一次。 在这个例子中&#xff0c;我们还将使用 ChiSqSelect…...

Zookeeper3.5.8集群部署

环境说明 准备三台服务器&#xff0c;我这边是虚拟机&#xff0c;分别为&#xff1a;bigdata141、bigdata142、bigdata143 下载安装包 下载链接&#xff1a;Index of /dist/zookeeper/zookeeper-3.5.8 下载完后&#xff0c;上传到其中一台服务器&#xff0c;我这边上传到 b…...

Linux 无图形界面磁盘空间排查与优化实践20241127

Linux 无图形界面磁盘空间排查与优化实践 引言&#xff1a;磁盘空间问题的痛点与挑战 &#x1f50d; 常见问题 当系统磁盘空间超过 90% 时&#xff0c;不仅可能导致性能下降&#xff0c;还可能让关键操作无法正常完成。这种情况下&#xff0c;如何高效且精准地排查磁盘占用来…...

TCP socket api详解 续

文章目录 守护进程怎么做到&#xff1f;setsid返回值 dev/null字符文件 daemonTCP协议 退出的时候呢&#xff1f; 会话有很多后台任务&#xff0c;bash肯定会退&#xff0c;那后台会话怎么办呢&#xff1f; 理论上也要退的&#xff0c;但实际上关了bash&#xff0c;bash肯定要…...

一道经典的整数划分题——分弹珠

CSDN 博客&#xff1a;一道经典的整数划分题——分弹珠 一、题目描述 这道题目是一道经典的整数划分问题&#xff0c;要求将 (M) 个弹珠分到 (N) 个盘子中&#xff0c;满足以下条件&#xff1a; 允许盘子为空。两种分法被认为相同当且仅当分配的弹珠数量相同&#xff08;不考…...

浏览器缓存与协商缓存

1. 强缓存&#xff08;Strong Cache&#xff09; 定义 强缓存是指在缓存的资源有效期内&#xff0c;浏览器会直接使用缓存中的数据&#xff0c;而不会发起网络请求。也就是说&#xff0c;浏览器会直接从本地缓存读取资源&#xff0c;不会与服务器进行任何交互。 如何控制强缓…...

Maven 如何配置忽略单元测试

在使用 Maven 进行项目构建时&#xff0c;有时您可能希望跳过测试阶段。 这在确保代码更改不影响测试结果或需要快速部署项目的情况下特别有用。 Maven 提供了多种方法来在构建过程中跳过测试。 为什么跳过测试&#xff1f; 加速构建&#xff1a;对于具有大量测试用例的大项…...

哪里能找到好用的动物视频素材 优质网站推荐

想让你的短视频增添些活泼生动的动物元素&#xff1f;无论是搞笑的宠物瞬间&#xff0c;还是野外猛兽的雄姿&#xff0c;这些素材都能让视频更具吸引力。今天就为大家推荐几个超实用的动物视频素材网站&#xff0c;不论你是短视频新手还是老手&#xff0c;都能在这些网站找到心…...

Python中的23种设计模式:详细分类与总结

设计模式是解决特定问题的通用方法&#xff0c;分为创建型模式、结构型模式和行为型模式三大类。以下是对每种模式的详细介绍&#xff0c;包括其核心思想、应用场景和优缺点。 一、创建型模式&#xff08;Creational Patterns&#xff09; 创建型模式关注对象的创建&#xff0…...