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

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块(下)

    • 五、存储管理
      • 5.1 存储管理概述
    • 5.2 架构设计
      • 5.2.1 Cinder块存储架构
      • 5.2.2 Swift对象存储架构
    • 六、网络管理
      • 6.1 网络管理概述
      • 6.2 架构解析
        • 6.2.1 Neutron网络服务架构
        • 6.2.2 网络拓扑架构
      • 6.3 原理与流程
        • 6.3.1 网络创建原理
        • 6.3.2 网络流量控制流程
    • 七、编排管理
      • 7.1 定义与功能
      • 7.2 架构设计
      • 7.3 工作原理与流程
    • 八、故障管理
    • 8.1 定义与重要性
    • 8.2 架构与技术
      • 8.2.1 故障检测架构
      • 8.2.2 故障诊断与恢复技术

在这里插入图片描述

(注:OpenStack管理模块(上)在这里)

在这里插入图片描述

五、存储管理

5.1 存储管理概述

在 OpenStack 生态中,存储管理极为关键,负责统一管理调度云平台存储资源,涵盖分配、配置、存储、检索及监控维护等操作,能满足企业级和大数据等不同场景存储需求。

块存储由 Cinder 实现,为虚拟机提供类似物理磁盘的块级设备,可挂载、格式化、分区及创建文件系统,适用于数据库等对读写性能要求高且需频繁随机读写的结构化数据场景,能保障数据库稳定高性能运行。

对象存储由 Swift 负责,以对象形式存储数据及元数据,擅于处理海量非结构化数据,如图片、视频等,其分布式架构和高效检索机制可满足互联网企业多媒体数据存储等需求,在需高扩展性和可靠性的非结构化数据存储场景应用广泛。

5.2 架构设计

5.2.1 Cinder块存储架构

Cinder块存储架构精巧且复杂,由多个关键组件协同工作,共同实现对块存储资源的高效管理 。cinder-api作为对外的接口,负责接收来自用户或其他OpenStack组件(如Nova在创建虚拟机时对存储卷的请求)的API请求 。它对请求进行解析和验证,确保请求的合法性和完整性。若请求合法,cinder-api会将请求转发给后续的处理组件,如cinder-scheduler或cinder-volume 。

当用户通过OpenStack的客户端(如Horizon界面或命令行工具)向cinder-api发送创建存储卷的请求时,请求首先会被cinder-api接收 。cinder-api会对请求进行严格的解析和验证,检查请求中是否包含了所有必要的参数,如存储卷的大小、名称、所属项目等信息,以及参数的格式是否正确 。若请求合法,cinder-api会将请求信息转发给cinder-scheduler。

cinder-scheduler在接收到请求后,会依据一系列精心设计的调度算法,从众多存储节点中挑选出最适合创建该存储卷的节点 。这些调度算法综合考虑了多个关键因素,如存储节点的剩余容量,确保所选节点有足够的空间来创建指定大小的存储卷;性能指标,优先选择读写性能良好的节点,以保障存储卷的高效运行;与计算节点的网络距离,尽量选择网络延迟较低的节点,减少数据传输的时间开销 。在某企业的云平台中,若有一个对存储性能要求较高的数据库应用需要创建存储卷,cinder-scheduler会优先筛选出配备高性能存储设备且与数据库服务器所在计算节点网络延迟较低的存储节点 。

在这里插入图片描述

一旦确定了目标存储节点,cinder-scheduler会将调度结果发送给该节点上的cinder-volume服务 。cinder-volume负责与底层的存储设备进行交互,以完成存储卷的实际创建操作 。在这一过程中,逻辑卷管理(LVM)技术发挥着重要作用。以使用LVM存储后端为例,cinder-volume会通过调用LVM的命令行工具或API,在指定的卷组(Volume Group)中创建一个新的逻辑卷(Logical Volume) 。它会根据用户请求的存储卷大小,从卷组中分配相应的物理扩展块(Physical Extent),并将这些物理扩展块组合成逻辑卷,从而实现存储卷的创建 。

在创建过程中,cinder-volume还会对存储卷进行初始化配置,如设置存储卷的访问权限、文件系统类型(如果需要)等 。创建完成后,cinder-volume会将存储卷的相关信息,如存储卷的ID、位置、状态等,反馈给cinder-api,cinder-api再将这些信息返回给用户,告知用户存储卷已成功创建 。

5.2.2 Swift对象存储架构

Swift 对象存储采用分布式架构,多个节点协同工作,不存在单点故障风险。在存储节点布局上,数据分散于多个节点,每个节点都有对象服务器负责实际存储数据并分配唯一标识符、账户服务器管理账户元数据及容器列表、容器服务器管理容器内对象元数据及存储位置。

在这里插入图片描述

其数据冗余机制借助一致性哈希算法和数据复制策略保证可靠性与容错性。一致性哈希算法能将对象均匀分布到存储节点,减少节点变动时的数据重分布。数据复制策略通常会为每个对象在多个节点创建副本,如三个副本。

数据读写流程如下:写数据时,用户请求经 Swift API 发至 Proxy 服务器,先验证身份权限,通过后依一致性哈希算法算出目标存储节点,数据被分割成对象存于对象服务器本地磁盘并创建副本;读数据时,同样先经 Proxy 服务器验证,再依算法确定可能的存储节点并发送读请求,对象服务器读取数据返回给 Proxy 服务器,Proxy 从可用副本获取数据并返回用户。整个过程中,Swift 还通过监控机制监测存储节点状态,节点故障时能从其他副本获取数据并修复或替换故障节点,确保数据完整性和可用性。

六、网络管理

6.1 网络管理概述

在 OpenStack 中,网络管理由 Neutron 负责,其关键在于管理和调配虚拟网络资源,包括网络的创建、配置等操作,能为多种设备提供稳定网络连接。Neutron 有丰富 API,用户可借此创建不同类型网络、定义子网与配置路由器。

Neutron 网络模型含网络、子网、端口、路由器等关键概念。网络类似局域网,可含多个子网;子网定义 IP 范围与配置;端口连接虚拟机和网络;路由器实现网络间流量转发。此外,它还支持高级网络服务与多种后端驱动,具有灵活性和扩展性。

6.2 架构解析

6.2.1 Neutron网络服务架构

Neutron采用分布式架构,由多个组件协同工作,共同为云平台提供强大的网络服务 。Neutron Server作为核心组件,运行在控制节点上,是整个网络服务的入口,负责接收来自用户或其他OpenStack组件的API请求 。它宛如一个智能的指挥中心,对请求进行解析和处理,并根据请求的类型和内容,合理地调用相应的插件(Plugin)进行后续处理 。

在这里插入图片描述
(图源:https://blog.csdn.net/qq_42761527/article/details/104641141)

在 Neutron 架构里,插件极为关键,能扩展网络服务功能。核心插件提供基本二层网络功能,像网络创建、子网划分等,其中 ML2 插件灵活性强且适用广,支持 Open vSwitch、Linux Bridge 等驱动,便于用户依需求构建虚拟网络。

  • 服务插件(Service Plugin): 专注提供 DHCP、路由、负载均衡、防火墙等高级功能。如 DHCP 插件可为虚拟机动态分配 IP 地址,保障其接入网络时自动获取合法配置;路由插件通过配置路由表,实现不同网络间数据包准确转发。

  • 代理(Agent): 分布于各节点,负责执行网络服务,把插件配置指令转化为具体操作。计算节点上的 Open vSwitch Agent 管理 Open vSwitch 虚拟交换机以连接虚拟机和网络;网络节点上的 L3 Agent 实现三层路由功能,与路由器交互完成子网间流量转发。

  • 数据库(Database): 存储 Neutron 网络状态信息,涵盖网络、子网、端口、路由器等资源的详细配置与状态,Neutron Server 处理请求时频繁与之交互读写更新。创建新网络时,相关信息会存入数据库,网络状态改变时也会及时更新。

  • 消息队列(Queue): 是 Neutron 架构中组件通信的关键桥梁,RabbitMQ 常被使用。Neutron Server 接收请求后发至消息队列,插件获取并返回结果,代理也通过它接收指令反馈执行结果,保障网络服务协同运作。

6.2.2 网络拓扑架构

在OpenStack中,网络拓扑的构建基于Neutron网络模型,呈现出多样化且灵活的架构特点 。外部网络,也被称为公共网络,是连接OpenStack项目与外部网络环境的桥梁,它为虚拟机提供了访问互联网或其他外部资源的途径 。在一个企业的云平台中,外部网络可能连接到企业的核心网络,使得虚拟机能够与企业内部的其他系统进行通信;或者连接到互联网,让虚拟机能够访问外部的服务和资源 。

内部网络则完全由软件定义,通常被称为私有网络,是虚拟机实例实际运行的网络环境 。它可以包含多个子网,每个子网都有独立的IP地址范围和配置 。在一个企业的开发测试环境中,可能会创建多个私有网络,每个网络对应不同的项目或团队,实现网络资源的隔离和分配 。通过合理规划子网的IP地址范围,可以满足不同业务场景对网络资源的需求 。

在这里插入图片描述
(图源:https://developer.aliyun.com/article/256415)

路由器在网络拓扑架构中起着关键的连接作用,它负责将内部网络与外部网络连接起来,实现不同网络之间的流量转发和通信 。在配置路由器时,需要设置其网关、路由表等参数,以确保数据包能够正确地在不同网络之间进行路由 。在一个包含多个私有网络和一个公共网络的云平台中,路由器可以将私有网络中的虚拟机与公共网络进行连接,使得虚拟机能够访问外部互联网资源 。同时,路由器还可以实现网络地址转换(NAT)功能,将私有网络的IP地址转换为公共网络的IP地址,从而实现虚拟机与外部网络的通信 。

网络拓扑架构还支持多种网络类型,如VLAN(虚拟局域网)、VXLAN(虚拟可扩展局域网)等 。VLAN通过在二层网络中划分不同的虚拟局域网,实现不同网络之间的隔离和通信 。在一个数据中心中,可能会使用VLAN技术将不同业务部门的网络进行隔离,确保各个部门之间的网络安全和独立性 。VXLAN则基于隧道技术,构建了一个大二层的数据中心网络,它能够跨越不同的物理网络,实现大规模的网络扩展和灵活的网络部署 。在一个跨地域的云平台中,VXLAN可以将不同地区的数据中心网络连接起来,形成一个统一的虚拟网络,为用户提供无缝的网络体验 。

6.3 原理与流程

6.3.1 网络创建原理

在OpenStack中,网络创建涉及多个层面的原理与技术实现。当用户发起创建网络的请求时,Neutron Server首先接收到该请求,并对其进行解析和验证 。请求中通常包含网络的相关配置信息,如网络名称、类型(私有网络或公共网络等)、是否共享等。若请求合法,Neutron Server会将请求转发给相应的插件进行处理 。

以使用ML2插件为例,该插件会根据用户指定的网络类型和所选的网络驱动(如Open vSwitch或Linux Bridge),在底层创建相应的网络基础设施 。在创建基于Open vSwitch的网络时,ML2插件会与Open vSwitch Agent进行交互,在计算节点上配置Open vSwitch虚拟交换机,创建虚拟网桥,并为网络分配唯一的标识符 。

在子网创建方面,需要依据网络的IP地址范围进行合理划分 。用户在创建子网时,需指定子网的IP地址段、子网掩码、网关IP地址等信息 。例如,若用户要创建一个IP地址范围为192.168.1.0/24的子网,其中192.168.1.0是网络地址,/24表示子网掩码为255.255.255.0,这意味着该子网可容纳254个可用的IP地址 。Neutron会根据这些信息,在网络中划分出相应的子网,并将子网信息存储到数据库中,以便后续的管理和查询 。

对于端口的创建,它是虚拟机接入网络的关键桥梁 。当为虚拟机创建端口时,Neutron会为端口分配唯一的MAC地址和IP地址,这些地址从所属子网的IP地址池中选取 。IP地址的分配方式可以是静态分配,即用户手动指定一个IP地址;也可以是动态分配,通过DHCP服务从IP地址池中自动获取一个可用的IP地址 。在一个企业的云平台中,对于一些对网络配置要求较高的关键业务虚拟机,可能会采用静态IP地址分配方式,以确保网络配置的稳定性;而对于一些测试用的虚拟机,则可以采用动态IP地址分配方式,提高IP地址的利用率和管理的灵活性 。

6.3.2 网络流量控制流程

网络流量控制是保障网络性能和安全性的重要环节,在OpenStack中,主要通过防火墙规则设置和QoS策略执行等方式来实现 。

防火墙规则设置是网络流量控制的基础手段之一。在Neutron中,可以通过安全组(Security Group)来定义防火墙规则 。安全组本质上是一组允许或拒绝网络流量的规则集合,每个虚拟机都可以关联一个或多个安全组 。当创建安全组时,用户可以定义入站规则和出站规则 。入站规则决定了哪些外部流量可以进入虚拟机,而出站规则则控制虚拟机可以向外部发送哪些流量 。例如,若要允许外部主机通过SSH协议(端口22)访问某个虚拟机,可在该虚拟机关联的安全组中添加一条入站规则,允许源IP地址为指定范围(如企业内部网络的IP地址段)的流量通过端口22进入虚拟机 。

QoS(Quality of Service,服务质量)策略执行则侧重于保障网络流量的质量和性能 。在OpenStack中,可以通过配置QoS策略来对网络流量进行分类、标记和调度 。首先,需要定义流量分类规则,根据流量的源IP地址、目的IP地址、端口号、协议类型等因素,将网络流量划分为不同的类别 。对于视频会议流量,可以将其划分为高优先级类别,因为这类流量对实时性和带宽要求较高;而对于一些非关键的文件传输流量,可以划分为低优先级类别 。

在定义好流量分类规则后,为每个流量类别设置相应的QoS参数,如带宽限制、延迟容忍度、优先级等 。对于高优先级的视频会议流量,可以设置较高的带宽保证,确保其在网络拥塞时能够优先获得足够的带宽,以保证视频会议的流畅性;对于低优先级的文件传输流量,可以限制其最大带宽,避免其占用过多网络资源,影响其他重要流量的传输 。

QoS策略通过Neutron的代理在各个节点上执行 。在计算节点上,Open vSwitch Agent会根据QoS策略对虚拟机发出的流量进行标记和调度 。在网络节点上,L3 Agent会对经过路由器的流量进行QoS处理,确保不同类别的流量能够按照预设的策略进行传输 。通过这些措施,实现了对网络流量的有效控制,保障了网络的性能和稳定性,满足了不同业务场景对网络质量的需求 。

七、编排管理

7.1 定义与功能

在 OpenStack 生态中,编排管理靠 Heat 组件实现,它是基于模板的自动化工具,能整合编排各种资源,实现复杂云基础设施的快速部署管理。Heat 用模板描述资源配置和关系,用户写模板文件,它就可自动创建管理资源,简化云环境搭建管理。

从技术实现看,Heat 基于 OpenStack 的 RESTful API 开发,与 Nova、Neutron、Cinder 等组件协作,调用它们的 API 操作资源,像创建虚拟机时调用 Nova 和 Neutron 的 API 来完成配置。

Heat 资源编排功能强大,通过 yaml 模板文件,用户可定义各种资源信息,如创建含虚拟机、网络、存储的环境时,能在模板中指定虚拟机规格、网络设置、存储配置等,借助相应服务创建资源,还能处理资源依赖关系,如虚拟机依赖网络创建,存储挂载依赖虚拟机创建,通过模板设定可保证创建顺序正确。Heat 还支持云资源生命周期管理,可更新或删除资源,如修改模板可升级虚拟机配置,也可删除所有模板定义的资源,实现快速清理回收。

7.2 架构设计

Heat编排服务的架构设计精妙且复杂,它与多个OpenStack组件紧密协作,共同构建起一个高效的云资源编排体系。Heat Engine是Heat组件的核心部分,它负责执行模板的解析与资源的编排操作 。当用户提交一个编排模板后,Heat Engine会首先对模板进行深入解析,理解其中定义的各种云资源的配置信息以及资源之间的依赖关系。在创建一个包含虚拟机、网络和存储卷的云环境模板时,Heat Engine会准确识别出虚拟机所需的计算资源规格、网络的拓扑结构以及存储卷的大小和挂载方式等关键信息。

在这里插入图片描述
(图源:https://www.cnblogs.com/yyuuee/p/14180834.html)

Heat Engine依据解析后的模板信息,与其他OpenStack组件进行交互,以实现资源的创建和管理。它会调用Nova的API来创建虚拟机实例,根据模板中指定的虚拟机规格,如CPU核心数、内存大小、磁盘容量等参数,向Nova发送创建请求,Nova则根据这些参数在合适的计算节点上创建虚拟机 。Heat Engine会调用Neutron的API来配置网络资源,根据模板中定义的虚拟网络类型、子网的IP地址范围、网关设置等信息,Neutron会创建相应的网络基础设施,包括虚拟网络、子网和路由器等,确保虚拟机能够获得正确的网络配置,实现与其他设备的通信 。

在存储资源方面,Heat Engine会调用Cinder的API来创建和管理存储卷。如果模板中要求创建一个特定大小的存储卷并将其挂载到虚拟机上,Heat Engine会向Cinder发送创建存储卷的请求,Cinder会根据请求在合适的存储节点上创建存储卷,并将其挂载到指定的虚拟机上 。Heat Engine还会与Keystone进行交互,以获取用户的认证信息和权限,确保只有经过授权的用户能够执行资源编排操作 。通过这种与多个OpenStack组件的紧密协作,Heat编排服务能够实现对复杂云环境的自动化部署和管理,大大提高了云资源的管理效率和灵活性 。

7.3 工作原理与流程

当用户提交一个编排模板后,Heat Engine首先会对模板进行解析,如前文所述,通过词法分析、语法分析和语义分析,将模板转化为内部数据结构,明确需要创建的资源类型、属性以及资源之间的依赖关系 。在创建一个包含虚拟机、网络和存储卷的云环境模板时,Heat Engine会准确识别出虚拟机所需的计算资源规格、网络的拓扑结构以及存储卷的大小和挂载方式等关键信息 。

Heat Engine会根据资源之间的依赖关系,确定资源的创建顺序。它会优先创建那些没有依赖其他资源的基础资源,如在上述云环境模板中,会先创建网络资源,因为虚拟机的创建依赖于网络的存在 。Heat Engine会调用Neutron的API来创建虚拟网络、子网和路由器等网络基础设施。根据模板中定义的虚拟网络类型、子网的IP地址范围、网关设置等信息,Neutron会在底层创建相应的网络配置 。

在网络资源创建完成后,Heat Engine会创建虚拟机资源。它会调用Nova的API来创建虚拟机实例,根据模板中指定的虚拟机规格,如CPU核心数、内存大小、磁盘容量等参数,向Nova发送创建请求,Nova则根据这些参数在合适的计算节点上创建虚拟机 。在创建过程中,Nova会与Glance服务进行交互,获取模板中指定的镜像,为虚拟机提供操作系统和初始配置 。

Heat Engine会创建存储资源。如果模板中要求创建一个特定大小的存储卷并将其挂载到虚拟机上,Heat Engine会向Cinder发送创建存储卷的请求,Cinder会根据请求在合适的存储节点上创建存储卷,并将其挂载到指定的虚拟机上 。在整个资源编排过程中,Heat Engine会实时监控资源的创建状态,一旦某个资源的创建出现故障,如API调用失败、资源冲突等,Heat Engine会根据预设的策略进行处理,可能会尝试重试创建操作,或者根据资源之间的依赖关系进行回滚,确保整个云环境的编排过程的一致性和可靠性 。当所有资源都成功创建后,Heat会将云环境的状态标记为“创建成功”,用户即可使用编排好的云资源 。

八、故障管理

8.1 定义与重要性

在 OpenStack 云平台中,故障管理是关键功能,能全面、及时、有效地对系统运行中的故障进行检测、诊断和恢复。它像 “健康卫士”,监控系统数据,发现故障隐患或已发生故障。检测到故障后,会运用算法和智能分析技术,结合相关组件信息,排查定位故障原因,如虚拟机无法启动时会综合多因素分析。明确故障后会采取恢复措施,如重启组件、调整资源、修复数据等,保障业务连续性和稳定性。

故障管理对系统稳定运行至关重要,是系统持续服务的关键保障,可减少因故障导致的系统停机和服务中断,确保用户持续稳定使用服务。在降低运维成本上意义重大,能减少人工排查故障时间和工作量,提供自动化检测诊断,快速定位故障并给出方案,提高效率,节省人力和时间成本。它还能增强用户对云平台的信任,保证高可用性和稳定性,为平台长期发展奠定用户基础。

8.2 架构与技术

8.2.1 故障检测架构

在OpenStack的故障管理体系中,故障检测架构融合了多种先进的监控工具和技术,以实现对系统全方位、实时的状态监测。其中,Ceilometer(现已更名为Aodh)作为OpenStack的核心监控组件,发挥着关键作用 。它通过在各个节点上部署的代理,实时采集系统的各类性能指标和状态信息,包括CPU使用率、内存占用率、磁盘I/O速率、网络流量等。这些数据被持续收集并存储在后端的数据库中,为后续的故障分析提供了丰富的数据来源 。

在这里插入图片描述
(图源:https://blog.csdn.net/m0_62727902/article/details/130744652)

Ceilometer代理在每个计算节点、控制节点和存储节点上均有部署。在计算节点上,代理会每隔一定时间间隔(如1分钟)采集一次CPU的使用率数据。当某一计算节点的CPU使用率在短时间内持续超过80%时,Ceilometer会将这一异常数据记录下来,并发送到中央数据存储库中 。

除了Ceilometer,OpenStack还常与外部监控工具结合使用,如Zabbix。Zabbix具有强大的分布式监控能力,能够对OpenStack云平台的物理服务器、网络设备等底层基础设施进行深入监控 。它可以监测服务器的硬件状态,如硬盘温度、电源状态等;还能对网络设备的端口状态、链路带宽等进行实时监测。通过与Zabbix的集成,OpenStack能够获取更全面的系统状态信息,进一步提高故障检测的准确性和及时性 。

在数据采集技术方面,采用了基于消息队列的异步采集方式 。以RabbitMQ作为消息队列系统,Ceilometer代理将采集到的数据封装成消息,发送到RabbitMQ队列中。然后,由专门的数据处理模块从队列中读取消息,并进行进一步的处理和存储。这种异步采集方式有效地减少了数据采集对系统性能的影响,确保了系统的正常运行。同时,消息队列的缓冲机制还能够在数据量较大时,避免数据丢失,保证数据的完整性 。

8.2.2 故障诊断与恢复技术

故障诊断在OpenStack的故障管理中至关重要,它主要通过对系统日志分析和故障模式匹配等方法来实现。系统日志包含了丰富的信息,记录了系统运行过程中的各类事件和操作。通过对Nova、Neutron、Cinder等组件的日志进行深入分析,可以发现故障的线索 。在Nova组件的日志中,如果出现大量关于虚拟机创建失败的记录,且错误信息提示为“镜像无法获取”,则可以初步判断故障可能与Glance镜像服务有关 。

故障模式匹配则是将采集到的故障数据与预先定义好的故障模式库进行比对。故障模式库中存储了各种常见故障的特征和表现形式 。在网络故障诊断中,如果发现网络流量突然大幅下降,且伴有大量的数据包丢失,通过与故障模式库中的网络链路故障模式进行匹配,就可以快速判断可能是网络链路出现了问题 。

在故障恢复方面,OpenStack采用了多种技术手段。自动重启是一种常见且有效的恢复方式 。当某个服务组件出现故障时,故障管理系统可以自动尝试重启该组件。在Keystone认证服务出现短暂的服务中断时,故障管理系统会自动重启Keystone服务,通常情况下,经过重启后,服务能够恢复正常运行 。

资源迁移技术在应对硬件故障或资源性能下降等情况时发挥着重要作用 。当某一计算节点的硬件出现故障,如硬盘损坏时,故障管理系统会将该节点上正在运行的虚拟机迁移到其他健康的计算节点上 。这一过程需要借助Nova组件的虚拟机迁移功能,通过实时迁移技术,在不中断虚拟机运行的情况下,将其从故障节点迁移到目标节点,确保业务的连续性 。

在一些复杂的故障场景中,可能需要进行数据修复和网络重新配置 。在存储系统中,如果发现部分数据损坏,故障管理系统会利用数据冗余机制和备份数据进行修复 。在Swift对象存储中,由于数据会在多个存储节点上进行冗余存储,当某个节点上的数据损坏时,系统可以从其他副本中获取数据,并进行修复 。对于网络配置错误导致的故障,故障管理系统会重新检查和调整网络配置参数,如IP地址分配、路由表设置等,以恢复网络的正常运行 。

相关文章:

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块(下) 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…...

GitLab集成Jira

GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成,即Jira议题集成和Jira开发面板集成,可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成(极狐GitLab文档)和Jira 开发面板集成(极狐G…...

如何用selenium来链接并打开比特浏览器进行自动化操作(1)

前言 本文是该专栏的第76篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将基于“比特浏览器”,通过selenium来实现链接并打开比特浏览器,进行相关的“自动化”操作。 值得一提的是,在本专栏之前,笔者有详细介绍过“使用selenium或者pyppeteer(puppeteer)…...

Docker私有仓库管理工具Registry

Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…...

《Hands_On_LLM》8.1 语义搜索和 RAG 概述(Semantic Search and RAG)

说明 接下来的这三篇文章是《On Large Language Models》的第8章:语义搜索和检索增强生成(Retrieval-Augmented Generation)的翻译。 概述 搜索是最早被业界广泛采用的语言模型应用之一。在开创性论文《BERT:用于语言理解的深度…...

C++实现设计模式---迭代器模式 (Iterator)

迭代器模式 (Iterator) 迭代器模式 是一种行为型设计模式,它提供了一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 意图 提供一种方法,可以顺序访问一个容器对象中的元素,而无需暴露其…...

skywalking的使用

面试常问的面试题: 你们的服务监控怎么做的? 其实就可以回答skywalking,skywalking是一个开源的分布式追踪与性能监视平台,特别适用于微服务架构、云原生环境以及基于容器(如Docker、Kubernetes)的应用部…...

【C语言系列】深入理解指针(1)

前言 总所周知,C语言中指针部分是非常重要的,这一件我们会介绍指针相关的内容,当然后续我还会出大概4篇与指针相关的文章,来深入的讲解C语言指针部分,希望能够帮助到指针部分薄弱或者根本不会的程序员们,后…...

医院挂号就诊系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…...

Mysql 主从复制原理及其工作过程,配置一主两从实验

主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作…...

verilog笔记1

1. 阻塞赋值 阻塞赋值,顾名思义即在一个 always 块中,后面的语句会受到前语句的影响,具体来说就是在同一个always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。也…...

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...

Flask简介与安装以及实现一个糕点店的简单流程

目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…...

Ubuntu22.04安装paddle GPU版本

文章目录 确立版本安装CUDA与CUDNN安装paddle 确立版本 查看官网信息,确立服务版本:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.6/install/pip/linux-pip.html 安装CUDA与CUDNN 通过nvidia-smi查看当前显卡驱动版本: 通过…...

读《SQL经典实例》学数据库(系列一)

目录 友情提醒第一章、数据库简述1.1)数据库简述1.2)常见的数据库软件1.3)MySQL数据库安装 第二章、SQL语句分类2.1)操作数据仓库/数据表:DDL2.1.1)创建数据仓库/数据表2.1.2)删除数据仓库/数据表2.1.3&…...

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机,流畅地滑动屏幕、切换应用、欣赏动画时,背后其实藏着一套庞大且精密的开源系统——Android AOSP(Android Open Source Project)。这套系统不仅是所有安卓设备的根基,也是系统开发者的终极 pl…...

git系列之revert回滚

1. Git 使用cherry-pick“摘樱桃” step 1: 本地切到远程分支,对齐要对齐的base分支,举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2: 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…...

【统计的思想】假设检验(一)

假设检验是统计学里的重要方法,同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系,籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统,简称PSS系统,有一种业…...

Linux 管道操作

Linux 管道操作 在 Linux 中,管道(Pipe)是一个非常强大且常用的功能,它允许将一个命令的输出直接传递给另一个命令作为输入,从而能够高效地处理和分析数据。管道在多个命令之间建立数据流,减少了文件的读写…...

Rust 数据类型详解

一、标量类型(Scalar Types) 标量类型代表一个单独的值。Rust 中有四大基本标量类型:整数(integer)、浮点数(floating-point number)、布尔(boolean)和字符(…...

(十四)WebGL纹理坐标初识

纹理坐标是 WebGL 中将 2D 图像(纹理)应用到 3D 物体表面的重要概念。在 WebGL 中,纹理坐标通常使用一个二维坐标系,称为 uv 坐标,它们决定了纹理图像如何映射到几何体上。理解纹理坐标的核心就是明白它们如何将二维纹…...

青少年CTF练习平台 EasyMD5解题思路

题目 EasyMD5 PHP弱类型/弱等于的判断 翻译 上传之后网页提示:Not a PDF! angry!!! get out from my page 修改文件后缀为pdf 再次上传,答案出来了 s878926199a s155964671a 成功获取flag...

二叉搜索树(TreeMapTreeSet)

文章目录 1.概念2.二叉搜索树的底层代码实现(1)首先构建二叉树(2)实现插入功能;(3)实现查找(4)删除(重点) 3.TreeMap 1.概念 TreeMap&TreeSet都是有序的集合都是基于二叉搜索树来实现的 二叉搜索树:是一种特殊的二叉树 若左子…...

鸿蒙动态路由实现方案

背景 随着CSDN 鸿蒙APP 业务功能的增加,以及为了与iOS、Android 端统一页面跳转路由,以及动态下发路由链接,路由重定向等功能。鸿蒙动态路由方案的实现迫在眉睫。 实现方案 鸿蒙版本动态路由的实现原理,类似于 iOS与Android的实…...

matlab实现一个雷达信号处理的程序,涉及到对原始图像的模拟、加权、加噪以及通过迭代算法对图像进行恢复和优化处理

clc clear close all load scene3.mat %加载原始图像,自己设计 设计为一个300*400的矩阵 300是距离向长度,400是方位向长度 Map_ori = scene3; [M,N_K] = size(Map_ori);figure imagesc(scene3) v = 100; %机载速度,单位m/s bandwidth = 30*1e6; …...

设置 Git 默认推送不需要输入账号和密码【Ubuntu、SSH】

如何设置 Git 默认推送不需要输入账号和密码 在使用 Git 管理代码时,许多开发者会遇到每次推送(push)或拉取(fetch)代码时都需要输入 GitHub 或 GitLab 等远程仓库的账号和密码的情况。虽然设置了用户名和电子邮件信息…...

【深度学习】Pytorch:导入导出模型参数

PyTorch 是深度学习领域中广泛使用的框架,熟练掌握其模型参数的管理对于模型训练、推理以及部署非常重要。本文将全面讲解 PyTorch 中关于模型参数的操作,包括如何导出、导入以及如何下载模型参数。 什么是模型参数 模型参数是指深度学习模型中需要通过…...

ABP - 缓存模块(1)

ABP - 缓存模块(1) 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching ,而对于分布式缓存…...

【unity进阶篇】unity如何实现跨平台及unity最优最小包体打包方式(.NET、Mono和IL2CPP知识介绍)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 : 选择类型 1: 将当前的工程打包成IP 2: 将当前的BD工程打包成IP 3: 将指定的源码打包成IP 4: 创建一个新的AXI 接口IP 其中3和4是比较常用的,本次…...

【C++】如何从源代码编译红色警戒2地图编辑器

【C】如何从源代码编译红色警戒2地图编辑器 操作视频视频中的代码不需要下载三方库,已经包含三方库。 一、运行效果:二、源代码来源及编程语言:三、环境搭建:安装红警2安装VS2022下载代码,源代码其实不太多&#xff0c…...

HRNet,Deep High-Resolution Representation Learning for Visual Recognition解读

论文、代码和ppt地址:HRNet。代码地址: hrnet 本文通过paper解读和代码实例以及onnx模型的分析,来说明hrnet模型。 摘要——高分辨率表征对于诸如人体姿态估计、语义分割和目标检测等对位置敏感的视觉问题至关重要。现有的最先进框架首先通过一个子网&…...

Rust Actix Web 项目实战教程 mysql redis swagger:构建用户管理系统

Rust Actix Web 项目实战教程:构建用户管理系统 项目概述 本教程将指导你使用 Rust 和 Actix Web 构建一个完整的用户管理系统,包括数据库交互、Redis 缓存和 Swagger UI 文档。 技术栈 Rust 编程语言Actix Web 框架SQLx (MySQL 数据库)Redis 缓存Uto…...

# 爬楼梯问题:常见数列的解法总结

爬楼梯问题:常见数列的解法总结 在编程中,爬楼梯问题(Climbing Stairs Problem)是一个经典的动态规划问题,常常作为入门学习动态规划和递推的重要例题。这个问题看似简单,但背后包含了多种解决方式&#x…...

速通Docker === 常用命令

目录 Docker命令 镜像操作 容器操作 基础操作 启动参数 容器内部操作 打包成指定文件 发布镜像 总结 镜像操作 容器操作 启动容器参数 容器内部操作 打包镜像 启动指定镜像的容器 发布镜像 Docker命令 启动一个nginx,并将它的首页改为自己的页面,发布…...

AWS S3 跨账户访问 Cross Account Access

进入S3对应的存储桶,上面选项选权限,存储桶策略 -- 编辑,输入对应的policy。 完全控制,包含上传删除权限,policy如下: {"Version": "2012-10-17","Statement": [{"Si…...

C#中常见的锁以及用法--18

目录 一.C#中存在的锁 二.锁的作用 三.锁的概念和定义 关于锁的完整代码示例 代码逐层剖析: 全局变量与同步变量 Lock(锁)关键字示例 Monitor(监视器锁)示例 Mutex(互斥量)示例(支持跨进程同步) SemaphoreSlim(信号量)示例 ReadWriterLockSlim(读写锁)示例 SpinLock…...

【数据分享】1929-2024年全球站点的逐年平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…...

Docker部署MySQL 5.7:持久化数据的实战技巧

在生产环境中使用Docker启动MySQL 5.7时,需要考虑数据持久化、配置文件管理、安全性等多个方面。以下是一个详细的步骤指南。 1. 准备工作 (1)创建挂载目录 在宿主机上创建用于挂载的目录,以便持久化数据和配置文件。 sudo mkdi…...

二叉树和堆

树概念及结构(了解) 树的概念(看看就行) 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树,也就是…...

Zookeeper(15)Zookeeper的ZooKeeper API包含哪些主要操作?

Zookeeper 的 ZooKeeper API 提供了一系列操作来管理 Zookeeper 的数据节点(znodes)。这些操作主要包括创建节点、删除节点、读取节点数据、设置节点数据、列出子节点、检查节点是否存在,以及注册 Watcher 等。以下是这些操作的详细介绍和代码…...

深入浅出:Go语言os包中的API使用指南

深入浅出:Go语言os包中的API使用指南 引言 Go语言以其简洁、高效和强大的生态系统著称,是现代编程中不可或缺的一部分。其中,os包作为Go标准库的一部分,提供了丰富的API来与操作系统进行交互。本文将深入探讨os包中的核心功能,并通过实际案例帮助读者更好地理解和应用这些…...

【云岚到家】-day02-客户管理-认证授权

第二章 客户管理 1.认证模块 1.1 需求分析 1.基础概念 一般情况有用户交互的项目都有认证授权功能,首先我们要搞清楚两个概念:认证和授权 认证: 就是校验用户的身份是否合法,常见的认证方式有账号密码登录、手机验证码登录等 授权:则是该用…...

vben5 admin ant design vue如何使用时间范围组件RangePicker

本文参考:https://pusdn-dev.feishu.cn/wiki/VF4hwBAUliTE6TkUPKrcBNcZn9f?fromfrom_copylink 由PUSDN整理发行,收录时请保留PUSDN。 前端组件专题 年月日时间范围表单回显RangePicker 推荐使用多个字段存储,不推荐用英文逗号拼接时间&am…...

安全策略配置实验

安全策略配置实验 1.拓扑 2.需求 2、办公区PC在工作日时间(周一至周五,早8到晚6)可以正常访问OA srver,其他时间不允许 3、办公区PC可以在任意时刻访问web server 4、生产区PC可以在任意时刻访问OA Server,但是不能访问Web server 5、特…...

Win10安装WebODM和操作全流程

效果 以下是在 Windows 10 上安装和部署 WebODM 的详细教程: 一、安装 Docker Desktop for Windows 1、访问 Docker 官方网站:https://www.docker.com/products/docker-desktop 。 2、下载 Docker Desktop for Windows 的安装程序。 3、运行安装程序: 双击下载的安装程序,…...

wireshark抓路由器上的包 抓包路由器数据

文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤: 扫描路由器信息,确定抓包信道;设置连接路由器的…...

第8章:Python TDD处理货币类代码重复问题

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...

C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程

通过本课程的学习,你可以掌握C#编程的重点,享受编程的乐趣。 在本课程之前,你无需具备任何C#的基础知识,只要能操作电脑即可。 不过,希望你的数学不是体育老师教的。好的程序是数理化的实现与模拟。没有较好的数学基础…...

Agent Laboratory: Using LLM Agents as Research Assistants 论文简介

加速机器学习研究的智能实验室——Agent Laboratory 1. 引言 随着人工智能技术的飞速发展,机器学习领域正以前所未有的速度推进科学发现和技术创新。然而,传统的科学研究模式往往受到时间、资源和专业知识限制,阻碍了研究者们探索新想法的能…...