【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
- 1.弹性裸金属技术背景
- 1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失
- 1.2 传统 KVM 虚拟化系统导致资源争抢不可避免
- 1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈
- 2.弹性裸金属技术实现
- 2.1 VPC 和 EBS 云盘接入
- 2.2 实现大量弹性网卡(ENI)和 EBS 云盘设备接入
- 3.X-Dragon Hypervisor 基于神龙的软硬一体的虚拟化技术
- 3.1 自研虚拟 CPU 调度器 —— VOS
- 3.2 内存优化:内存分配器 VMEM 与用户态 QEMU 内存瘦身
- 3.3 虚拟化运行加速
- 3.4 极速启动
- 3.5 物理机 CPU 全供给虚拟机
1.弹性裸金属技术背景
2003 年,Xen 在 SOSP 发表 Xen and the Art of Virtualization,拉开了 x86 平台虚拟化技术的大幕。2006 年,AWS 发布 EC2(Elastic Compute Cloud
),同年发布 S3(Simple Storage Service
),拉开了公共云服务的大幕。EC2 的核心正是基于 Xen 虚拟化技术。虚拟化技术赋予了 EC2 核心产品价值 —— 弹性,同时虚拟化技术给网络虚拟化、存储虚拟化,和管控系统提供了业务部署点。
第一代虚拟化技术的特征是:Xen/KVM + 软件 network vSwitch + 软件 storage initiator + 管控等 All on Xeon。这代技术的痛点和思考,如下图所示。
1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失
众所周知,IaaS 公共云技术的核心是 Intel 至强处理器 VT 等 硬件辅助虚拟化技术(Hardware-assisted virtualization
),配合主流虚拟化系统软件(KVM / Xen / VMware ESXi 等),实现了 IaaS 弹性计算;客户则是通过 ECS(或者 AWS EC2)购买虚拟机(VM)形式的计算资源。
得益于高度成熟的虚拟化技术,VM 形式的计算资源 “几乎” 等价于客户线下的物理服务器资源,但是 “几乎” 并不是 “完全”。一个典型的案例就是 Intel 至强处理器的 VT 硬件辅助虚拟化能力会被公共云服务提供商的虚拟化系统 “消费掉”,客户无法在公共云 VM 实例中再次部署虚拟化系统,致使传统 OpenStack 和 VMware based workload 无法在公共云部署。
客户希望用一套 OpenStack / VMware 统一管理 公共云线上资源 和 专有云线下资源,同时在控制面和数据面打通线上线下资源,在兼顾专有云数据安全、法律合规的基础上,充分利用公共云计算资源的弹性能力,但是由于 Intel 至强处理器 VT 硬件辅助虚拟化能力 “被消费”,使得此种 混合云技术 很难在公共云实现。云原生安全容器创新依赖 Intel VT 硬件辅助虚拟化能力输出,这是传统虚拟化无法解决的问题。
1.2 传统 KVM 虚拟化系统导致资源争抢不可避免
以传统的 KVM 虚拟化系统为例,双路 Skylake(96 个 HT)计算资源的虚拟化典型部署情况是:有 8 个 HT 部署网络虚拟化 vSwitch 和存储虚拟化,对外售卖 88 个 HT 作为 vCPU 计算资源。我们需要注意到,对外售卖的 88HT vCPU 计算资源和 8 HT 网络 / 存储虚拟化是部署在同一组 Skylake CPU 上的,那么如下共享资源争抢是不可避免的。
- CPU DDR 带宽、LLC 等共享资源的争抢。在机头网络带宽迅速提升的当下,DDR 带宽、LLC 等资源争抢现象愈发突出。
- 半虚拟化(Para-virtualized)I/O 设备模型等资源争抢引入售卖 CPU 抖动和售卖 I/O 抖动。
- 存储和网络等 I/O 内部层级化 HQoS 难于实施。一般而言,层级化 HQoS 是解决资源争抢的有效手段,电信级网络设备一般会部署 HQoS 进行资源调度,而 HQoS 的典型部署方法需要通过芯片实现。
1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈
传统 KVM 虚拟化系统由(计算虚拟化)QEMU-KVM + (网络虚拟化)DPDK based vSwitch + (存储虚拟化)SPDK based I/O initiator 构成。
在 Intel 引入 VT 硬件虚拟化支持后,配合 KVM、Xen 等虚拟化系统软件,由 CPU 指令处理的数据面和 KVM 等虚拟化系统软件形成了控制面及异常处理路径,此种软硬件协同设计既实现了 CPU 和内存虚拟化的数据路径的最小开销,又保留了 KVM 控制路径和异常处理路径的高度灵活性。
同处于数据路径的存储虚拟化和网络虚拟化虽然通过 DPDK 和 SPDK 等技术接近了软件优化的技术极限,但是仍然无法和芯片的加速性能媲美。特别是在网络吞吐向 100GbE 演进的过程中,交换网络的带宽能力和 Intel 至强处理器的处理能力间的差距逐渐拉大,在传统 KVM 虚拟化系统下,通过 DPDK、SPDK 等纯软件进行 I/O 性能优化的瓶颈日渐凸显。
2.弹性裸金属技术实现
第一代虚拟化技术的业务痛点,催生了第二代虚拟化技术的产生,弹性裸金属产品也应运而生。那么第二代虚拟化技术具备哪些特征呢?
- 全部 I/O 设备通过 VT-d 设备直通模式进入 VM,以此减少 para-virtualization I/O 半虚拟化开销。
- 随着 VT-d 设备直通的引入,网络虚拟化和存储虚拟化需要一个新的业务部署点。
- VT-d 设备直通引入后,SR-IOV 等技术却无法达到和传统 QEMU PV 设备一样的灵活性,I/O 硬件虚拟化催生 Intel scalable IOV 的业务诉求。
- 随着存储虚拟化和网络虚拟化新的业务部署点的产生,这个业务部署点很显然需要针对计算、网络、存储、安全等 IaaS 核心业务部署定制化芯片加速。
- 同时支持传统 VM、弹性裸金属服务器、安全容器等 IaaS 最新业务诉求。
简而言之,Hypervisor 的主要组件全部下沉进入一个定制计算节点,该定制计算节点完成 I/O 设备虚拟化、网络虚拟化、存储虚拟化和管控部署,以及安全特性部署等。
而主机侧,针对公共云的需求,从计算和内存原来的 QUME + KVM 方式,经过高度定制和瘦身后,降低了主机资源占用并提升计算服务质量,演化到了裸金属架构。
第二代虚拟化技术使弹性裸金属的产品落地成为可能。阿里云在 2017 年 10 月举行的杭州云栖大会上正式发布弹性裸金属产品,同年 11 月,AWS reinvent 发布 EC 2 版本弹性裸金属产品。中美公共云服务提供商可以说在弹性裸金属的产品定义、产品适用场景和技术上殊途同归。弹性裸金属的核心产品技术逻辑:通过技术创新,使普通物理服务器具备虚拟机的弹性和使用体验。
正是有了这个逻辑,我们可以推演出技术创新的突破点:通过软硬一体化的技术手段,让普通物理服务器能够无缝接入云平台的管控系统、VPC 云网络和 EBS 云盘。
2.1 VPC 和 EBS 云盘接入
我们知道在虚拟化技术中,虚拟机是通过 Virtio 实现网络和存储 I/O 设备的;同时,我们注意到,Virtio 这个半虚拟化设备模型实际上是严格按照 “真实” PCIe 设备规范的定义而实现的 I/O 设备。也就是说,Virtio 半虚拟化设备完全可以通过芯片实现。
在通过芯片实现 Virtio 的时候,考虑到 VPC 和 EBS 云盘实现的复杂度,我们采用了新的模式:让芯片透传 PCIe TLP 包到可编程处理器,然后通过可编程处理器复用 QEMU 已有的成熟的 Virtio 后端代码。此种模式能够最大限度地保持既有的虚拟化架构,做到云平台管控系统、VPC 系统、EBS 云盘系统的 “零修改”。
2.2 实现大量弹性网卡(ENI)和 EBS 云盘设备接入
VT-x/KVM 虚拟化技术具有天然技术优势,支持大量网络和存储设备。而弹性裸金属产品的核心出发点就是要兼具虚拟机和传统物理机的优点。虚拟机对大量网络设备和存储设备的支持,必须在弹性裸金属产品中予以实现。
在多种规格的网卡和存储 PCIe I/O 设备接入时,根据 PCIe 规范有两个方法:
- 1️⃣ 通过多级 PCIe switch 扩展,实现大量 PCIe switch downstream port,然后每个 PCIe switch downstream port 挂载一个 PCIe I/O 设备;
- 2️⃣ 通过 PCIe SR-IOV 技术,支持大量 PCIe virtual function(VF)设备。
进一步对比虚拟机 I/O 设备,我们可以看到设备的热插拔、Guest OS 的零侵入是公共云 IaaS 产品的刚需。只有通过多级 PCIe switch 扩展模式,才能通过 PCIe native hotplug 技术标准,实现上述和虚拟机一致的设备热插拔和 Guest OS 零侵入。产品需求明确后,我们创新性地通过芯片 RTL 实现了全球第一个片上多级 PCIe switch 扩展,当前最多能够支持 63 个设备,以此实现大数量规格的网络 ENI 和存储 EBS 云盘PCIe I/O 设备接入;同时由于支持原生 PCIe 原生热插拔能力,保证了 Guest OS 的零侵入,以及客户在 Open API 和控制台等方面和虚拟机一致的使用体验。
3.X-Dragon Hypervisor 基于神龙的软硬一体的虚拟化技术
在阿里云神龙硬件平台下,虚拟化架构也做了相应的升级,使计算虚拟化部分的架构更加清晰简捷,让虚拟机能提供接近物理机的性能。如下图所示,神龙虚拟化架构的主要特点是:
- I/O 链路从传统的通过软件实现转变为通过硬件和直通设备实现;
- 存储虚拟化、网络虚拟化都在 MOC 卡上实现;
- 同时将管控系统、监控程序等都下沉到 MOC 卡上。
- 在提供计算服务的物理机上,只运行自己裁剪的 Linux 操作系统和轻量化的虚拟机监控器。
神龙虚拟化架构比起传统的 KVM 虚拟化的关键优化技术点简要描述如下。
3.1 自研虚拟 CPU 调度器 —— VOS
VOS
(VM-Oriented Scheduler
)是面向虚拟机的调度器,是阿里云在神龙平台上自研的调度器,减少了虚拟 CPU 调度开销,同时将其他控制面的作业调度给虚拟 CPU 带来的争抢下降一个数量级研发的更加稳定和高效的计算虚拟化产品。如下图所示,VOS 调度器实现的是非公平调度(与内核中的 CFS 调度器不同),让虚拟 CPU 线程具有更高执行优先级,保证客户购买的虚拟机的计算性能,而控制面的作业调度执行被安排在预先设定的一个较低优先级和预设时间片中投机执行,而且控制面的作业是可以被内核态抢占的。
通过 VOS 调度器,虚拟 CPU 的调度延迟低到毫秒级;通过 ping flood
来测试网络 ping
的延时抖动,抖动下降到了百万分之一左右(即 ping
一百万个报文只遇到 1 个报文延迟的比例比均值明显偏大),抖动比之前的架构下降了两个数量级。在物理机上执行的控制面的作业包括:虚拟机生命周期管理、QEMU 控制线程、写日志、监控执行、包括热升级 / 热迁移在内的运维操作,在 VOS 的管理下,正在运行的虚拟 CPU 的干扰被控制在一个非常低的水平,虚拟机的计算稳定性大幅提升。
3.2 内存优化:内存分配器 VMEM 与用户态 QEMU 内存瘦身
内存分配器 VMEM 是阿里云研发的用于虚拟机内存分配的分配器,可以大幅减少内核维护的内存页表等开销(开销从以前的 1.5 % 1.5\% 1.5% 左右下降到 0.1 % 0.1\% 0.1% 左右),支持 1GB 的大页进一步减少 EPT 开销,实现了通过 vMCE 对硬件错误的内存页进行隔离。
在内存方面,我们通过 QEMU 对其进行瘦身,将单个虚拟机的 QEMU 进程内存开销降低到 5MB 以内,通过全新设计的用户态内存分配器避免了内存碎片,同时对不常用的内存资源进行延迟分配。
通过这两种内存优化手段,神龙虚拟化的架构比传统 KVM 虚拟化节省了约 10%的内存。
3.3 虚拟化运行加速
通过硬件加速虚拟机中的 HLT 和 MWAIT 指令,使其唤醒延迟与物理机几乎一样。同时将定时器进行硬件虚拟化,在虚拟机中访问定时器不会再触发 VMEXIT,从而提升虚拟机性能。通过这些优化,进程调度性能得到了较大提高,下图的调度延迟实测数据展示的是在某次测试中,调度两百万个进程,并统计每次调度的延迟的结果。可以看到,延迟有 15 % 15\% 15% 的下降。图中的 g5.4xlarge
实例是之前的 KVM架构的 ECS 虚拟机实例规格,g6.4xlarge
是神龙硬件平台下经过优化的 ECS 虚拟机实例规格。
3.4 极速启动
为了让虚拟机加速启动,我们对神龙虚拟化架构也做了很多优化。首先是资源的快速分配,包括实现多线程的初始化、虚拟机内存页分配时的批处理化。同时对虚拟机依赖的固件进行裁剪、重构、优化,使虚拟机实现毫秒级加载。我们还对一些特殊的应用场景应用了内部称为 vmfork
的技术,让虚拟机能实现秒级的快速复制。
3.5 物理机 CPU 全供给虚拟机
在传统的 KVM 虚拟化架构下,宿主机的 CPU 资源是不可能全部供给虚拟机使用的,一般还要预留 CPU 核,用于网络虚拟化软件、存储虚拟化软件、管控系统、监控脚本等的计算资源开销。在神龙架构下,网络虚拟化和存储虚拟化都通过硬件虚拟化的方式下沉到一张 MOC 卡上,同时管控系统和绝大部分监控脚本都下沉到 MOC 卡上运行,这样物理机 CPU 资源就可以全部通过虚拟化的方式分配给虚拟机使用。经过评估,通过下沉这部分 CPU 开销到 MOC 卡上,物理机的 CPU 资源利用率能提高 10 % 10\% 10% 左右。
相关文章:
【弹性计算】弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术
弹性裸金属服务器和神龙虚拟化(三):弹性裸金属技术 1.弹性裸金属技术背景1.1 传统 KVM 虚拟化系统导致 CPU 计算特性损失1.2 传统 KVM 虚拟化系统导致资源争抢不可避免1.3 传统 KVM 虚拟化系统导致 I/O 性能瓶颈 2.弹性裸金属技术实现2.1 VPC…...
(贪心 合并区间)leetcode 56
思路来源:代码随想录--代码随想录_合并区间题解 首先用lambda 按照左界值升序排序 建立答案的二维数组,将第一个行区间放入,判断从第二行开始 第i行的左区间一定大于第i-1行的左区间(排序过了),所以只判断…...
如何理解语言模型
统计语言模型 先看语言模型,语言即自然语言,模型及我们要解决的某个任务。 任务一:判断哪句话出现的概率大 任务二:预判空缺的位置最有可能是哪个词 再看统计,统计即解决上述两个任务的解决方法。先对语句进行分词…...
动态规划/贪心算法
一、动态规划 动态规划 是一种用于解决优化问题的算法设计技术,尤其适用于具有重叠子问题和最优子结构性质的问题。它通过将复杂问题分解为更简单的子问题,并保存这些子问题的解以避免重复计算,从而提高效率。 动态规划的核心思想 最优子结…...
Hadoop简介
1. Hadoop简介 官网:http://hadoop.apache.org 1.1 Hadoop架构 Hadoop由三个模块组成:分布式存储HDFS、分布式计算MapReduce、资源调度引擎YARN 1.2 Hadoop历史 Hadoop作者Doug Cutting Apache Lucene是一个文本搜索系统库 Apache Nutch作为前者的一部…...
Vscode 便用快捷键设置教程
文章目录 简介:1. go to define (跳转到函数定义的位置)2. go to declaration (跳转到函数声明的位置)3. move line (上下移动本行代码)3.1上下复制本行代码 4. 前进和后退(就是前进到光标上一次停留的位置,和后退到那…...
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表
一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 :“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES; 展示所有的数据库 CREATE DATABASE 数据…...
水滴tabbar canvas实现思路
废话不多说之间看效果图,只要解决了这个效果水滴tabbar就能做出来了 源码地址 一、核心实现步骤分解 布局结构搭建 使用 作为绘制容器 设置 width=600, height=200 基础尺寸 通过 JS 动态计算实际尺寸(适配高清屏) function initCanvas() {// 获取设备像素比(解决 Re…...
windows安装vue
1、下载nodejs安装包 https://nodejs.cn/download/ 2、安装node 中途记得可以自己改安装路径,其他都是下一步 3、安装完成后检查 node -v :查看nodejs的版本 npm -v :查看npm的版本 4、修改npm默认安装目录与缓存日志目录的位置 在nodejs目…...
使用3090显卡部署Wan2.1生成视频
layout: post title: 使用3090显卡部署Wan2.1生成视频 catalog: true tag: [Kubernetes, GPU, AI] 使用3090显卡部署Wan2.1生成视频 1. 环境说明2. 模型下载3. 克隆仓库4. 安装依赖5. 生成视频 5.1. 使用generate脚本生成5.2. 使用gradio启动UI界面生成 5.2.1. 启动gradio服务5…...
DCN讲解
DCN是DeepFM的升级版,后者是只能做二阶交叉特征,随着阶数上升,模型复杂度大幅提高,且FM网络层较浅,表达能力有限。google团队通过构建深度交叉网络来自动进行特征的高阶交叉,且时空复杂度均为线性增长&…...
ARM 架构下 cache 一致性问题整理
本篇文章主要整理 ARM 架构下,和 Cache 一致性相关的一些知识。 本文假设读者具备一定的计算机体系结构和 Cache 相关基础知识,适合有相关背景的读者阅读 1、引言 简单介绍一下 Cache 和内存之间的关系 在使能 Cache 的情况下,CPU 每次获取数…...
算法-二分查找
二分查找 其实二分查找是一个很简单理解的东西,从他的名字就可以看出,就是要分为两段去查找一个元素 我们确定一个中间元素,然后将这一个元素和左边的部分和右边的部分做对比 然后根据实际情况来选择一个部分来继续做这么一个步骤 直到找…...
Python Cookbook-2.24 在 Mac OSX平台上统计PDF文档的页数
任务 你的计算机运行着比较新的MacOSX系统(10.3的“Panther”或更新的版本),现在需要知道一个 PDF 文档的页数。 解决方案 PDF格式和 Python都已经集成到了Mac OsX系统中(10.3或更高版本),因而这个问题解决起来也相对比较容易: #!/usr/bin python im…...
【MySQL】索引(页目录、B+树)
文章目录 1. 引入索引2. MySQL与磁盘交互的基本单位3. 索引的理解3.1 页目录3.2 B树 4. 聚簇索引、非聚簇索引5. 索引的操作5.1 索引的创建5.1.1 创建主键索引5.1.2 创建唯一索引5.1.3 普通索引的创建5.1.4 全文索引的创建 5.2 索引的查询5.3 删除索引 1. 引入索引 索引&#…...
工业AR眼镜的‘芯’动力:FPC让制造更智能【新立电子】
随着增强现实(AR)技术的快速发展,工业AR智能眼镜也正逐步成为制造业领域的重要工具。它不仅为现场工作人员提供了视觉辅助,还极大地提升了远程协助的效率、优化了仓储管理。FPC在AI眼镜中的应用,为工业AR智能眼镜提供了…...
开启mysql的binlog日志
mysql版本5.7 1.查看是否开启bin_log show global variables like’log_bin’; off的话需要先开启 在mysql的文件夹目录中找到my.ini 加一行log-bin“C:/ProgramData/MySQL/MySQL Server 5.7/logs/log-bin” 并提前创建好目录 2.数据库会把日志放进logs目录中 3.查看log日…...
SpringSecurity基于JWT实现Token的处理
前面介绍了手写单点登录和JWT的应用,本文结合SpringSecurity来介绍下在SpringBoot项目中基于SpringSecurity作为认证授权框架的情况下如何整合JWT来实现Token的处理。 一、认证思路分析 SpringSecurity主要是通过过滤器来实现功能的!我们要找到SpringSecurity实现认证和校验…...
数据结构与算法-图论-最短路-floyd扩展
floyd和它的拓展: 在计算机科学领域,Floyd通常指Floyd Warshall算法,由罗伯特弗洛伊德(Robert W. Floyd)提出,这是一种用于在加权有向图中查找所有顶点对之间最短路径的算法。 算法原理 Floyd Warsha…...
c++中所有构造函数的介绍与使用
C 中,构造函数是一种特殊的成员函数,用于在创建对象时对对象进行初始化。C 中有多种类型的构造函数,下面详细介绍这些构造函数及其特点和使用场景。 1. 默认构造函数 定义:默认构造函数是指在没有提供任何参数的情况下可以被调用…...
力扣1584. 连接所有点的最小费用
力扣1584. 连接所有点的最小费用 题目 题目解析及思路 题目要求返回最小生成树 最小生成树模版题 法一:prim 主要思想是每次找离树最近的顶点,将其加入树种,并更新其他所有点到该点的距离 代码 class Solution { public:int minCostCo…...
FPGA开发,使用Deepseek V3还是R1(8):FPGA的全流程(简略版)
以下都是Deepseek生成的答案 FPGA开发,使用Deepseek V3还是R1(1):应用场景 FPGA开发,使用Deepseek V3还是R1(2):V3和R1的区别 FPGA开发,使用Deepseek V3还是R1&#x…...
处理大数据的架构模式:Lambda 架构 和 Kappa 架构
Lambda 架构 和 Kappa 架构 是两种用于处理大数据的架构模式,尤其在实时数据处理场景中广泛应用。 1. Lambda 架构 核心思想 Lambda 架构将数据处理分为两条独立的流水线: 批处理层(Batch Layer): 处理全量数据&…...
Docker网络模式实战
docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分 docker安装后会自动创建3种网络:bridge、host、none docker原生bridge网路 docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口 docker安装时…...
Linux网络基础(协议 TCP/IP 网络传输基本流程 IP VS Mac Socket编程UDP)
文章目录 一.前言二.协议协议分层分层的好处 OSI七层模型TCP/IP五层(或四层)模型为什么要有TCP/IP协议TCP/IP协议与操作系统的关系(宏观上是如何实现的)什么是协议 三.网络传输基本流程局域网(以太网为例)通信原理MAC地址令牌环网 封装与解包分用 四.IP地址IP VS Mac地址 五.So…...
MFC: 控件根据文本内容大小自动调整
背景: 针对不同语言下,控件显示不全的现象; 例如: 现象1:中文下显示全部信息,英语下只能显示部分文字 现象2:中文下显示不全## 实现思路: 控件绑定按钮计算控件文本长度根据文本长…...
记一次线上Tomcat服务内存溢出的问题处理
背景:JavaWeb项目部署在Tomcat服务器上,服务器用的Windows。 问题表现:系统出现偶发性无法访问(隔几天就会在早上无法访问) Tomcat的日志catalina中,有如下报错信息。 java.lang.OutOfMemoryError: GC ov…...
go设计模式
刘:https://www.bilibili.com/video/BV1kG411g7h4 https://www.bilibili.com/video/BV1jyreYKE8z 1. 单例模式 2. 简单工厂模式 代码逻辑: 原始:业务逻辑层 —> 基础类模块工厂:业务逻辑层 —> 工厂模块 —> 基础类模块…...
通往 AI 之路:Python 机器学习入门-语法基础
第一章 Python 语法基础 Python 是一种简单易学的编程语言,广泛用于数据分析、机器学习和人工智能领域。在学习机器学习之前,我们需要先掌握 Python 的基本语法。本章将介绍 Python 的变量与数据类型、条件语句、循环、函数以及文件操作,帮助…...
【再谈设计模式】备忘录模式~对象状态的守护者
一、引言 在软件开发过程中,我们常常会遇到需要保存对象状态以便在之后恢复的情况。例如,在文本编辑器中,我们可能想要撤销之前的操作;在游戏中,玩家可能希望恢复到之前的某个游戏状态。备忘录模式(Memento…...
算法:判断链表是否有环
/*** brief 判断链表是否有环* * 该函数使用快慢指针法来判断链表中是否存在环。* 快指针每次移动两步,慢指针每次移动一步。* 如果链表中存在环,那么快指针最终会追上慢指针;* 如果链表中不存在环,快指针会先到达链表末尾。* * p…...
Android Logcat 高效调试指南
工具概览 Logcat 是 Android SDK 提供的命令行日志工具,支持灵活过滤、格式定制和实时监控,官方文档详见 Android Developer。 基础用法 命令格式 [adb] logcat [<option>] ... [<filter-spec>] ... 执行方式 直接调用(通过ADB守…...
【数据结构与算法】Java描述:第一节:ArrayList顺序表
这篇文章我们自己实现一个顺序表, 从而更好的认识它。 一、顺序表的本质 顺序表的本质其实就是一个数组,但是在插入,查找与删除上,有些复杂,顺序表通过对方法进行封装,方便了使用。 二、自己的顺序表 2.…...
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
报错报错DescriptionResourcePathLocationType The default superclass,“jakarta.servlet.http.HttpServlet”, according to the project’s Dynamic Web Module facet version (5.0), was not found on the Java Build Path. 解决办法: 根据错误信息࿰…...
在笔记本电脑上用DeepSeek搭建个人知识库
最近DeepSeek爆火,试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下,在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库,实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…...
数学建模:MATLAB极限学习机解决回归问题
一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法,由输入层、隐藏层、输出层组成。 基本原理: 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值,这些参数在整个…...
Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据
文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们,你们好呀!今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册,并…...
Python标准库【os】5 文件和目录操作2
文章目录 8 文件和目录操作8.7 浏览目录下的内容8.8 查看文件或目录的信息8.9 文件状态修改文件标志位文件权限文件所属用户和组其它 8.10 浏览Windows的驱动器、卷、挂载点8.11 系统配置信息 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面…...
相控阵雷达
相控阵雷达 **1. 基本概念与数学模型**(1) **阵列信号模型**(2) **波束形成原理** **2. 经典波束形成算法****(1) 常规波束形成(Conventional Beamforming, CBF)****(2) 自适应波束形成(Adaptive Beamforming)****2.1 最小方差无失…...
Java 大视界 -- 基于 Java 的大数据分布式缓存一致性维护策略解析(109)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
AI: Cursor是否已奠定AI开发环境的龙头地位?
近年来,人工智能(AI)在软件开发领域的应用迅速升温,而Cursor作为一款AI驱动的代码编辑器,凭借其创新功能和市场表现,引发了广泛讨论。许多人认为,Cursor已经奠定了AI开发环境的龙头地位。然而&a…...
PHP:IDEA开发工具配置XDebug,断点调试
文章目录 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…...
回忆Redis的持久化机制
Redis的持久化机制 前言RDB触发方式配置方式手动触发bgsave的执行流程 缺点 AOF重写机制触发方式手动触发自动触发 MP-AOF RDB和AOF混合模式 前言 大家都知道,Redis是内存数据库,也就是说client与Redis交互的过程,无论是读key还是写key都是直…...
partner‘127.0.0.1:3200‘ not reached
在SAP虚拟机中,如果LRPSAP 0显示黄色,通常表示服务启动异常或存在配置问题。以下是一些可能的处理方法: 检查主机文件配置 确保主机文件(hosts)中已正确配置SAP服务的域名解析。例如,添加以下内容到hosts文…...
网络配置的基本信息
目录 一、网络接口信息 1、关闭虚拟化服务 2、配置临时IP 3、配置静态IP 4、常见网络命令 5、安装Wireshark 一、网络接口信息 输入 ip address,会出现下面的内容 网卡名称及其含义: 网卡名称说明lo 表示本地回环地址。 ens32 有线网卡,…...
SpringBoot集成Mybatis(包括Mybatis-Plus)和日志
一、使用Mybatis 1.添加依赖 <!--Mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 选择与Java 8兼容的版本 --&g…...
如何在 IntelliJ IDEA 中集成 DeepSeek
如何在 IntelliJ IDEA 中集成 DeepSeek 在本教程中,我们将带您一步步完成将 DeepSeek 集成到 IntelliJ IDEA 中的过程。通过此集成,您可以在IDE中利用DeepSeek强大的功能,提高开发工作效率。 步骤 1:安装 Proxy AI 插件 首先&a…...
【自学笔记】大数据基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 大数据基础知识点总览1. 大数据概述2. 大数据处理技术3. 数据仓库与数据挖掘4. 大数据分析与可视化5. 大数据平台与架构6. 大数据安全与隐私 总结 大数据基础知识点…...
AWS ALB 实现灰度验证指南:灵活流量分配与渐进式发布
AWS Application Load Balancer (ALB) 作为七层负载均衡器,支持基于权重或内容的路由策略,是实施灰度验证(金丝雀发布)的核心工具。通过将部分流量导向新版本后端,可以安全验证功能稳定性。以下是使用 ALB 实现灰度发布的详细方案。 © ivwdcwso (ID: u012172506) 一…...
专线物流公共服务平台:全面提升专线物流效率
专线物流公共服务平台:全面提升专线物流效率 在物流行业高速发展的今天,专线物流作为物流供应链的重要环节,面临着效率低下、成本高企、信息孤岛等痛点。临沂呆马区块链网络科技有限公司(简称“呆马科技”)凭借其在大…...