为何云原生是未来?企业IT架构的颠覆与重构(上)

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是云原生

2、云原生的背景和起源

背景

起源

关键里程碑

3、为什么云原生很重要 

二、云原生的核心理念

1、可扩展性

2、弹性

3、持续交付和部署

三、云原生架构

1、微服务架构

2、容器化

3、服务网格

4、无服务器(Serverless)架构


一、引言

1、什么是云原生

云原生(Cloud Native)是指一种在云计算环境中设计、开发、部署和运行应用程序的方法和理念。云原生强调充分利用云平台的优势来构建可扩展、高可用和灵活的应用。它不仅仅是技术上的变革,更是一种新的思维方式和文化转变。

1. 微服务架构(Microservices Architecture):

  • 应用程序被分解成一系列小而独立的服务,每个服务负责特定的功能。各服务可以独立部署和更新,从而提高开发和运维的效率。


2. 容器化(Containerization):

  • 使用容器技术(如Docker)来封装应用程序及其所有依赖,从而确保在不同环境下的一致性。容器轻量、可移植,便于快速部署和扩展。


3. 动态编排(Orchestration):

  • 使用编排工具(如Kubernetes)来自动化容器的部署、管理和调度。这些工具帮助管理复杂的分布式系统,确保高可用性和可扩展性。


4. 持续交付与持续部署(CI/CD):

  • 通过CI/CD管道实现应用程序的快速迭代和自动化发布。每次代码更改后都可以通过自动化测试和部署流程,确保高质量和快速发布。


5. 基础设施即代码(Infrastructure as Code,IaC):

  • 使用代码来定义和管理基础设施资源(如服务器、存储、网络)。常见工具包括Terraform、Ansible等,帮助实现环境的一致性和可重复性。


6. 自动化与自愈(Automation and Self-Healing):

  • 高度依赖自动化工具和技术,实现应用程序和基础设施的自动监控、管理和修复,减少人为干预,提高系统的稳定性和可靠性。


7. 弹性与可扩展性(Elasticity and Scalability):

  • 通过云平台的弹性扩展能力,根据需求动态调整资源使用,确保应用在高负载下仍能平稳运行,同时在低负载时节省成本。


8. 无服务器架构(Serverless Architecture):

  • 开发者无需关心底层服务器的管理,通过云服务提供商(如AWS Lambda、Azure Functions)直接运行代码,按实际使用量付费,提高开发效率。

2、云原生的背景和起源

背景


1. 传统IT架构的局限性:

  • 传统的单体架构应用程序难以满足快速变化的业务需求,扩展性差、维护成本高,并且更新和部署周期长。传统IT架构通常依赖于物理服务器,资源利用率低,难以弹性扩展。


2. 虚拟化技术的兴起:

  • 虚拟化技术(如VMware)使得在单一物理服务器上运行多个虚拟机成为可能,提高了资源利用率,并简化了服务器管理和部署。然而,虚拟化仍然存在一定的资源开销,且在灵活性和扩展性方面有局限。


3. 云计算的发展:

  • 随着Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure等云服务提供商的崛起,企业开始将应用和数据迁移到云端。云计算提供了按需资源、弹性扩展和按使用量计费的优势,使得企业能够更灵活地应对业务需求。


起源


1. DevOps运动:

  • DevOps文化和实践的推广促进了开发和运维的紧密合作。通过自动化工具和持续交付管道,DevOps加速了应用程序的开发、测试和部署流程,提高了交付速度和质量。


2. 微服务架构:

  • 微服务架构逐渐成为构建现代应用程序的主流方式。它将单体应用拆分为一系列独立的小服务,每个服务可以独立开发、部署和扩展,解决了传统架构的诸多问题。


3. 容器技术的发展:

  • Docker于2013年发布,标志着容器化技术的成熟。容器提供了轻量级的虚拟化方式,使得应用程序及其依赖能够在任何环境中一致运行。随后,Kubernetes作为容器编排平台于2014年由Google开源,进一步推动了容器技术的广泛应用。


4. 云原生计算基金会(CNCF):

  • 2015年,Linux基金会成立了云原生计算基金会(CNCF),旨在推动云原生技术的发展和普及。CNCF孵化了许多关键项目,如Kubernetes、Prometheus、Envoy等,这些项目成为云原生生态系统的重要组成部分。


关键里程碑


1. Kubernetes的发布和普及:

  • Kubernetes作为一个开源的容器编排平台,迅速成为云原生应用的标准平台。它解决了容器的调度、扩展、管理等问题,使得大规模容器化应用的部署和管理变得更加简单和高效。


2. 服务网格(Service Mesh)的引入:

  • 随着微服务数量的增加,服务之间的通信、监控和安全性成为新的挑战。服务网格技术(如Istio、Linkerd)通过在服务之间插入代理层,提供了流量管理、安全控制和可观察性等功能。


3. 无服务器架构(Serverless)的兴起:

  • 无服务器架构使得开发者可以专注于业务逻辑,而无需管理底层基础设施。AWS Lambda等无服务器平台提供了事件驱动的计算模式,进一步简化了应用开发和部署流程。

3、为什么云原生很重要 

  1. 更高的灵活性和可扩展性:云原生应用通常基于微服务架构,将大型应用程序拆分成一组小的、独立的服务。这使得应用可以更容易地进行扩展和缩容,以满足不断变化的业务需求。此外,云原生还利用容器化技术,使得应用可以轻松地在不同的云环境中进行迁移和部署。
  2. 更快的开发和交付速度:云原生通过自动化和持续集成/持续部署(CI/CD)工具链,加速了软件的开发和交付过程。这些工具链可以自动构建、测试和部署应用,从而减少了手动操作的时间和错误。这有助于企业更快地推出新功能,并更快地响应市场变化。
  3. 更高的可靠性和弹性:云原生应用通常具有自恢复和容错能力,可以在出现故障时自动恢复或重新部署。此外,云原生还利用容器编排工具(如Kubernetes)来管理应用的生命周期,确保应用的高可用性和弹性。
  4. 更低的运维成本:云原生应用通常基于自动化和标准化的运维实践,可以降低运维成本和复杂性。通过自动化工具,运维人员可以更容易地管理应用的生命周期,包括部署、监控、日志收集、告警和故障排查等。
  5. 更好的可移植性和兼容性:云原生应用不依赖于特定的基础设施或云平台,可以在不同的云环境中进行部署和运行。这使得企业可以更容易地选择最适合自己的云平台,并在需要时进行迁移。
  6. 适应快速变化的市场需求:在数字化时代,市场需求和技术环境都在不断变化。云原生架构允许企业快速适应这些变化,通过快速迭代和交付来保持竞争优势。
  7. 推动DevOps文化:云原生与DevOps文化紧密相连,强调开发、运维和测试之间的紧密协作。这种文化有助于打破传统的部门壁垒,提高团队之间的协作效率,并促进更快的创新和交付。

二、云原生的核心理念

1、可扩展性

云原生架构中的可扩展性和弹性是两个紧密相关且至关重要的核心理念。它们确保应用能够灵活应对变化的负载,保持高性能和高可用性。

可扩展性(Scalability)
可扩展性指系统在负载增加时能够通过增加资源来保持性能和响应时间。它主要分为水平扩展和垂直扩展两种方式:

1. 水平扩展(Horizontal Scaling):

  • 概念:通过增加更多的实例(如服务器、虚拟机或容器)来分担负载。
  • 实现:使用容器编排工具如Kubernetes,自动根据负载情况增加或减少Pod的数量。通过负载均衡器(如Nginx、AWS ELB)分发流量到多个实例。
  • 优点:可以无限扩展,单点故障风险低,灵活应对高并发。


2. 垂直扩展(Vertical Scaling):

  • 概念:通过增加单个实例的资源(如CPU、内存)来提升处理能力。
  • 实现:调整云平台上虚拟机的规格,如增加AWS EC2实例的CPU和内存。
  • 优点:实现简单,适用于短期内的负载增长。

2、弹性

弹性(Elasticity)
弹性指系统能够根据实时负载动态调整资源使用,确保在任何负载条件下都能高效运行。

1. 自动扩展(Auto Scaling):

  • 基于指标的扩展:根据预设的指标(如CPU利用率、内存使用率、请求数)自动调整资源。Kubernetes的Horizontal Pod Autoscaler根据Pod的资源使用情况自动扩展或缩减Pod的数量。
  • 基于时间的扩展:根据预定的时间表调整资源,适用于有规律的负载波动场景。


2. 无服务器架构(Serverless Architecture):

  • 事件驱动计算:使用无服务器平台(如AWS Lambda、Azure Functions)按需运行代码,无需管理底层服务器资源。
  • 优势:极高的弹性和扩展能力,按使用量付费,适用于事件驱动的应用场景。


3. 弹性负载均衡(Elastic Load Balancing):

  • 动态流量分配:负载均衡器(如AWS ELB、Google Cloud Load Balancer)根据流量情况动态分配流量到不同的实例,确保流量均匀分布和系统高可用性。

3、持续交付和部署

持续交付(Continuous Delivery)
持续交付是一种软件工程实践,旨在通过自动化构建、测试和部署过程,使软件能够在任何时间点以可预见的、低风险的方式发布到生产环境中。持续交付的目标是让软件的发布过程变得快速、可靠和可重复。

关键要素:


1. 自动化构建和测试:

  • 构建自动化:每次代码变更后,系统自动构建项目,确保代码可以成功编译和打包。
  • 自动化测试:包括单元测试、集成测试和端到端测试,以验证代码的正确性和功能性。


2. 持续集成(Continuous Integration):

  • 开发者频繁地将代码合并到主分支,自动执行构建和测试,及时发现和解决代码冲突和缺陷。


3. 环境一致性:

  • 使用容器(如Docker)和基础设施即代码(IaC)工具(如Terraform),确保开发、测试和生产环境的一致性,减少环境相关问题。


4. 部署流水线(Deployment Pipeline):

  • 通过自动化流水线将代码从开发环境推进到生产环境,经过多个步骤(构建、测试、部署到暂存环境等),每个步骤都有严格的自动化检查和审批。


持续部署(Continuous Deployment)
持续部署是持续交付的进一步扩展,旨在实现代码的自动发布。持续部署意味着每次通过流水线的代码变更都会自动部署到生产环境,无需人工干预。

关键要素:


1. 自动化发布:

  • 每次代码变更都会自动通过流水线部署到生产环境,进一步减少了从代码提交到生产发布的时间。


2. 实时监控和反馈:

  • 监控生产环境的运行状况,自动检测异常和性能问题,快速反馈机制允许团队立即响应问题。


3. 渐进式发布:

  • 使用蓝绿部署(Blue-Green Deployment)或金丝雀发布(Canary Release),逐步将新版本推送给部分用户,观察系统表现,再逐步扩展到所有用户,降低发布风险。


4. 回滚机制:

  • 部署失败或新版本出现重大问题时,可以快速回滚到先前稳定版本,保证业务连续性。

 

三、云原生架构

1、微服务架构

微服务架构,简单来说,就是把一个大应用拆成很多小应用,每个小应用专注于一个特定的功能,彼此独立又相互协作。

举个例子:
想象一下我们开了一家餐馆,餐馆里有很多部门,比如厨房、前台、外卖部、财务部等。每个部门有自己的职责和流程。现在,让我们把这个餐馆类比成一个大应用,而每个部门就像是一个微服务。

具体来看:
1. 独立的部门:

  • 厨房只负责做饭,前台只负责接待客人,外卖部只负责送餐,财务部只负责处理账务。每个部门(微服务)都专注于自己的工作,不干涉其他部门的工作。
  • 同样,在微服务架构中,每个服务只负责特定的功能,比如用户管理、订单处理、支付等。


2. 独立部署:

  • 如果餐馆的厨房需要升级设备,不需要关停整个餐馆,只需要关闭厨房一段时间。其他部门依然可以正常运作。
  • 在微服务架构中,如果一个微服务需要更新或修复,只需重新部署这个服务,不会影响到其他服务。


3. 灵活性:

  • 我们可以根据需求增加多个厨房(扩展厨房的规模)来处理更多订单,或者增加多个外卖员来提升外卖服务的效率。
  • 微服务架构允许我们独立扩展每个服务,比如在流量高峰期增加订单处理服务的实例。


4. 通信:

  • 厨房、前台、外卖部、财务部之间需要相互沟通,可能通过电话或对讲机。
  • 微服务通过轻量级的通信协议(如HTTP/REST或消息队列)进行交互,传递数据和指令。


5. 故障隔离:

  • 如果厨房发生问题,比如煤气泄漏,需要暂时关闭厨房,但前台和外卖部仍然可以正常工作,接受预订和送餐。
  • 如果某个微服务发生故障,不会导致整个应用崩溃,其他微服务依然可以正常运行。


为什么使用微服务架构?
1. 提高开发效率:

  • 每个团队可以专注于某个微服务的开发,不用关心整个大应用的所有细节,提高了开发效率。


2. 灵活的技术选择:

  • 每个微服务可以使用最适合它的编程语言和技术栈,不同服务之间不必使用相同的技术。


3. 便于维护和更新:

  • 更新某个功能时,只需重新部署相关的微服务,不影响其他功能,降低了维护成本。


4. 提高系统稳定性:

  • 一个微服务出现问题,只会影响到它自己,不会拖累整个系统,系统整体更稳定可靠。


微服务架构就像把一个大任务拆分成多个小任务,每个小任务有自己的团队独立完成。这种方式不仅提高了效率,还让系统更灵活、更稳定,更容易扩展和维护。

2、容器化

容器化是云原生架构中的关键技术,它通过将应用程序及其依赖打包到一个标准化的单元(容器)中,使得应用能够在任何计算环境中一致地运行。容器化技术提供了高效的资源利用、便捷的应用部署和管理方式,使得云原生应用具有高度的可移植性和可扩展性。

什么是容器化?

容器化,简单来说,就是把应用程序和它需要的所有东西打包在一个“盒子”里,这个盒子叫做“容器”。无论你把这个盒子放在哪里,它都能正常运行,不会因为环境变化而出问题。

举个例子:
想象你要搬家,你的生活物品(衣服、餐具、书籍等)分别装在不同的箱子里。这些箱子就是容器。每个箱子里都有它需要的一切东西,打包好之后,你可以很轻松地把这些箱子搬到新家。到新家后,打开箱子,你的物品就能正常使用,不会缺东少西。

容器化的优势
1. 一致性和可移植性:

  • 容器包含了应用程序运行所需的所有内容,确保应用在任何环境中都能一致运行,消除了“在我这里可以运行”的问题。


2. 轻量级和高效:

  • 容器共享主机操作系统的内核,每个容器只包含应用程序及其运行时依赖,比虚拟机更轻量级。
  • 容器启动速度快,资源利用率高,适合高密度部署。


3. 隔离性和安全性:

  • 容器通过名称空间和控制组(cgroups)实现资源隔离,确保各个容器之间相互独立。
  • 这种隔离性提高了应用的安全性,防止一个容器中的问题影响到其他容器。


4. 快速部署和扩展:

  • 容器化的应用可以快速部署和扩展,通过容器编排工具(如Kubernetes)可以实现自动化的应用扩展和管理。
  • 容器化使得应用的扩展变得更加灵活和高效,能够迅速响应负载变化。


5. 简化开发和运维:

  • 开发者可以在本地环境中使用容器进行开发和测试,确保与生产环境一致,减少环境相关的问题。
  • 运维团队可以通过容器编排工具实现自动化部署、监控和管理,提高运维效率。

 

3、服务网格

什么是服务网格?

服务网格是用于管理微服务架构中服务间通信的一种基础设施层。它可以自动处理服务间的网络通信、负载均衡、安全性、监控和追踪等任务,让开发者可以专注于业务逻辑,而不必担心底层的通信问题。

举个例子:
想象一下你在一家大型公司工作,公司有多个部门(如销售、财务、HR等),这些部门需要相互沟通和协作才能完成工作。现在,公司决定聘请一个高效的管理员来处理这些部门间的沟通任务,使得每个部门可以更专注于自己的工作。这个管理员就是服务网格。

具体来看:
1. 部门间通信(微服务间通信):

  • 每个部门(微服务)都有自己的职责和任务,但他们需要频繁地与其他部门沟通。
  • 服务网格就像公司的管理员,负责确保每个部门之间的沟通顺畅高效。


2. 自动处理通信任务:

  • 管理员会自动处理所有的沟通事务,比如安排会议(路由请求)、传递消息(负载均衡)、确保信息安全(安全性)、记录沟通内容(监控和追踪)等。
  • 服务网格自动管理微服务之间的通信,提供可靠的路由、负载均衡、安全策略、监控和日志记录等功能。

典型的服务网格解决方案:


1. Istio:

  • Istio是目前最流行的开源服务网格解决方案之一,提供了丰富的功能,包括流量管理、安全策略、可观测性等。


2. Linkerd:

  • Linkerd是另一个流行的开源服务网格,专注于轻量级和高性能的服务间通信管理。


3. Consul:  

  • Consul提供服务发现、配置管理和服务网格功能,适合用于跨数据中心的分布式系统。

4、无服务器(Serverless)架构

无服务器(Serverless)架构是一种云计算模型,开发者无需管理服务器,而是将应用的代码和配置上传到云服务平台,平台自动分配资源来运行和扩展这些代码。尽管叫“无服务器”,实际上还是有服务器在运行,只是这些服务器的管理和维护完全由云服务提供商负责。

举个例子:
想象你是一个厨师,通常你需要准备食材、控制火候、清洗餐具、打扫厨房等各种工作。现在,你有了一个专属的厨房助理团队,你只需要专注于烹饪,他们会帮你准备食材、清洗餐具、打扫厨房等。这个厨房助理团队就是无服务器架构的云服务提供商。

具体来看:
1. 传统架构 vs. 无服务器架构:

  • 在传统架构中,开发者需要管理和维护服务器,处理硬件、操作系统、网络配置等基础设施问题。
  • 在无服务器架构中,开发者只需编写代码并上传到云平台,其余的事情(如服务器管理、资源分配、扩展等)全部由云服务提供商处理。


2. 事件驱动模型:

  • 无服务器架构通常是事件驱动的,代码(称为函数)会在特定事件发生时被触发和执行。比如,当用户上传图片时,触发处理图片的函数。
  • 就像当顾客下单时,厨房助理团队会自动准备食材,你只需要专注于烹饪这道菜。

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

Android 查询及获取应用程序 Package 及 Acticity 名称的方法

一、通过命令查询和获取应用的Package及Acticity (一)通过命令查询应用包名及安装信息 以下是常用命令: 命令形式作用adb shell pm list packages查询系统中所有应用的包名adb shell pm list packages -s查询系统应用包名adb shell pm lis…

MySQL 函数

1、CURDATE():返回当前的日期。 2、查询当前年月 SELECT DATE_FORMAT(CURDATE(),%Y-%m) AS year_month 3、当前日期添加 1 个月 INTERVAL 1 MONTH 4、查询近6个月的月份 SELECT DATE_FORMAT(CURDATE(),%Y-%m)AS year_month UNION SELECT DATE_FORMAT((CURDAT…

【网络安全学习】使用Kali做信息收集 -03- <综合侦察>

综合侦察涉及从多个来源收集和分析目标的信息,以了解其背景、特征、潜在漏洞和风险。 下面介绍一些在Kali中常用的综合侦察工具。 1.Dmitry 它是一个命令行工具,可以使用不同的选项来收集目标的各种信息。 Dmitry可以与whois服务和Netcraft服务结合使…

【启明智显产品介绍】Model4 工业级HMI芯片详解系列专题(一):芯片性能

Model4 工业级HMI芯片详解系列专题(一)【芯片性能】 Model4系列工业级MPU是国产自主面向工业应用的RISC-V架构的应用级芯片,内置玄铁64bit RISC-V CPU C906,主频高达600MHz,算力约1380DMIPS。 Model4系列工业级MPU具…

BizDevOps全局建设思路:横向串联,纵向深化

本文来自腾讯蓝鲸智云社区用户:CanWay BizDevOps概述 IT技术交付实践方法在不断迭代中持续优化。在工业化时代,Biz(业务)、Dev(开发)、Ops(运维)三者往往相对分离,甚至有…

Transformer预测 | 基于Transformer+LSTM股票价格预测时间序列预测(Pytorch)

效果一览 基本介绍 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量地进行衡量。但如今,借助于机器学习,可以通过搭建网络,学习一定规模的股…

API-操作元素内容

学习目标: 掌握操作元素内容 学习内容: 操作元素内容元素innerText属性元素innerHTML属性案例 操作元素内容: DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象。就是操作对象使用的点语法。如果想要修…

Table 宽度超出页面宽度时,出现滚动条,单元格内容不换行实

修改前 方法 <div styleoverflow:auto><table stylewhite-space: nowrap></table> </div>修改后

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景&#xff1a;测试数据既要在fixture方法中使用&#xff0c;同时也在测试用例中使用 使用方法&#xff1a;在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中&#xff0c;也可以在当前测试用例中使用。 原理&#xff1a;参…

Harbor本地仓库搭建003_Harbor常见错误解决_以及各功能使用介绍_镜像推送和拉取---分布式云原生部署架构搭建003

首先我们去登录一下harbor,但是可以看到,用户名密码没有错,但是登录不上去 是因为,我们用了负债均衡,nginx会把,负载均衡进行,随机分配,访问的 是harbora,还是harborb机器. loadbalancer中 解决方案,去loadbalance那个机器中,然后 这里就是25机器,我们登录25机器 然后去配置…

8.12 矢量图层面要素单一符号使用二(仅渲染中心点)

文章目录 前言仅渲染中心点&#xff08;Centroid fill&#xff09;QGis设置面符号为仅渲染中心点&#xff08;Centroid fill&#xff09;二次开发代码实现仅渲染中心点&#xff08;Centroid fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中仅渲染中心点&#xf…

DSP——从入门到放弃系列2——PLL锁相环(持续更新)

1、概述 锁相环&#xff08;Phase Locked Loop,PLL&#xff09;是处理器的时钟源&#xff0c;控制着C6678处理器中C66x内核、各外围设备的时钟的时钟比、对准和选通功能。 2、功能描述 上图显示了PLL和PLL控制器的逻辑实现。PLL控制器提供通过软件可配置的分频器&#xff0…

MT8766安卓4G核心板_MTK联发科PCBA方案开发

MT8766是联发科四核4G模块方案&#xff0c;安卓一体板。 采用台积电 12 nm FinFET 制程工艺&#xff0c;4*A53架构&#xff0c;Android 9.0操作系统&#xff0c;搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力&#xff0c;专为具有…

自然语言处理(NLP)—— 神经网络自然语言处理(Neural NLP)基础知识

1. 文章概览 本文是关于神经网络自然语言处理&#xff08;Neural NLP&#xff09;的概览&#xff0c;涵盖了基础原则、历史概览、处理流程、神经网络架构以及最近的训练范式。 1.1 基本原则 这部分会讲述自然语言处理&#xff08;NLP&#xff09;与神经网络在处理语言任务时遵…

关于UnityWebgl缓存机制

最近在做UnityWebgl热更的时候&#xff0c;我的热更程序集更新&#xff0c;而我所有运行过项目的设备都没有更新成功。而没运行过的设备则运行的是最新的程序集。那么说明必然是和缓存有关系了。 特意查了一下问题&#xff0c;发现Edge浏览器会把一些比较小的图片、脚本等资源进…

Android framework配置默认屏幕亮度值源码分析

1、概述 在Android中&#xff0c;config.xml文件用于配置各种系统设置和资源。对于屏幕亮度的配置&#xff0c;config.xml并不是直接用于设置屏幕亮度的地方&#xff0c;但它可以包含默认的系统设置和一些相关的参数。以下是如何在config.xml中配置一些与屏幕亮度相关的设置的…

yolov9-pytorch 深度学习目标检测算法模型

YOLOv9 论文 https://arxiv.org/abs/2402.13616 模型结构 YOLOv9将可编程梯度信息 (PGI) 概念与通用 ELAN (GELAN)架构相结合而开发&#xff0c;代表了准确性、速度和效率方面的重大飞跃。 算法原理 Yolov9将可编程梯度信息&#xff08;PGI&#xff09;和GLEAN&#xff08…

Swagger3.0接口生成并导入YApi

一、引入依赖 <!--Swagger-UI API文档生产工具--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency><!--解决Swagger访问主页时的…

PHP实现企业微信素材上传与获取的完整指南与踩坑日记

企业微信作为一款专门为企业打造的即时通讯工具&#xff0c;提供了丰富的功能和接口&#xff0c;其中包括素材管理。素材管理在企业内部的沟通、分享和展示中起着重要的作用。本篇文章将介绍如何使用PHP语言对接企业微信素材上传和获取的功能。 ## 1. 准备工作 首先&#xff0…

课设--学生成绩管理系统(三)

欢迎来到 Papicatch的博客 文章目录 &#x1f349;报告目的 &#x1f349;总体设计 &#x1f348; 模块处理逻辑 &#x1f349;数据库设计 &#x1f348;总览表 &#x1f348;表设计 &#x1f34d;管理员信息表 &#x1f34d;课程基本信息表 &#x1f34d;课程扩展信息…