OpenStack概述

news2025/1/24 8:40:01

一、初识OpenStack

  OpenStack Docs: 概况

  一)OpenStack架构简述

  1、理解OpenStack

  OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
  OpenStack开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操作平台,或工具包,用于编排云。

    1、OpenStack是什么?
  • OpenStack是一套资源管理平台;
  • 主要基于KVM之上;
  • 开源、免费、Python编写
  • 2010年7月份NASA和Rackspace公司将其开源
    2、各种私有云的使用占比

  

  2、OpenStack的架构

  

  3、OpenStack组成

  整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。(这四个节点也可以安装在一台机器上,单机部署)其中:

  • 控制节点负责对其余节点的控制,包含虚拟机建立,迁移,网络分配,存储分配等等
  • 计算节点负责虚拟机运行
  • 网络节点负责对外网络与内网络之间的通信
  • 存储节点负责对虚拟机的额外存储管理等等
  4、Openstack的各个组件作用及关系
    1、OpenStack的组件及作用
  • Keystone - 认证服务(Identity Service):
    • 为OpenStack其他服务提供身份验证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。自Essex版本集成到项目中
  • Nova - 计算服务(Compute):
    • 一套控制器,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据用户需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。自Austin版本集成到项目中。
  • Neutron-网络服务(Network):
    • 提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络连接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch。自Folsom版本集成到项目中
  • Glance - 镜像服务(Image Service):
    • 一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKI、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。自Bexar版本集成到项目中
  • Cinder-块存储服务 (Block Storage):
    • 为运行实例提供稳定的数据块存储服务,它的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷,在实例上挂载和卸载卷。自Folsom版本集成到项目中
  • Swift - 对象存储服务(Object Storage):
    • 一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可为Glance提供镜像存储,为Cinder提供卷备份服务。自Austin版本集成到项目中
  • Horizon - UI服务(Dashboard):
    • OpenStack中各种服务的Web管理门户,用于简化用户对服务的操作,例如:启动实例、分配IP地址、配置访问控制等。自Essex版本集成到项目中
  • Ceilometer - 监控服务(Metering):
    • 像一个漏斗一样,能把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其它服务提供数据支撑。自Havana版本集成到项目中
  • Heat - 集群服务(Orchestration):
    • 提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。自Havana版本集成到项目中
  • Trove - 数据库服务(Database Service):
    • 为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。自Icehouse版本集成到项目中
    2、OpenStack各个组件的关系图

  

  二)OpenStack四个组成部详解

  1、控制节点架构

  控制节点一般来说只需要一个网络端口用于通信/管理各个节点

    1、控制架构服务按职能分为
  • 管理支持服务
  • 基础管理服务
  • 扩展管理服务
    2、管理支持服务包含MySQL与Qpid(rabbitMQ)两个服务
  • MySQL:数据库作为基础/扩展服务产生的数据存放的地方
  • Qpid(rabbitMQ):消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务
    3、基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务
  • Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库
  • Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板
  • Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信
  • Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板
  • Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard
     4、扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务
  • Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板
  • Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板
  • Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板
  • Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。
  • Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作
   2、网络节点架构
    1、网络节点仅包含Neutron服务

  Neutron:负责管理私有网段与公有网段的通信,以及管理虚拟机网络之间的通信/拓扑,管理虚拟机之上的防火等等

     2、网络节点包含三个网路端口
  • eth0:用于与控制节点进行通信
  • eth1:用于与除了控制节点之外的计算/存储节点之间的通信
  • eth2:用于外部的虚拟机与相应网络之间的通信
   3、计算节点架构

  计算节点包含Nova,Neutron,Telemeter三个服务

    1、基础服务
  • Nova:提供虚拟机的创建,运行,迁移,快照等各种围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务
  • Neutron:提供计算节点与网络节点之间的通信服务
    2、扩展服务
  • Telmeter:提供计算节点的监控代理,将虚拟机的情况反馈给控制节点,是Centimeter的代理服务
    3、计算节点最少两个网络端口
  • eth0:与控制节点进行通信,受控制节点统一调配
  • eth1:与网络节点,存储节点进行通信
  4、存储节点
    1、存储节点包含Cinder,Swift(可以使用其他代替如:ceph等)等服务
  • Cinder:块存储服务,提供相应的块存储,简单来说,就是虚拟出一块磁盘,可以挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来说,这个操作就像是新加了一块硬盘,可以完成对磁盘的任何操作,包括挂载,卸载,格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等等
  • Swift:对象存储服务,提供相应的对象存储,简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
    2、存储节点包含最少两个网络接口
  • eth0:与控制节点进行通信,接受控制节点任务,受控制节点统一调配
  • eth1:与计算/网络节点进行通信,完成控制节点下发的各类任务

  三)OpenStack各组件逻辑关系、通信部署关系及工作流程

  https://www.cnblogs.com/panwenbin-logs/p/8445640.html

二、详解OpenStack各个组件

  一)OpenStack认证服务(keystone)

  1、keystone的功能和认证流程

  Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。

  下图显示了身份认证服务流程

  

  

 

  2、keystone两种授权方式
  • 用户名/密码
  • 基于令牌(Token)
   3、keystone除上述之外,提供以下三种服务
  • 令牌服务:含有授权用户的授权信息
  • 目录服务:含有用户合法操作的可用服务列表
  • 策略服务:利用Keystone具体指定用户或群组某些访问权限
  4、keystone基本概念
  • User:使用OpenStack的实体——用户、系统或者服务
  • Credentials:身份证明信息——用户名密码、token、API Key等等
  • Authentication:keystone验证User身份的过程
  • Tocken:数字和字母组成的字符串,默认有效期24小时
  • Project:对OpenStack资源进行分组和隔离
  • Service:任何通过Keystone进行连接或管理的组件都被称为服务,每个组件差不多是一个service,比如Nova、Cinder、Neutron
  • Endpoint:网络上可访问的一个地址(url),Service通过Endpoint暴露自己的API,有public(公共)、private(内部)和admin(管理)这三种权限
  • Role:角色(为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。)

  可以参照下表理解

   

  二)OpenStack镜像服务(glance)

  1、glance概述
    1、定义

  OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统。

    2、存储:可以将镜像存储到以下任意一种存储中:
  • 本地文件系统:NFS,swift和ceph等(默认)
  • S3直接存储
  • S3对象存储(作为S3访问的中间渠道)
  • OpenStack对象存储等等。
  2、glance功能和特点

  提供镜像相关服务

  3、glance构件
  • Glance-API:主要负责接收响应镜像管理命令的Restful请求,分析消息请求信息并分发其所带的命令(如新增,删除,更新等)。默认绑定端口是9292。
  • Glance-Registry:主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据,更新元数据等)。默认绑定的端口是9191。
   4、glance架构

  

  5、glance工作流程

  

  6、上传镜像时,状态对应表

  

  7、glance的配置文件
  • glance-api.conf:glance api服务配置文件
  • glance-registry.conf:glance registry服务配置文件,用于存储镜像有关的元数据
  • glance-scrubber.conf:用于请理已删除的镜像的服务
  • policy.json:镜像服务访问控制。可以定义角色和策略,是OpenStack Glance中的安全特性
  8、扩展:镜像的各种格式

  

  三)OpenStack计算服务(Nova)

  Nova技术图解:Nova技术图解_nova调度器类型有哪些?描述过滤器调度器的调度过程,并列出常用的过滤器-CSDN博客

  1、Nova概述

  Nova是OpenStack计算的弹性控制器。

  OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。

  虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。

  2、Nova功能及特点
  • 实例生命周期管理
  • 计算资源管理
  • 网络与授权管理
  • 基于REST的API
  • 异步连续通信
  • 支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
  3、Nova弹性云主要组成部分
  • API Server(nova-api)
  • 消息队列(rabbit-mq server)
  • 运算工作站(nova-compute)
  • 网络控制器(nova-network)
  • 卷管理(nova-volume)
  • 调度器(nova-scheduler)
    1、API服务器(nova-api)

  API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。

  通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。

    2、消息队列(Rabbit MQ Server)

  OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。

  例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。

    3、调度器(nova-scheduler) 

  调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。

  有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。

  Nova-scheduler组件说明

  

  目前nova调度器使用了几种基本的调度算法:

  • 随机化:主机随机选择可用节点;
  • 可用化:与随机相似,只是随机选择的范围被指定;
  • 简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可以从别处获得,如负载均衡服务器。
    4、运算工作站(nova-compute)

  运算工作站的主要任务是管理实例的整个生命周期。

  他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。

    5、网络控制器(nova-network)

  网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。

    6、卷工作站(nova-volume) 

  卷工作站管理基于LVM的 实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。

  卷管理为何如此重要?

  因为它提供了一种保持实例持续存储的手段,比如当结束一个 实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据 仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。

  因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。

  4、Nova组件图及其架构
    1、Nova组件图

  

    2、Nova架构

  

  

  5、Nova创建虚拟机的过程

  

   6、 Nova过滤器类型说明
  1. DifferentHostFilter:选择与一个集合的虚拟机不同位置的主机;
  2. SameHostFilter:选择与一组虚拟机相同位置的主机;
  3. GroupAntiAffinityFilter:选择与一个集合的虚拟机不同位置的主机,集合中的每个元素都是一个虚拟机的组;
  4. AggregateInstanceExtraSpecsFilter:返回能够建立某一类型虚拟机的主机列表
  5. AvailabilityZoneFilter(可用区过滤):通过可用的区域来过滤主机host
  6. ComputeCapabilitiesFilter(计算节点特性过滤):根据host的capabilities判断是否允许创建虚拟机(例如:x86_64、i686)
  7. ComputeFilter(nova-compute服务正常过滤):根据主机capabilities的状态和服务的可用性过滤
  8. CoreFilter(CPU core数过滤):基于主机的CPU内核数进行过滤(超量使用设置:cpu_allocation_ratio = 16.0 OpenStack认为有计算节点的16倍核数)
  9. DiskFilter(磁盘容量过滤):基于磁盘使用率的主机host过滤(超量使用设置:disk_allocation_ratio = 1.0 磁盘不建议跳大)
  10. IoOpsFilter:过滤掉有过多的I/O操作的主机host
  11. RamFilter(内存过滤):只返回有足够可使用的RAM主机host(超量使用设置:ram_allocation_ratio = 3,OpenStack认为有计算节点的三倍内存)
  12. RetryFilter(重试过滤):跳过已经尝试过的节点
  7、OpenStack设置cpu和内存虚拟化比例 

  默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5。下面配置的就是这个比例,你可以自己算一下,cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的。内存也是类似。

  配置文件nova.conf中修改了如下参数
 

#cpu_allocation_ratio=16.0   
#ram_allocation_ratio=1.5

  当然了,这个值其实是给nova-scheduler看的,人家来决定,你有没有资源创建虚拟机,以及创建在哪个节点上。

  四)OpenStack网络服务(Neutron)

   1、Neutron概述

  Neutron提供网络服务,可插拔的架构设计,支持众多主流网络供应商以及技术,SDN(software defined networking)

   2、提供哪些网络服务
  • 二层交换 Switching、 Linux bridge / Open vSwitch
  • 三层路由 Routing
  • 负载均衡
  • 防火墙
  • VPN
   3、Neutron的基本概念
  • flat:扁平网络(使用多)
  • vlan:一个二层的广播域,同一vlan中的instance可以通信,不同vlan只能提供router通信。vlan可以跨节点,是应用最广泛的网络类型。
  • vXlan:提供唯一的segmentation ID(也叫VNI)与其他vxlan网络区分。vxlan中数据包会通过VNI封装成UPD包进行传输。因为二层的包通过封装在三层传输,能够克服vlan和物理网络设施的限制。
  • gre:gre是与vxlan类似的一种overlay网络。主要区别在于使用IP包而非UDP进行封装。
  • network:一个隔离的二层广播域。neutron支出多种类型的network,包括local,flat,vlan,vxlan和GRE
  • subnet:子网,subnet是一个IPv4或者IPv6地址段。instance的IP从subnet中分配。每个subnet需要定义IP地址的范围和掩码。
  • port:可以看做虚拟交换机上一个端口。port上定义了MAC地址和IP地址,当instance的虚拟网卡VIF(virtual interface)绑定到port时,port会将MAC和IP分配给VIF。
    1、VLAN
  • 端口的分隔。即便在同一个交换机,处于不同VLAN的端口也是不能通信的,这样的一个物理交换机可以当做多个逻辑交换机使用。
  • 网络的安全。不同VLAN不能直接通信,杜绝了广播信息的不安全性。
  • 灵活的管理。更改用户所属的网络不必换端口和连线,只更改软件配置就可以了。
    2、VxLAN

  为何出现VxLAN?

  1. VLAN的数量限制:4096个VLAN远不能满足大规模元计算数据中心的需求
  2. 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署。
  3. TOR交换机MAC表耗尽:虚拟机以及东西向流量导致更多的MAC表项
  4. 多租户场景:IP地址重叠
  4、Neutron架构

  

  5、net namespace
     1、namespace概述

  Linux Namespace机制是一种资源隔离方案。

  特点:轻量、高效、开销小

  docker的namespace

  

    2、namespace的分类

  

    3、Net Namespace

  network namespace是实现网络虚拟化的重要功能,他能创建多个隔离的网络空间,他们有独自的网络栈信息、不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。

  默认情况下,nerwork namespace是不能和主机网络或者其他network namespace通信的。

  命令ip netns

ip netns add net1   创建名为net1的network namespace

ip netns list       列出当前存在的network namespace
ip netns exec net1 ip addr  查看这个namespace里的网卡信息
ip netns exec net1 /bin/bash --rcfile <(echo "PS1=\" namespace net1>\"")  完全进入namespace命令模式
    4、Network namespace之间通信——veth pair

  建立veth pair:双向的pipe(管道)

ip link add type veth #添加命令
ip link set veth0 netns net0
ip link set veth1 netns net1
ip netns exec net0 ip link set veth0 up
ip netns exec net0 ip addr 10.1.1.1/24 dev veth0

  

    5、Network namespace之间通信——bridge

  

   6、Neutron的工作流程

  

  五)OpenStack存储模块(cinder)

  1、cinder概述
  • 提供数据块存储服务
  • 可插拔驱动架构设计
  • 后端支持LVM、NFS、Ceph和其他商业存储产品方案(EMC、IBM等)
  2、cinder架构

  

  六)OpenStack管理的web接口(Horizon)

   1、Horizon概述

  Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。

   2、Horizon功能特点
  • 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
  • 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
  • 偏好设定:对虚拟硬件模板可以进行不同偏好设定
  • 镜像管理:编辑或删除镜像
  • 查看服务目录
  • 管理用户、配额及项目用途
  • 用户管理:创建用户等
  • 卷管理:创建卷和快照
  • 对象存储处理:创建、删除容器和对象
  • 为项目下载环境变量

  七)OpenStack存储设施(swift)

   1、Swift概述

  Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。

  Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。

  2、Swift功能特点
  • 海量对象存储
  • 大文件(对象)存储
  • 数据冗余管理
  • 归档能力-----处理大数据集
  • 为虚拟机和云应用提供数据容器
  • 处理流媒体
  • 对象安全存储
  • 备份与归档
  • 良好的可伸缩性
  3、Swift组件
  • Swift账户
  • Swift容器
  • Swift对象
  • Swift代理
  • Swift RING
    1、Swift代理服务器

  用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
  此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。

    2、Swift对象服务器

  对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。

  注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是并没有有效测试证明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。

    3、Swift容器服务器

  容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。

    4、Swift账户服务器

  账户服务器与容器服务器类似,将列出容器中的对象。

    5、Ring(索引环)

  Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。

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

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

相关文章

Linux 内核源码分析---通用文件模型及 VFS 结构

通用文件模型 通常一个完整的 Linux 系统由数千到数百万个文件组成&#xff0c;文件中存储了程序、数据和各种信息。层次化的目录结构用于对文件进行编排和分组。 ReiserFS&#xff08;新型的文件系统&#xff09;–>Reiser4 它通过一种与众不同的方式—完全平衡树结构来容…

高并发下的分布式缓存 | 设计和实现LRU缓存

LRU缓存介绍 什么是LRU缓存&#xff1f; LRU缓存是一种缓存策略&#xff0c;当缓存满了&#xff0c;需要腾出空间存放新数据时&#xff0c;它会删除最近最少使用的数据。换句话说&#xff0c;它会优先淘汰那些最久没有被访问的元素&#xff0c;以确保缓存中的数据是最近使用的…

学习安卓开发遇到的问题

问题1&#xff1a;学习禁用与恢复按钮中&#xff1a; java代码报错&#xff1a;报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下&#xff1a;&#xff08;实现功能在代码后面&#xff09; package com.example.apptest;import static java.…

04 表的操作

目录 创建查看修改删除 1. 创建 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储殷勤; 说明&#xff1a; field&#xff0c;表示列名 datatype&#xff0c;表示列的类型…

专题十_哈希表

目录 题型总结 1. 两数之和 解析 题解 面试题 01.02. 判定是否互为字符重排 解析 题解 217. 存在重复元素 解析 题解 219. 存在重复元素 II 解析 题解 49. 字母异位词分组 解析 题解 题型总结 1. 两数之和 1. 两数之和 解析 题解 class Solution { public:ve…

ECMAScript 12 (ES12, ES2021) 新特性

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Rewrite功能配置

Rewrite Rewrite是Nginx服务器提供的一个重要基本功能。主要的作用是用来实现URL的重写。 Nginx服务器的Rewrite功能的实现依赖于PCRE的支持&#xff0c;因此在编译安装Nginx服务器之前&#xff0c;需要安装PCRE库。 Nginx使用的是ngx_http_rewrite_module模块来解析和处理Re…

用VBA在Word中随机打乱单词表,进行分列

一、效果展示&#xff08;以下是三次随机打乱的结果&#xff09; 二、代码 Sub 随机分单词到后面的单元格()Dim C1 As CellDim str, str1, aDim shuffledArray() As VariantSet C1 Selection.Range.Tables(1).Cell(1, 1)str C1.Range.textstr mid(str, 3, Len(str) - 4)str…

微信小程序版NetAssist局域网工具使用

微信小程序搜《TCPUDP局域网小助手》即可使用&#xff0c;电脑端&#xff0c;安卓端&#xff0c;苹果端都可以使用

【前端面试】七、算法-递归、拷贝等

目录 1.常考算法 2.遍历方法 3.链式调用 4.递归 5.拷贝和比较 1.常考算法 排序算法&#xff1a;快速排序、归并排序、堆排序等。 查找算法&#xff1a;二分查找、哈希表查找等。 动态规划&#xff1a;解决最优化问题&#xff0c;如斐波那契数列、最长公共子序列等。 图…

8.3 day bug

bug1 文件名字写错了&#xff0c;找了半天bug原因 freecodecamp的致敬页的测试验证不通过bug 已经写了display: block;和max-width: 100% 以及通过margin: 0 auto;居中&#xff0c;可是却通不过验证 问了通义千问 通义帮我修改后的html代码为 <!DOCTYPE html> 2<h…

打扫朋友圈

我把上周写的一篇文章&#xff0c;发到了老家的一个群里&#xff0c;结果有个多年没联系的亲戚&#xff0c;立马私信给我说&#xff0c;让我不要在群里发&#xff0c;说我写的东西不行&#xff0c;他自己看了两行就看不下去了&#xff0c;然后给我讲了一堆大道理。 哎呦我去&a…

从零开始的CPP(34)——字符串乘法

给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3" …

RAG 的优化进阶与引入 Reranker

引言 在简单的 RAG 系统中&#xff0c;通过结合检索和生成技术&#xff0c;已经可以显著提升了对复杂查询的响应质量。Reranker 作为 RAG 系统中一个关键的进阶组件&#xff0c;通过对原 RAG 中检索到的内容进行重新组织&#xff0c;可以进一步提高系统的准确性。 本文将深入…

vmware虚拟机linux服务器的IP需要重启才能生效问题

vmware虚拟机linux服务器的IP需要重启才能生效问题 问题说明处理办法关闭&禁用网络管理 再次重启linux服务器&#xff0c;IP显示正常 问题说明 用vmware虚拟的linux服务器&#xff0c;配置了静态IP&#xff0c;但是每次重启liunx&#xff0c;IP都不是设置的静态IP&#xf…

国外教育人工智能发展与应用

在全球化与信息化交织的时代背景下&#xff0c;人工智能正迅速推动教育发生颠覆性变革。从大洋彼岸到东方之滨&#xff0c;世界主要国家和组织正采取相关行动和策略&#xff0c;深度挖掘和释放教育AI的潜能。本文从政策支持、教育应用两个方面&#xff0c;聚焦“教育人工智能”…

centos 安装nacos

nacos官网下载安装包&#xff08;安装nacos之前&#xff0c;先下载安装好jdk&#xff09; 概览 | Nacos 官网 2.下载好nacos压缩包之后&#xff0c;上传到linux目录中&#xff08;在/opt/目录下建好一个文件夹&#xff09; 将nacos解压 uzip nacos-server-1.4.7.zip 进入naco…

【STM32系统】基于STM32设计的按键PWM控制舵机窗帘柜子门禁家居等控制系统——文末资料下载

演示 摘要 随着智能家居技术的不断发展&#xff0c;舵机在自动化家居设备中的应用变得越来越广泛。本文设计并实现了一种基于STM32单片机的按键PWM控制舵机系统。通过按键可以精确控制舵机角度&#xff0c;实现对窗帘、柜子、门禁等家居设备的智能化控制。系统采用STM32F10x系…

C# Unity 面向对象补全计划 七大原则 之 单一职责

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 1.单一职责原则&#xff08;SRP&#xff09; 单一职责原则&#xff08;Single Responsibility P…

iPhone怎么大批量删除照片:释放你的存储空间

随着iPhone相机质量的提升&#xff0c;我们越来越倾向于使用手机捕捉生活中的每一个瞬间。不久后&#xff0c;我们就会发现手机内存充满了成千上万的照片&#xff0c;这不仅占用了大量的存储空间&#xff0c;也让照片的管理变得越来越困难。对于需要释放空间的用户来说&#xf…