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

news2024/11/26 12:48:42

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

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

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

目录

一、引言

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.coloradmin.cn/o/1849088.html

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

相关文章

打字侠,中小学生暑期的打字练习神器

亲爱的家长们,暑假来临,孩子们又要开始“沙发上的咸鱼”模式了!与其看着他们抱着手机、平板不放,不如让他们成为“打字侠”,在快乐中提升打字技能! “打字侠”是一款为中小学生量身打造的打字练习神器。别…

WPF 程序 分布式 自动更新 登录 打包

服务器server端 core api 客户端WPF // 检查应用更新 //1、获取最新文件列表 // var files fileService.GetUpgradeFiles(); // 2、文件判断,新增的直接下载;更新的直接下载;删除的直接删除 // 客户端本地需要一个记录…

宇宙星空星辰美景素材哪里找?高清无水印分享

宇宙星空的美丽总能激发人们的无限遐想和灵感,不仅在科学教育领域,更在电影制作和视觉艺术中占有一席之地。为了帮助您找到高质量的宇宙星空视频素材,以下平台将成为您获取令人难忘天体视频素材的首选。 蛙学府 蛙学府作为新媒体创作者的宝库…

如何将图片转换为表格?方法并不难!

如何将图片转换为表格?在数字化时代,图片中的表格信息提取和整理成为了我们日常工作中不可或缺的一部分。不论是学术研究、商业分析还是个人生活,快速、准确地将图片转换为表格都显得尤为重要。今天,我们就来介绍四款强大的图片转…

经验总结--开关MOS管发热的一般原因/电源开发经验总结

开关MOS管发热的一般原因 做电源设计,或者做驱动方面的电路,难免要用到场效应管,也就是人们常说的MOS管。MOS管有很多种类,也有很多作用。做电源或者驱动的使用,当然就是用它的开关作用。 无论N型或者P型MOS管,其工作原理本质是一样的。MOS管是由加在输入端栅极的电压来控…

Android蓝牙开发(二)之蓝牙配对和蓝牙连接

BluetoothDevice.class.getMethod 进行配对,代码如下: Method method BluetoothDevice.class.getMethod(“createBond”); Log.e(getPackageName(), “开始配对”); method.invoke(listdevice.get(position)); invoke传的参数就是要配对的设备&…

ffmpeg音视频开发从入门到精通——ffmpeg日志及目录操作

文章目录 FFMPEG1. 操作日志2. 文件移动和删除3. 操作目录重要函数 FFMPEG 1. 操作日志 日志级别 AV LOG ERROR AV LOG WARNING AV LOG INFO AV LOG DEBUG cmake_minimum_required(VERSION 3.27) project(FFmpeg_exercise) set(CMAKE_CXX_STANDARD 14)# 定义FFmpeg的安装路…

Android自定义View之不得不知道的文件attrs

其中demo_style如下:一般都是放的.9图片,为了方便就放个颜色了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190820183209784.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLm NzZG4ubmV0L3FxXzQyNzYxMz…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人,对于海外社媒的营销都是需要自动化管理的,因为自动化管理不仅省时省力,而且还节约成本; 海外云手机的自动化管理意味着什么?那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

鞋子分类数据集17399张69类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):17399 分类类别数:69 类别名称:[“0”,“1”,“2”,“3”,“4”…

全国实体商铺店铺商家采集工具,一键采集商家手机号,让你轻松找到目标客户

随着互联网的发展,越来越多的商家开始在网上开展业务,实体商铺的竞争也日益激烈。为了更好地吸引客户,很多商家都选择了线上推广和营销。然而,仅仅依靠线上推广是远远不够的,线下的实体商铺也需要积极拓展客源。因此&a…

DBeaver 数据结果集设置不显示逗号(太丑了)

从Navicat切换过来使用DBeaver,发现类似bigint 这种数据类型在结果集窗口中显示总是给我加上一个逗号,看着很不习惯,也比较占空间,个人觉得这种可读性也不好。 于是我在网上尝试搜索设置方法,可能我的关键词没命中&…

数据更新-插入元组(VALUES)、修改属性(SET)、删除元组(DELETE)

一、插入元组 1、插入单个元组&#xff08;使用的是VALUES子句&#xff09; &#xff08;1&#xff09;语句格式 INSERT INTO <表名> 【&#xff08;<属性名1【&#xff0c;<属性名2>&#xff0c;...】&#xff09;】 VALUES &#xff08;<常量1>【&a…

CATO原理中的数学与魔术(十四)——流程设计思路与升华

早点关注我&#xff0c;精彩不错过&#xff01; 系列终于进入尾声&#xff01;前面13篇文章已经穷尽搜刮掉我目力所及的全部CATO魔术的相关内容&#xff0c;并重新建立理论&#xff0c;分门别类进行了介绍。详情请戳&#xff1a; CATO原理中的数学与魔术&#xff08;十三&#…

aardio - 日历

写了个日历小例程&#xff0c;因 lunar 农历库存在问题&#xff0c;经过研究算是变相解决了&#xff0c;日历也完成了雏形&#xff0c;先开源出来&#xff0c;感兴趣的玩玩。 请下载最新paint库、customPlus库、lunar库。 不同的颜色搭配&#xff0c;实现不同的风格&#xff1…

小区业主管理系统

摘 要 随着城市化进程的加速和人口的不断增加&#xff0c;小区的数量也在不断增加。小区作为城市居民居住的主要场所&#xff0c;其管理工作也变得越来越重要。传统的小区业主管理方式存在诸多问题&#xff0c;如信息传递不畅、业务处理效率低下等。因此&#xff0c;开发一个高…

循环赛日程表

描述 n 2 ^ k个选手 每个选手必须与其他n-1个选手各赛一次每个选手一天赛一次比赛打n-1天 思路 k 3时的解 我们先进行假设&#xff1a;每个选手第一天和自己比&#xff0c;然后分解成4个子问题&#xff1a; (1)14号的第14天&#xff0c;对手1~4号; (2)14号的第58天&a…

数据结构——优先级队列(堆)Priority Queue详解

1. 优先级队列 队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&#xff0c;一般出队列时&#xff0c;可能需要优先级高的元素先出队列&#xff0c;该场景下&#xff0c;使用队列不合适 在这种情况下&#xff0c;数据结构应…

python-爬虫篇-爬取百度贴吧,段友之家的图片和视频

#!/usr/bin/env python # -*- coding: utf-8 -*-""" 爬取百度贴吧&#xff0c;段友之家的图片和视频 author: cuizy time&#xff1a;2018-05-19 """import requests import bs4 import osdef write_file(file_url, file_type):""&quo…

高可用设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.