OpenStack概述
一、初识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过滤器类型说明
- DifferentHostFilter:选择与一个集合的虚拟机不同位置的主机;
- SameHostFilter:选择与一组虚拟机相同位置的主机;
- GroupAntiAffinityFilter:选择与一个集合的虚拟机不同位置的主机,集合中的每个元素都是一个虚拟机的组;
- AggregateInstanceExtraSpecsFilter:返回能够建立某一类型虚拟机的主机列表
- AvailabilityZoneFilter(可用区过滤):通过可用的区域来过滤主机host
- ComputeCapabilitiesFilter(计算节点特性过滤):根据host的capabilities判断是否允许创建虚拟机(例如:x86_64、i686)
- ComputeFilter(nova-compute服务正常过滤):根据主机capabilities的状态和服务的可用性过滤
- CoreFilter(CPU core数过滤):基于主机的CPU内核数进行过滤(超量使用设置:cpu_allocation_ratio = 16.0 OpenStack认为有计算节点的16倍核数)
- DiskFilter(磁盘容量过滤):基于磁盘使用率的主机host过滤(超量使用设置:disk_allocation_ratio = 1.0 磁盘不建议跳大)
- IoOpsFilter:过滤掉有过多的I/O操作的主机host
- RamFilter(内存过滤):只返回有足够可使用的RAM主机host(超量使用设置:ram_allocation_ratio = 3,OpenStack认为有计算节点的三倍内存)
- 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?
- VLAN的数量限制:4096个VLAN远不能满足大规模元计算数据中心的需求
- 物理网络基础设施的限制:基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署。
- TOR交换机MAC表耗尽:虚拟机以及东西向流量导致更多的MAC表项
- 多租户场景: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 namespaceip 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。
相关文章:

OpenStack概述
一、初识OpenStack OpenStack Docs: 概况 一)OpenStack架构简述 1、理解OpenStack OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集&…...

机器学习练手(三):基于决策树的iris 多分类和波士顿房价预测
总结:本文为和鲸python 可视化探索训练营资料整理而来,加入了自己的理解(by GPT4o) 原活动链接 原作者:vgbhfive,多年风控引擎研发及金融模型开发经验,现任某公司风控研发工程师,对…...

PS 2024 百种常用插件下载安装教程【免费使用,先到先得】
文章目录 软件介绍软件下载安装步骤 专栏推荐: 超多精品软件(持续更新中…) 软件推荐: PS 2024 PR 2024 软件介绍 PS常用插件 此软件整合了市面近百款ps处理插件,可实现:一键制作背景,一键抠图…...

逻辑推理之lora微调
逻辑推理微调 比赛介绍准备内容lora微调lora微调介绍lora优势代码内容 start_vllm相关介绍调用 运行主函数提交结果总结相应连接 比赛介绍 本比赛旨在测试参与者的逻辑推理和问题解决能力。参与者将面对一系列复杂的逻辑谜题,涵盖多个领域的推理挑战。 比赛的连接:…...
前端-防抖代码
//防抖debounce(fn, time 1000) {let timer null;return function (...args) {if (timer) clearTimeout(timer);timer setTimeout(() > {fn.apply(this, args);}, time);};},// 输入变化处理函数async inputChange(value) {if (!this.debouncedInputChange) {this.deboun…...
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 让 LLM 自动选择不同的 Prompt 在上一篇文章中,我们学会了如何让 langchain 来自动选择不同的 LLM Chain,以便回…...

web浏览器播放rtsp视频流,海康监控API
概述 这里记录一下如何让前端播放rtsp协议的视频流 项目中调用海康API,生成的视频流(hls、ws、rtmp等)通过PotPlayer播放器都无法播放,说明视频流有问题,唯独rtsp视频流可以播放。 但是浏览器本身是无法播放rtsp视频的,即使…...

操作系统原理:程序、进程、线程的概念
文章目录 程序、进程、线程的概念程序(Program)进程(Process)线程(Thread)关系总结 在日常对操作系统的使用中,大家肯定对程序、进程和线程多少有所耳闻。作为操作系统的重要一部分,…...

Golang是如何实现动态数组功能的?Slice切片原理解析
Hi 亲爱的朋友们,我是 k 哥。今天,咱们聊一聊Golang 切片。 当我们需要使用数组,但是又不能提前定义数组大小时,可以使用golang的动态数组结构,slice切片。在 Go 语言的众多特性里,slice 是我们经常用到的数…...

SQL注入 报错注入+附加拓展知识,一篇文章带你轻松入门
第5关--------------------------------------------> 前端直接不会显示账号密码的打印;但是在接收前端的数据的那部分后端那里,会看前端传递过来的值是否正确,如果不正确,后端接收值那里就会当MySQL语句执行错误,…...
springboot项目里的包spring-boot-dependencies依赖介绍
springboot项目里的包’spring-boot-dependencies‘依赖 我们一般是在项目的pom dependencyManagement标签里引入spring-boot-dependencies,或者根spring-boot-starter-parent里也是继承了它,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本…...

C# 下的限定符运算详解(全部,任意,包含)与示例
文章目录 1.限定符概述2. 全部限定符运算(All)3. 任意限定符运算(Any)4. 包含限定符运算(Contains)总结 当我们在C#编程中需要进行条件判断或集合操作时,限定符(qualifiersÿ…...
消息队列RabbitMQ部分知识
1.简述RabbitMQ的架构设计 RabbitMQ 是一个开源的消息代理,采用了高级消息队列协议(AMQP),其架构设计主要包括以下几个关键组件和概念: 1.消息生产者( Producer): 负责发送消息到…...

看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
看门狗应用编程 看门狗应用编程介绍 看门狗定时器的基本概念 看门狗是一个可以在一定时间内被复位/重置的计数器 如果在规定时间内没有复位,看门狗计时器溢出会对CPU产生复位信号使系统重启 有些看门狗可以只产生中断信号而不会使系统复位 I.MX6UL/I.MX6ULL So…...

Bug 解决 | 本地项目上线后出现错误
目录 一、前言 二、原因分析 1、本地代码误发线上 2、环境差异 3、配置差异 4、资源路径差异 5、API 接口差异 6、用量差异 一、前言 大家好,我是小洪爱分享。在开发上线项目的过程中,我们经常会遇到一种让人头疼的情况。那就是开发好的项目功能…...

为什么我工作 10 年后转行当程序员?逆袭翻盘!
今天文章的主人公暂且称他为 A 君。不过 A 君有点特别,非科班,工作 10 年后才转行 iOS 程序员。今年 36 岁,目前在某行业头部企业任职前端负责人,管理 40 人的前端团队。 废话不多说,我们开始 A 君(为了描…...

见证中国数据库的崛起:从追赶到引领的壮丽征程《四》
见证中国数据库的崛起:从追赶到引领的壮丽征程《四》 四、未来展望:中国数据库的机遇与挑战新技术带来的机遇全球化竞争的挑战数据安全与隐私保护的挑战人才培养的持续挑战 【纪录片】中国数据库前世今生 在数字化潮流席卷全球的今天,数据库作…...
OpenCV||超细节的基本操作
一、图像读取 retval cv2.imread(filename[, flags]) filename:需要读取的图片路径名,支持多种图片格式,如JPEG、PNG、TIFF等。flags:一个可选参数,指定加载图像的颜色类型。常用的值包括: cv2.IMGEAD_A…...
算法训练(leetcode)第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列
刷题记录 *1143. 最长公共子序列1035. 不相交的线53. 最大子数组和392. 判断子序列 *1143. 最长公共子序列 leetcode题目地址 本题和718. 最长重复子数组相似,只是本题不要求连续,需要记录前面最长的子序列,在此基础上累计长度。 dp[i][j]…...

STM32——外部中断(EXTI)
目录 前言 一、外部中断基础知识 二、使用步骤 三、固件库实现 四、STM32CubeMX实现 总结 前言 外部中断(External Interrupt,简称EXTI)是微控制器用于响应外部事件的一种方式,当外部事件发生时(如按键按下、传感器信号…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...