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

极氪汽车的云资源治理细探

作者:极氪汽车吴超

图片

前言

2021 年,极氪 001 迅速崭露头角,仅用 110 天便创下了首款车型交付量“最快破万”的纪录。2022 年 11 月,极氪 009 在短短 76 天内便率先完成了首批交付,刷新了中国豪华纯电品牌交付速度的纪录。2023 年 6 月,极氪汽车再次交付 10620 辆,成为保持五个月连续同比增长的唯一豪华纯电品牌。至此,极氪 001 已成为全球最快突破 10 万辆销售的豪华车,再次稳居 30 万元以上纯电车型销冠。

在过去的两年里,极氪汽车业务加速发展,数字化发展部门面临巨大挑战。作为支持公司履约交付、整车交付、支付结算等诸多核心系统的技术部门,团队几乎每天都需要应对不同规模的应用发布,且应用系统所需的云资源消耗日益增加。之前,为确保业务快速发展得到有效支持,基础设施的整体架构缺乏顶层统筹规划,形势犹如野蛮生长。公司虽然在行业赛道中不断打破交付纪录,但疯狂增长背后,则是濒临失控的基础设施框架及成本支出,这种状况正对未来业务的可持续发展,带来了极大的风险和隐患。

因此,从去年开始,技术中台团队制定了明确的技术目标,力求尽快成立专项小组,深度整治现有基础设施的问题。团队期待通过改进基础架构,为极氪汽车未来基础架构的可持续发展保驾护航。

管理挑战

摆在面前的第一个问题,就是云原生场景下的资源管理。

事实上,自 2021 年起,我们便开始了微服务和容器化改造计划,90% 以上的服务以容器的形式构建和部署。早期在讨论如何优化计算资源的配置时,常规的做法是对服务器进行资源利用率检测,对利用率不超过一定阈值的资源,按照 CPU /内存峰值用量调整即可。但在云原生环境下,由于 Kubernetes 为容器资源管理提供了资源请求(Request)与资源限制(Limit)的语义描述,使得应用可以超额分配在对应的服务器资源上,若只是简单的分析计算资源利用率,而忽略了资源的分配率,可能导致在下一次应用发布时,因资源不足而无法调度容器到对应节点。

公司当前使用到阿里云及多个私有云平台,运行了数十个 K8s 集群,同时这些集群上承载了数千个 Pod 节点,在实际运行应用系统时,许多服务的利用率并不高,造成了极大的资源浪费。但是当我们着手制定计划,希望优化这部分资源时,发现诸多挑战:

  1. 资源管理复杂度高: 相比于应用直接部署在服务器上,云原生架构的优势在于对底层计算资源的管理更为精细化,以集群为单位的资源调度方式,对于提升集群利用率有显著的作用。但与之带来的问题便是管理复杂度的问题。通过一个集群统一管理应用,虽然降低了总体资源成本,但使得分账、拆账变得更为复杂,早期为了能够解决各业务的分账以及权限管控等场景,职能团队分别创建了不同的 K8s 集群,给到对应的项目组,用于部署应用系统,但集群的资源利用率并没有得到有效提升。同时,随着业务的不断扩展,这些集群涉及到不同部门、不同环境,版本已存在越来越大的差异。在应用部署时,由于管理人员的水平参差不齐,导致在日常运维及问题诊断时,十分耗时。
  2. 资源分配不够智能: 业务类别千差万别,有 B 端运营管理,也有 C 端的高并发应用,虽然 K8s 提供了资源分配的方式,但是对于运维发布人员来说,难以预判未来应用的真实流量情况,以至于难以合理分配 CPU /内存资源大小,仅按照经验参数统一给出默认规格配置。
  3. 如何实现长期主义: 在制定策略时,我们担心此类运动式的架构优化活动,即便投入了大量的人力成本,也只能在短期内使得资源管理“看上去很美”,而随着业务架构的不断调整,又或者因优化资源产生稳定性影响之后,对未来持续运营管理资源的信心将会消减,从而使得原本的成本投入的边际收益趋向于零。

业务目标

为应对云资源治理方面的不足,以及不同云平台的能力差异,我们曾考虑过是否需要建立一套 CMP 多云管理平台,对所涉及到的云平台及账号统一管理。但是在评估是否要立项时,我们认为云原生时代下“以资源为中心”的多云管理理念,难以满足我们对于应用架构设计的期待。这种管理方式,不仅开发成本极高,还需要适配多个云厂商的不同接口,并且对于资源管理的意义并没有想象中的大,只是解决了一部分资源开通创建的工作,但这并非是云原生环境下应用管理的核心场景及工作。

极氪当前的基础设施架构主要是以 K8s 集群为底座,这意味着只要能够管理好这些集群,便能够管理好资源,从而为上层的业务系统提供更大的价值。于是,我们在设计资源管理方案时,彻底摈弃了 CMP 的以资源为中心的多云资源管理理念,投向了聚焦于云原生基础设施的管理这一方向。

平台技术团队将此次在资源管理域的项目目标定义为:成本可见、用量可控、配置可管, 而当前需要解决的问题包括:

1. 成本洞察与分析: 设计更为精细化的成本均摊模型,看清各业务的成本支出情况,同时为不同业务提供 Pod 资源利用率的智能分析,辅助运维部署工程师在应用发布时,合理设置资源规格;

2. 配置基线检查: 针对现有部署脚本配置合规性问题,做基线检查,确保调整优化后的配置能够满足日常监控、故障自愈等场景;

3. 收敛 K8s 集群数量: 在不影响业务的情况下,对部分业务量较小的闲散 K8s 集群进行合并,收敛集群数量,降低架构复杂度及管理成本;

4. 基础设施无状态化: 考虑到未来的出海业务可能部署在当前未覆盖的云厂商,我们希望以 K8s 作为标准技术底座,将基础设施尽可能做到无状态化,在应用发布过程中,仅需要改动少量参数即可完成应用的上线工作。

方案选型

成本摊销

由于极氪当前大多数的应用部署在阿里云,基于二八原则,我们首先调研了关于阿里云 ACK FinOps 的解决方案。对于极氪的当前的基础设施现状来说,ACK FinOps 套件是一个不错的选择,其分别包含了集群、命名空间(Namespace)、节点池和应用四个维度的成本分析方案。

借助于命名空间和应用维度的成本分析,这种基于实际资源用量的分账逻辑,使得账单分摊不再局限以服务器为单位,从而也为未来 K8s 集群数量收敛,提供了必要的能力支持。

但在云原生的场景下,针对容器级别的成本摊销,需要考虑更多维度的业务场景。举例来说,一台 4C32G 的服务器,资源被分配出去 3C/8G,那么这个时候,CPU 资源影响了这台服务器剩余资源的瓶颈,反之亦然。此外,K8s 的 pod 资源模型支持 request、limit 两个维度的资源分配,而影响到调度资源的则是 request。对于一些被设置为 BestEffort 或是 Burstable QoS 等级,资源被超卖的节点来说,难以完全基于某个指标去判断逻辑合理性。

ACK FinOps 的成本分摊模型为我们提供了更丰富的选择,分别能够提供基于 CPU、内存单维度资源分摊模型权重混合资源分摊模型等多种不同的逻辑实现。

单维度资源分摊模型的优势在于解释成本低,Pod 成本的计算逻辑大体为:

*Pod 成本 = (Pod 申请资源(Request)/ node 资源总量)node 节点单价即可。

业务团队仅需为实际使用量付费,当 K8s 集群规模较大时,未被分配的剩余闲置资源数越少,则也能侧面说明云平台团队治理能力的体现。

关于权重混合资源分摊模型,本质上要解决的是在同一集群内,同时充满了多样化的业务场景及开发技术栈。例如,对于一台 4C8G 的服务器,同时部署一个 1C6G 的服务和一个 2C1G 的服务,则这个使用,无论基于内存还是 CPU 的申请资源作为成本摊销的依据,均明显不合理。

在调研完了两种不同的分摊模型之后,考虑到极氪当前业务开发语言主要为 Java 技术栈的现状,应用 Pod 会向集群申请大量内存资源,导致内存的调度水位升高。虽然内存的单位成本较 CPU 而言,便宜的多,但对于该业务场景而言,内存成为了集群是否需要被扩容的瓶颈点。同时,不同于 CPU 的 QoS 存在显性的超卖,内存资源的利用率几乎约等于分配率,因此在此场景下,我们使用单一资源模型作为部门的成本分摊模型。

另一个问题是成本分账的颗粒度,未来整体平台架构的规划在完成了集群数量的收敛之后,会按照系统维度在命名空间层面做逻辑隔离,通过命名空间的分账方式能够满足业务需求。

图片
ACK 成本洞察

至此,云原生应用容器成本分摊的整体策略方向基本确定下来。

资源水位分析

关于应用容器资源配额的优化,主要集中在 CPU 和内存两个方面:

  • CPU 资源优化:若只是调整 Pod 的 QoS 等级,将 CPU 的 Request 值做出调整,虽然短期可超卖更多的 CPU 资源用于资源部署,但对于线上应用来说一旦工作负载过高,易于出现资源争抢,致使服务被驱逐的情况。
  • 内存资源优化:由于 Java 的内存资源在启动 JVM 时会被长时间占用,随着应用运行时间增加,一些代码质量较差的服务会逐渐出现内存未被及时回收的情况,从而导致 OOM 内存溢出。为避免 Pod 内存资源分配资源不足导致业务受损,工程师在启动 Pod 时设置的 Request/limit,通常会比 JVM 的堆栈内存要高出一定的比例。优化内存的同时,也需要考虑到业务潜在的 OOM 风险。

而容器服务 ACK 自带免费的成本套件 ack-koordinator 提供的资源画像能力,能够帮助我们长周期、持续性的识别到集群内未被合理使用的资源,并给出推荐值作为参考依据,实现容器粒度的资源规格推荐,降低容器配置的复杂度。

ACK 资源画像会为工作负载的每个容器资源规格生成画像值,通过对比画像值(Recommend)、原始资源请求量(Request),以及画像配置的资源消耗冗余(Buffer),资源画像控制台会为工作负载生成操作的提示,例如对资源请求提高或降低(即升配或降配)。若工作负载有多个容器,则会提示偏差幅度最大的容器。

当画像值大于原始资源请求量:表示容器长期处于资源超用状态,存在稳定性风险,应及时提高资源规格,控制台提升建议升配,避免未来运行过程中的稳定性风险。而当画像值小于原始资源请求量时,则表示容器可能有一定程度的资源浪费,可以降低资源规格。

图片

其底层算法会持续不断地收集容器的资源使用数据,取 CPU 和内存的聚合统计值生成画像结果,并针对时间因素采用了周期衰减算法;在聚合统计时,会给较新的数据采样点分配更高的权重,同时参考了容器出现 OOM 等运行状态信息,进一步提高了应用画像给出推荐值的准确性。最后,是从资源的可持续管理的视角出发,我们希望能够将现有的发布平台与资源画像的功能打通,做到自动推荐配置调优,从而规避未来业务量变化后,响应调整相对滞后的弊端。因此在同阿里云的云原生应用平台团队提出该需求之后,很快得到了响应,目前已能够提供 API 的能力,与极氪现有发布流程联动。

图片
应用发布资源配额优化

资源管理

多云环境下的 K8s 多集群管理,最后是关于如何解决极氪分布式云现状下的资源管理问题。由于我们当前存在着私有云和 IDC,不同的环境下的计费模型存在比较大的差异,财务模型也各不相同,这些都对多云运管平面的成本分析能力提供了更多的挑战。

为此,我们选择了 ACK One 统一管理极氪当前涉及到的数十个线上、线下 K8s 集群,以便在业务发展过程中,为工程师管理集群带来更好的一致性的云原生应用管理体验。ACK One 是阿里云面向混合云、多集群、分布式计算等场景推出的分布式云容器平台,能够统一管理阿里云上、边缘、部署在客户数据中心以及其他云上的 Kubernetes 集群,并简化集群管理界面,从而灵活地根据自身业务和数据管控等需求。

结合 ACK One,阿里云容器服务 FinOps 套件提供了统一的云服务厂商的账单与询价接入与默认实现,支持主流的云服务厂商、IDC 自建机房的费用数据的接入,并通过一致的云原生容器场景成本分摊与估算模型,进行成本管理。此外,还提供了多集群、多环境的统一集群管理、统一资源调度、统一数据容灾和统一应用交付能力,也提供了统一的财资治理能力。

图片
ACK One 多集群管理应用场景

最后,ACK FinOps 套件能够下发至线下及混合云环境,非常适合分析云下 IDC 节点及应用的成本。由于 ACK FinOps 无法获取线下以及其它云厂商的单位价格,为此,ACK One 为每个节点提供基于标签 Label 的方式,配置单独价格的相关配置方案。

kubectl label nodes  node.kubernetes.io/price-per-day="100"

在选择 ACK One 作为极氪云原生 K8s 多集群管理解决方案时,除了对于成本管控以外,配置检查和备份管理等功能也是我们当前所重点关心的。以配置检查为例,基于阿里云容器安全最佳实践,能够一键免费检查多云/混合云集群应用配置安全风险,保证多云/混合云集群容器应用的安全性、有效性和稳定性,并及时发现了早前的存量应用配置潜在的安全稳定性隐患。

图片

应用 Pod 配置检查包括:

  • 安全性:特权参数配置,高危内核 Capabilities,root 用户启动,未开启 TLS 的 Ingress,匿名用户权限绑定等。
  • 有效性:CPU /内存资源配额限制缺失等。
  • 稳定性:liveness 和 readiness 探针缺失,单副本启动等。

建设成果

通过阿里云容器服务提供的 ACK One 多集群管理、云原生资源画像等功能,极氪得以对线上及线下近 30 套 K8s 集群实现统一管理。取得了多方面的实质性的业务成果:

  • 高效的资源利用

    通过利用资源画像功能分析数千个 Pod 的资源使用情况,企业识别并检查了空闲资源、找到了潜在的资源配置问题。在修复这些问题后,部署策略得到优化,从而为企业减少了近 25% 的资源用量。这一举措每年帮企业节省了数百万元的 IT 成本投入,并显著提高了资源利用效率。

  • 系统稳定性和业务连续性的保障

    结合业务需求,企业制定了多种备份策略。针对这些策略,在 ACK One 平台上执行数据备份和恢复操作。这一做法提高了企业的业务连续性和数据安全性,进一步加强了系统的稳定性。

  • 跨云和混合云资源的集中管理

    ACK One 多集群管理功能使得企业能够在阿里云容器管理平台上实现对多个 K8s 集群的集中管理和维护,包括线上和线下环境。这种统一的管理架构降低了企业操作复杂性,提高了工作效率。

  • 敏捷的业务拓展和快速响应

    通过优化 K8s 集群和资源配置,企业能够在业务需求变化时更加敏捷地进行资源调整及扩展。这种弹性架构确保了企业能够在市场环境变化时迅速调整策略,提高竞争力。

  • 应用发布策略的优化

    借助 ACK One 的分析功能,企业得以优化应用发布策略,从而使系统更加稳定和高效。企业不仅降低了故障率,还释放了更多的时间和精力来关注核心业务的创新和发展。

  • 提升团队技能和合作效率

    在使用 ACK One 进行统一管理的过程中,企业内部团队对于 K8s 集群和相关产品技术的掌握程度逐渐提高。此外,由于各个职能团队之间在 ACK One 平台进行协作,也提高了团队的合作效率。

未来展望

今天,云计算已经成为全社会的数字经济基础设施,而云原生技术正在深刻地改变企业上云和用云的方式。极氪汽车作为新能源汽车的头部企业之一,在过去两年的高速发展过程中,围绕着云原生基础设施架构做了大量的技术、架构以及产品的关键选型,并整体落地了微服务、K8s、DevOps 等云原生代表技术及能力。与此同时,在分布式云技术设施架构的大背景之下,也面临了多重的挑战,也踩过不少的坑。

云原生时代的 FinOps 成本治理是一个很大的话题,FinOps 基金会将其定义为成本分析(Inform)、成本优化(Optimize)、持续运营(Operate)三个阶段。虽然前两个阶段能够更加显性的达到快速降本的目标,但如若不持之以恒的精细化管控资源,很快便会回到原样,只有将资源管理纳入到应用发布流程管控之中,才能真正管好云,用好云。面向未来,确保基础设施架构具备可持续发展的能力,赋能业务以更加稳定、高效、低成本的方式运行,充分发挥云的巨大价值,释放技术红利,仍有更长的路要走。

相关文章:

极氪汽车的云资源治理细探

作者:极氪汽车吴超 前言 2021 年,极氪 001 迅速崭露头角,仅用 110 天便创下了首款车型交付量“最快破万”的纪录。2022 年 11 月,极氪 009 在短短 76 天内便率先完成了首批交付,刷新了中国豪华纯电品牌交付速度的纪录…...

设计模式之抽象工厂

文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了…...

问道管理:数字经济概念走势强劲,竞业达、久其软件等涨停,观想科技等大涨

信创、智慧政务等数字经济概念22日盘中走势微弱,截至发稿,观想科技、慧博云通涨超15%,竞业达、中远海科、久其软件等涨停,云赛智联、延华智能、汇纳科技涨约9%,天玑科技、安硕信息、思特奇、零点稀有涨逾7%。 音讯面上…...

14-redis

一 Redis概述 1 为什么要用NoSQL 单机Mysql的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以 轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。 遇到问题: 随着用户数的增长…...

MySQL——基础——子查询

一、子查询 SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询 SELECT * from t1 WHERE column1 (SELECT column1 FROM t2); 子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT中任意一个 根据子查询的结果不同,可以分为: 标…...

业务系统架构实践总结

我从2015年起至今2022年,在业务平台(结算、订购、资金)、集团财务平台(应收应付、账务核算、财资、财务分析、预算)、本地生活财务平台(发票、结算、预算、核算、稽核)所经历的业务系统研发实践…...

Linux学习之DNS服务的原理

DNS服务一些理论 域名系统(Domain Name System,DNS)是互联网的核心应用服务,可以通过IP地址查询到域名,也可以通过域名查询到IP地址。 FQDN(Full Qualified Domain Name)是完全限定域名&#xf…...

《Linux内核源码分析》(3)调度器及CFS调度器

《Linux内核源码分析》(3)调度器及CFS调度器 文章目录 《Linux内核源码分析》(3)调度器及CFS调度器一、调度器1、调度器2、调度类sched_class结构体3、优先级4、内核调度策略 二、CFS调度器1、CFS调度器基本原理2、调度子系统各个组件模块3、CFS调度器就绪队列内核源码 一、调度…...

Docker:如何删除已存在的镜像

要删除已存在的 Docker 镜像,您可以使用 docker rmi 命令。 以下是完整的流程 步骤1:停止容器 如容器正在运行需要停止正在运行的 Docker 容器,您可以使用 docker stop 命令。 以下是停止容器的步骤: 首先,使用 do…...

Qt——Qt 开发中所涉及的所有控件(基本控件、容器控件、布局控件、高级控件、其他控件、多媒体控件、定制控件)

Qt 开发中所涉及的所有控件 一、基本控件 二、容器控件 三、布局控件 四、高级控件 五、其他控件 六、多媒体控件 七、定制控件 Qt开发中提供了许多控件(Widgets)供开发者使用,用于构建图形用户界面(GUI)应用程序。以…...

基于Ubuntu坏境下的Suricata坏境搭建

目录 Suricata环境安装 第一步、在 Ubuntu 端点安装 Suricata 1、加入Suricata源 2、更新安装包 3、下载SuricataSuricata 第二步、下载并提取新兴威胁 Suricata 规则集 1、在tmp文件夹下载 Suricata 规则集 如果发现未安装curl,使用apt安装即可:…...

vue3权限管理——(路由权限)动态路由设置

1.大概思路 设置基础路由login和home等页面;登录后从后端获取user,token,rights等数据,并将数据同时存储到vuex和sessionStorage中将后端获取的权限数据(作为不同用户显示不同菜单及不同路由的依据)和路由页面进行映射&#xff1…...

小程序开发之登录授权

小程序开发登录授权流程 看懂这张图登录授权就没问题了(哈哈哈哈哈) 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 sess…...

批量根据excel数据绘制折线图

要批量根据Excel数据绘制折线图,可以使用数据处理和图表绘制软件,例如Microsoft Excel或Python中的Matplotlib库。以下是两种方法: 1. 使用Microsoft Excel: - 打开Excel并导入包含数据的工作表。 - 选择需要绘制折线图的数…...

无锁并发:探秘CAS机制的魔力

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: 无锁并发:探秘CAS机制的魔力 ⏱️ 创作时间: 2…...

iOS App签名与重签名:从开发者证书到重新安装运行

前文回顾: iOS脱壳技术(二):深入探讨dumpdecrypted工具的高级使用方法 iOS逆向:越狱及相关概念的介绍 在本文中,我们将详细介绍iOS应用的签名过程,包括开发者证书的种类、证书与App ID、Provisi…...

vue项目,如何修改Element-Plus等UI组件库的样式,三种方式搞定!!!

前言 我们在学习和使用组件库构建页面的时候,时常会遇到这样的问题。 即,尽管组件库已经提供了较多的功能,来帮助我们构建自定义的效果,但有时仍不能使我们满意。 这个时候我们就不得不修改UI库的样式,来达到想要的状…...

httpd协议与apache

1.http 相关概念 HTTP是处于应用层的协议,使用TCP传输层协议进行可靠的传送。因此,需要特别提醒的是,万维网是基于因特网的一种广泛因特网应用系统,且万维网采用的是HTTP(80/TCP)和 HTTPS(443/…...

Go 自学:文件的写入和读取

首先,使用os.Create()函数建立一个文件。 接着,使用io.WriteString()函数将内容写入文件。 最后,使用os.ReadFile()函数读取文件内容。 注意,这里读取的文件内容是data byte,我们需要使用string()函数将其转换为字符串…...

py 项目上线centos

1 服务器py版本 ps -ef|grep python|grep -v grep 2 2.x版本 安装 PyMySQL pip install PyMySQL0.9.3 3 后台运行py文件 nohup python down.py 1 > log.log 2>&1 & 这个命令将 down.py 程序放入后台运行, 同时将 stdout 输出到 log.log 文件中&…...

【git】would clobber existing tag 报错解决

问题 在用vscode的Git去pull代码的时候git弹窗报错,查看报错日志发现以下内容: > git pull --tags origin feature/xxx-2.0.0 From 173.110.11.22:VV-WORK-FE/vv-desktop* branch feature/xxx-2.0.0 -> FETCH_HEAD! [rejected] …...

Python OCR 使用easyocr库将图片中的文章提取出来

Python OCR 使用easyocr库将图片中的文章提取出来 初环境内容步骤一:安装easyocr库步骤二:导入必要的库步骤三:创建OCR阅读器对象步骤四:指定要识别的图片路径步骤五:执行OCR识别并提取文章内容步骤六:遍历…...

门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据

环境: ivms-4200 v3.10.0.6_c 问题描述: 门禁系统忘记登入密码,现在更换电脑如何迁移旧电脑门禁系统的数据,旧电脑记住密码,忘了密码和密保了 解决方案: 1.前往海康官网下载4200客户端,在新电脑上安装 …...

初试Eureka注册中心

Eureka是spring cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)P(分区容错性)。一个Eureka中分为eureka server和eureka client。其中eureka server是作为服务的注册与发现中心。 搭建eureka服务 引入eureka依赖 引入SpringCloud为eureka提供的starter依…...

【趣味随笔】怎么维护自己的电脑?

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...

element 下拉组件获取对象

// 选择数据user:[{name:"小白",id:1,money:"100",love:"蛋糕"},{name:"小黑",id:2,money:"200",love:"奶茶"},{name:"小红",id:3,money:"300",love:"烧烤"},] <div><el…...

IDEA下SpringBoot指定环境、配置文件启动

1、idea下的SpringBoot启动&#xff1a;指定配置文件 Springboot项目有如下配置文件 主配置文件application.yml&#xff0c; 测试环境&#xff1a;application-test.yml 生产环境&#xff1a;application-pro.yml 开发环境&#xff1a;application-dev.yml 1.1.配置文件…...

python可视化matplotlib——绘制正弦和余弦

这是一个使用matplotlib库绘制正弦和余弦函数曲线的代码示例。代码中导入了需要的库&#xff0c;并设置了x轴和y轴的标签字体为华文楷体。然后&#xff0c;使用numpy生成一组x轴上的值t&#xff0c;并使用正弦函数生成对应的y轴值s&#xff0c;再使用余弦函数生成对应的y轴值z。…...

Day48|leetcode 198.打家劫舍、213.打家劫舍II、打家劫舍|||

leetcode 198.打家劫舍 题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 视频链接&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 题目概述 你是一个专业的小偷&#xff0c;…...

Mysql001:Mysql概述以及安装

前言&#xff1a;本课程将从头学习Mysql&#xff0c;以我的工作经验来说&#xff0c;sql语句真的太重要的&#xff0c;现在互联网所有的一切都是建立在数据上&#xff0c;因为互联网的兴起&#xff0c;现在的数据日月增多&#xff0c;每年都以翻倍的形式增长&#xff0c;对于数…...