Ceph分布式存储系统优化分析
Ceph支持多种存储访问接口,现有的多种性能测试工具都可用于Ceph的性能测试,如测试块接口性能的fio,iometer等;测试CephFS接口的filebench,fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT,其包含radosbench,librbdfio,kvmrbdfio和rbdfio。radosbench基准测试使用ceph common软件包附带的rados二进制文件,通过对象接口来访问Ceph集群。剩下的3个工具都是测试块存储性能的。
-
librbdfio基准模块通过用户态librbd库来测试RBD的块存储性能。
-
kvmrbdfio基准测试要求在使用CBT之前创建虚拟机实例,并挂载RBD块设备。
-
rbdfio基准测试使用内核进行驱动并将其映射到块设备的RBD块设备上。Teuthology是一个Ceph自动化测试的框架,可以在指定节点运行测试用例,也可以用于性能的测试。
对Ceph系统进行持续的性能监控可以了解集群运行状况,及早发现性能瓶颈。Ceph提供了命令行接口输出性能相关的统计数据。OSD以PG为单位收集性能数据并定期发给Monitor节点。Monitor节点汇总性能数据并同步至其他Monitor节点。我们也提出了一种针对Ceph存储系统层进行分层性能监测和采集的框架,以及一种通过Ceph电文来分析系统性能和瓶颈的方法。
1、Ceph存储系统的特点和挑战
本节总结了Ceph分布式存储系统的特点和面临的挑战。
(1)Ceph存储系统的优点
-
1)高性能。针对并发量大的异步IO场景,随着集群规模的扩大,Ceph可提供近线性的性能增长。
-
2)高可扩展性。Ceph通过CRUSH算法来实现数据寻址。这种方法避免了元数据访问的瓶颈,使集群的存储容量可以轻易扩展至PB级,甚至EB级。
-
3)统一存储,适用范围广。Ceph支持块、文件和对象存储,可满足多种不同的需求。底层的RADOS可扩展并支持不同类型的存储服务。
-
4)支持范围广。自2012年起,Linux内核开始支持Ceph,目前Ceph可以在几乎所有主流的Linux发行版和其他类UNIX系统上运行。自2016年起,Ceph开始支持ARM架构,同时也可适用于移动、低功耗等领域,其应用场景覆盖了当前主流的软硬件平台。
(2)Ceph面临的挑战
-
1)Ceph底层采用定长的对象存储,为了保证对象级别的原子性,底层存储引擎的写放大问题严重影响了性能。
-
2)Ceph的数据分布算法CRUSH在实际环境中存在一些问题,包括扩容时数据迁移不可控、数据分布不均衡等。这些问题影响了Ceph性能的稳定性。
-
3)Ceph对新型存储介质的支持较差。在使用高速存储介质时,软件造成的时延比硬件导致的时延高出数十倍。社区也在开发面向新型存储介质的存储引擎。
-
4)Ceph的架构复杂,抽象层次多,时延较大。虽然Ceph采用面向对象的设计思想,但其代码内对象间的耦合严重,导致不同版本间的接口不兼容。针对不同版本的性能优化技术和方法也互相不兼容。
-
5)Ceph是一个通用的分布式存储系统,可应用于云计算、大数据和高性能计算等领域。针对不同的访问负载特征,Ceph还有较大的性能提升和优化空间。
Ceph是一个通用的分布式文件系统,适用于不同的场景。内部机制的优化对所有的场景都会产生性能的提升,但是优化的难度和复杂度也最高。
2、存储引擎的优化
在分布式存储系统中,数据被分散在大量的存储服务器上,大部分分布式存储系统都直接使用本地文件系统来存储数据,如HDFS、,Lustre等。高性能、高可靠的分布式存储系统离不开高效、一致、稳定、可靠的本地文件系统。Ceph存储引擎的优化,参考“Ceph分布式存储系统架构研究综述”。
3、网络通信的优化
在分布式存储系统中,节点间需要通过网络通信来交换状态和数据。Ceph有3种类型的通信模式,分别是Simple,Async和XIO。Simple线程模式对每个网络连接都创建了两个线程,分别用于接收和发送。Ceph集群中OSD、Monitor节点及客户端之间都需要建立连接。随着集群规模的增长,创建的连接数和线程数会呈指数级增长,需要消耗更多的CPU和内存资源。在内存有限的情况下,Simple模式将导致大量线程的频繁切换以致内存耗尽。Async模式将连接和线程分开,通过线程池管理来维护线程的使用,用户可设置线程池中线程的数量。这是目前被广泛采用的方式,自2017年发布Kraken版本后,这已经成为默认的通信模式。XIO模式使用了开源的网络通信库accelio来实现,现今仍处于实验阶段。目前针对网络通信优化的研究都是基于Async通信模式实现的。
Async模式使用线程池,可兼顾资源和性能的平衡,但早期其设计是基于循环的简单调度方案,未考虑传输数据大小和线程负载。这种早期设计会导致工作线程负载不平衡,在高负荷情况下产生一些性能问题。Han等提出了一种用于Ceph文件系统的动态消息感知通信的调度程序,以解决工作线程调度不平衡的问题,从而提高性能。他提出的调度算法根据传入消息的类型来平衡工作线程的工作量,同时避免了工作线程之间不必要的连接转换。
一方面,该算法将低优先级消息(例如来自心跳连接的消息)分配给特定线程,以免干扰其他高优先级消息。另一方面,高优先级消息被平均分配给每个工作线程,以平衡线程之间的工作负载。同时其使用遗传算法(GA)来使不必要的连接转换最小化。测试结果表明,在相同的客户端工作负载下,该方法比原始Asyncmessenger的性能高出12.5%,在客户端的随机工作负载下,其性能比原始Asyncmessenger高出24%。
优化Asyncmessenger还可以通过将多个工作线程分配给单个连接来处理来自该连接的流量。但是,由于多个线程争用访问连接中的共享资源,这种映射结构会引起与锁定维护有关的另一种开销。
Ceph的Luminous版本将Async网络通信模型作为默认的通信方式。虽然Async实现了IO的多路复用,使用共享的线程池来实现异步发送和接收任务,但是如何平衡Async工作线程的负载也是一个值得关注的问题。下表总结了几种常见的算法的优化方案。
RDMA是一种低延迟、高性能的网络传输协议,已被广泛应用于高性能计算环境中。为了在Ceph中利用RDMA以实现高速的数据传输,开发社区提出了两种方案。
第一种方案是降低Ceph对网络层状态的要求,减少Messenger需要实现的逻辑。现在的XioMessenger规定的语义和策略过于复杂,使用新的网络协议实现的难度大;减少Messenger的逻辑则需要增加上层的逻辑。
第二种方案是基于目前的AsyncMessenger的框架,扩展出支持RDMA的网络后端而无需关心上层的会话逻辑。国内的XSKY公司和Mellanox公司合作提出了基于AsyncMessenger的网络通信引擎。这种修改使用RDMA的双边通信机制,性能提升有限。并且在当前版本的代码实现中,RDMA只可用于客户端与服务器之间、服务器与服务器之间的通信,不能在两个网络中同时被应用,这也限制了该方案的应用。
4、数据放置方法的优化
经典Ceph存储系统在副本模式下选择存储节点时,仅以节点存储容量为唯一选择条件,并没有考虑到网络和节点的负载状况,这影响了系统在网络性能差和节点高负载的情况下的读写性能。为解决这些问题,文献设计了基于软件定义网络技术的Ceph存储系统模型和存储节点选择策略,首先利用软件定义网络技术实时获取网络和负载状况,以简化网络配置和减小测量开销,然后通过建立并求解出综合考虑了多种因素的多属性决策数学模型来确定存储节点的位置。
在实际环境中对设计的存储节点选择方法进行读写操作的测试,结果表明,与现有的CRUSH算法相比,提出的存储节点选择方法可以在保持与原有Ceph系统相同的写操作性能的同时,针对4KB对象的100%读操作的响应时间比原有的Ceph集群的缩短了10ms左右,针对4096KB对象的100%读操作响应时间相对缩短了120ms左右。这种方法需要获取网络的实时性能以用于数据放置策略的调整,引入了网络负载采集的开销,在大规模集群场景下应用受限。并且由于该方法会频繁更新CRUSH算法的参数,其读取性能会有所下降。
5、配置参数性能调优
Ceph存储系统的可配置参数有1500多个,参数的调整对系统性能有较大的影响。默认配置针对不同的硬件和应用通常不是最优配置。通过锁优化和系统参数调优技术使系统的吞吐率提升了1.6倍,但其并未讨论修改了哪些配置参数。虽有文献详细介绍了在全闪存环境下需要调整哪些参数(包括内核、文件系统、磁盘缓存、RADOS和RBD等),但是没有给出调整前后的性能对比。
Intel开发并开源了一个性能优化工具CeTune,该工具可用于Ceph集群的部署、测试、分析和调优。该工具是一个交互性的调优工具,尚不能自动寻找最优配置。分布式存储系统的性能调优仍是一个具有挑战性的问题。参数组合导致问题解空间大,且参数之间会互相影响。在数据库领域已有一些利用机器学习和决策树的方法进行自动调优的成功案例,而在分布式存储系统领域,相关研究仍处于起步阶段。
面向特定硬件环境的优化
随着3DXpoint和非易失内存等技术的发展与成熟,最快的存储介质性能已接近内存性能。使用新型存储器件的系统中软件已成为瓶颈。如图所示,HDD,SATASSD,NVMe NANDSSD,3 DXPointStorage,3DXPoint Memory系统中的软件造成的延迟分别是0,10%,20%,40%和90%。通过重构软件的体系结构来充分发挥高速存储介质的性能是目前的一个研究热点。
5.1 固态存储
固态存储设备相比磁盘设备,在性能、功耗和机架密度上具有显著的优势。SATA接口限制了固态存储设备的最大吞吐率。Intel提出的利用PCIE总线来访问固态存储的NVMe接口方法提供了通用的高速存取方案。使用NVMe的固态存储设备在吞吐量和延迟性能上比传统的磁盘高出1-2个数量级,因此在总的IO处理时间中,软件造成的延迟占据更大的比例。现有的存储系统为低速硬件设计了合并写、异步写等机制,但是这些机制并不适用于高速存储设备。随着存储设备性能的进一步提升,存储系统软件栈的性能和效率对存储系统的影响越来越大。存储系统因受制于低效冗余的软件栈而不能充分发挥硬件性能。
SPDK是Intel提出的使用NVMeSSD作为后端存储的应用软件加速库。该软件库的核心是实现用户态、异步、无锁、轮询方式的NVMe驱动。虽然SPDK等新型驱动可以将NVMeSSD的性能最高提高6倍,但是在Ceph中直接使用SPDK却没有明显的性能提升。其主要原因在于在BlueStore的处理中有很多线程协作,线程间的互斥和切换开销较大。
在Ceph中,OSD使用异步IO等待IO完成,多线程可以充分利用NVMeSSD多通道的特点来提升性能。由于一个OSD无法充分利用NVMeSSD的带宽,研究人员发现将NVMeSSD进行分区,然后在其上运行多个OSD可显著提高性能。图给出了一个NVMeSSD分别使用1个OSD、2个OSD和4个OSD时的性能,可以看到在1个SSD上运行4个OSD时的随机读,其IOPS增长很快但延迟增长缓慢。
但是将SSD分区并同时支持多个OSD也有一些缺点,如降低了可靠性、小块随机写延迟增大、需要更多内存和CPU资源等。另一项对于随机写的测试结果如图所示,在1个SSD上运行2个OSD时的IOPS与运行4个OSD时的IOPS相近,且需要的CPU资源更少。使用多个OSD的提升效果与SSD的性能和CPU的性能相关,且需要占用较多的CPU和内存资源,对可用性也有影响,因此不适用于大规模生产环境。
除了NVMe以外,现在还有一些使用SATASSD来代替HDD的策略,但直接替换存储介质的性能提升有限。Ceph针对HDD设计了很多异步和调整写顺序的机制,但这些机制反而降低了SSD的性能。当使用Ceph集群和全闪存SSD进行4K随机写入/读取的性能测试时,随机写入性能也只能达到16KIOPS。当线程数增加到32个及以上时,IOPS几乎保持不变,且延迟急剧增加。随机读取时,当线程数少于32时,IOPS较低,且延迟较高。
5.2 非易失内存
存储是数据密集型系统中最慢的组件。尽管基于NVMe的固态驱动器提供了更快、更持久的存储,IO性能已大大提高,但其仍然比系统中的其他组件慢。随着NVDIMM产品的出现,可字节寻址的非易失性存储器将提供与内存相近的IO性能。
Intel将Client端的NVM作为缓存,提出了3个优化方案,大大提升了块存储接口的访问性能。
-
方案一提出由于Ceph快照中的父对象是只读的,Client端将其缓存在本地SSD中以提高读取性能。但该方案仅缓存特定的不变对象,不具有通用性。
-
方案二利用Client端的NVM实现了一个写回缓存,写入NVM的数据并将其不定期刷新至OSD中。该方案性能提升的效果明显,能将99.99%的写入延迟缩短到1/10以下。但是因为在客户端发生故障时,保存在NVM中的数据没有写入Ceph后端的OSD,所以会造成数据不一致。
-
为了解决这个问题,方案三通过RDMA技术为Client节点和OSD节点的NVM空间建立镜像,以避免因Client故障导致的数据丢失。复制写日志机制将数据同时持久化至Client和OSD的NVM中,当Client不发生故障时,OSD仅提供镜像空间,无需额外的CPU等资源。基于客户端的缓存性能提升明显,但为每个客户端配置NVM和RDMA的成本较高,且该方案并未充分利用OSD端的NVM特性。
5.3 混合存储
在Ceph集群中可以使用SSD作为保存日志或缓存来提高访问性能。Ceph支持使用高速存储设备作为缓存来加速IO性能。目前有两种不同的缓存实现方式:1)在OSD内部使用缓存;2)将高性能节点组成缓存层。
根据第一种方案,在使用FileStore时,文件系统可以识别并使用异构来存储介质,并将其中的SSD作为缓存,其架构如图7(a)所示。这种方案可以依赖已有的缓存工具(如dm-cache,bcache,FalshCache)来实现该功能,也可以使用现有的多种缓存控制方法。其中,dm-cache作为linux内核的一部分,采用devicemapper机制以允许用户建立混合卷;bcache是linux内核块层缓存,使用SSD作为HDD硬盘的缓存,从而起到加速作用;FlashCache可智能缓存最近读取过的用户数据或元数据,从而加快数据访问。
第二种方案的实现方式是将独立的设备或节点组成缓存池,在慢速节点保存冷数据,在高性能节点保存热数据。在这种方案中,高速节点被组织成为缓存层,该缓存层也是一个RADOS池,不仅具有持久化的能力,还具有独立的CRUSH策略。该层以下是基于HDD的RADOS池,其可以采用三副本的ReplicatePG作为后端,也可以采用Erasurecoded作为后端。
6、未来展望
针对前面提到的不同的性能优化方法,本节从Ceph内部机制优化、基于新型硬件和面向不同负载优化这3个方面对性能优化问题的未来研究方向进行了展望。
6.1 Ceph内部机制的优化
Ceph发展至今,其规模和复杂性不断增大。数据分发、元数据管理和对象一致性保证等方面的逻辑复杂,目前的多线程和加锁机制效率较低。采用新的内存分配机制和高效KV数据来管理子系统可能对性能有所提升。目前内置的性能采集机制不完善,采集内容和方法、性能数据分析这两方面都有改进的空间。
6.2 基于新型特定硬件的优化
随着新型存储介质的发展,NVM和3D XpointSSD等介质的访问性能比传统HDD提升了2-4个数量级。存储系统优化需通过结合硬件特征来重构存储系统的体系结构,删除冗余抽象和功能,并重新分配软硬件的功能。存储软件中针对传统硬件的优化方法可能会降低性能,如异步写、随机写合并等。SSD的文件转换层的垃圾回收、空间映射与管理功能也可移至软件实现。多种不同性能的介质也将长期共存于存储系统中,根据数据冷热和介质特性自适应实现高性价比的数据分布也是一个研究方向。Ceph虽然已支持RDMA协议,但是双边操作方式性能的提升有限,设计新的通信机制、采用单边操作可进一步提高性能。
6.3 面向应用场景的自适应优化
Ceph应用场景众多,不同应用的访问特征和数据分布差异较大。在不同的负载情况下,基于人工制定的存储优化方案不能满足要求。根据不同应用负载的自适应优化技术也是一个挑战,其研究内容包括利用访问标签来实现不同应用的性能服务质量保证以及性能隔离、利用机器学习技术自动寻找最优配置,以及动态的数据预取和迁移。
7、结束语
本文介绍了Ceph分布式存储系统的发展历史和特点,并从内部优化机制、面向硬件设备和应用场景这3个方面梳理了现有的性能优化方法。作为一个开源的统一存储系统,Ceph提供了高性能、高可扩展性和高可用的块、文件和对象存取功能。Ceph的特点使之被广泛应用于云计算、高性能计算和大数据处理领域。目前,Ceph的性能优化研究工作虽然有一定的进展,但仍有很多问题尚未完全解决。
作者:张 晓、张思蒙、石佳、董聪、李战怀
相关文章:

Ceph分布式存储系统优化分析
Ceph支持多种存储访问接口,现有的多种性能测试工具都可用于Ceph的性能测试,如测试块接口性能的fio,iometer等;测试CephFS接口的filebench,fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT,其包…...
supOS APP开发者课程练习册创建服务(命名:getPropertiesHistory)
创建服务(命名:getPropertiesHistory),调用getPropertiesHistory()服务,获取“催化裂化一车间”对象的“重质馏分油_进”最近5分钟内的历史值,每一分钟取一个值,开始时间和结束时间需要调用时间格式化功能集…...

认识excel篇3之数据的有效性(数据验证)
数据有效性不仅能够对单元格的输入数据进行条件限制,还可以在单元格中创建下拉列表菜单方便用户选择输入。如果没有做数据验证,单元格内默认可以输入任意类型的数据。数据验证就是限制单元格输入数据(必须输入符合要求的才能输入)…...

adb 命令行执行单元测试
文章目录 1、配置 adb 环境变量2、adb 执行测试3、官方文档解读 adb 使用(1)第一条执行测试的adb命令(2)am instrument 参数(3)-e 参数 的 key-value键值对(4)用法用例 4、存在问题 …...
Ceph入门到精通-Linux下Ceph源码编译和GDB调试
Ceph版本:14.2.22 Linux版本:ubuntu-server 18.04 第一部分 下载Ceph源码 1.1 配置Ceph源码镜像源 Ceph源码是托管在Github上,由于某些原因,国内访问Github网站很慢,所以需要从其他途径加速获取源码。Github官方给出…...

【c语言】动态内存管理(超详细)
他治愈了身边所有人,唯独没有治愈他自己—超脱 csdn上的朋友你们好呀!!今天给大家分享的是动态内存管理 👀为什么存在动态内存分配 我们定义的局部变量在栈区创建 int n 4;//在栈上开辟4个字节大小int arr[10] { 0 };//在栈上开…...

Linux/centos上如何配置管理NFS服务器?
Linux/centos上如何配置管理NFS服务器? 1 NFS基础了解1.1 NFS概述1.2 NFS工作流程 2 安装和启动NFS服务2.1 安装NFS服务器2.2 启动NFS服务 3 配置NFS服务器和客户端3.1 配置NFS服务器3.2 配置NFS客户端 4 实际示例4.1 基本要求4.2 案例实现 1 NFS基础了解 NFS&…...
Element组件浅尝辄止5:Empty 空状态组件
Empty空状态组件:空状态时的占位提示。 如第一次进入当前功能模块时,数据状态为空,则展示空状态,可用到Empty组件 1.How? <el-empty description"描述文字"></el-empty> 2.自定义图片 通过设置 image 属…...

【华为Datacom 综合拓扑案例—分享篇】
拓扑图 题目要求 实验要求: 1、PC1\PC2\PC3\PC4采用DHCP自动获取IP地址,SW5作为服务器,SW3和SW4作为中继 创建地址池ip pool huawei1和ip pool huawei2,租期都为2天 2、SW3与SW4做链路聚合,采用LACP模式。SW3作为主…...

springcloud3 使用openfegin实现getpost请求调用
一 项目介绍 1.1 工程介绍 1.consumer9008 2.provider9009 二 get请求 2.1 消费端 1.controller 2.service 2.2 提供者 1.提供者 2.3 测试请求 地址: http://localhost:9008/consumer/payment/nacos/2223 三 post请求 3.1 消费者 3.2 提供者 3.3 测试请求…...

【JVM】类装载的执行过程
文章目录 类装载的执行过程1.加载2.验证3.准备4.解析5.初始化6.使用7.卸载 类装载的执行过程 类装载总共分为7个过程,分别是 加载,验证,准备、解析、初始化、使用、卸载 1.加载 将类的字节码文件加载到内存(元空间)中。这一步会…...

FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、独立看门狗介绍 二、看门狗监测多任务执行思路 1、监测目标 2、监测方案 3、应用注意事项 三、看门狗监测多任务编程 1、STM32cubeMX配置 2、代码编写 四、低功耗Tickless模…...

预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks
一.文章概述 本文提出了一种自监督属性图生成任务来预训练GNN,使得其能捕图的结构和语义属性。作者将图的生成分为两个部分:属性生成和边生成,即给定观测到的边,生成节点属性;给定观测到的边和生成的节点属性…...

Python实现透明隧道爬虫ip:不影响现有网络结构
作为一名专业爬虫程序员,我们常常需要使用隧道代理来保护个人隐私和访问互联网资源。本文将分享如何使用Python实现透明隧道代理,以便在保护隐私的同时不影响现有网络结构。通过实际操作示例和专业的解析,我们将带您深入了解透明隧道代理的工…...

并发编程系列-CompletableFuture
利用多线程来提升性能,实质上是将顺序执行的操作转化为并行执行。仔细观察后,你还会发现在顺序转并行的过程中,一定会牵扯到异步化。举个例子,现在下面这段示例代码是按顺序执行的,为了优化性能,我们需要将…...
锁粒度的粗细与时空损耗互换
1 空间换时间的cases 1.1 redis的用户分组限流和用户定制的限流器 Redis 用户分组限流和用户定制的限流器:使用 Redis 进行用户分组限流或用户定制的限流意味着你使用 Redis 数据库来维护用户的访问限制。可以通过计数器、滑动窗口或令牌桶等算法来实现限流。用户…...
[Android 11]使用Android Studio调试系统应用之Settings移植(七):演示用AS编译错误问题
文章目录 1. 篇头语2. 系列文章3. AS IDE的配置3.1 AS版本3.2 Gradle JDK 版本4. JDK的下载5. AS演示工程地址6.其他版本JDK导致的错误1. 篇头语 距离2021年开始,系列文章发表已经有近两年了,依旧有网友反馈一些gitee上演示源码编译的一些问题,这里就记录一下。 2. 系列文章…...
MyBatis面试题
MyBatis面试题: 1、MyBatis是什么? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句…...

Lorenz系统最大lyapunov exponent的求解
首先看下Lorenz混沌系统: 赋予初始值,例如: 当然,初始值可以根据需要设定。 看下他的吸引子,很美: 看下他的分叉图:...
c#实现策略模式
下面是一个使用C#实现策略模式的示例代码: using System;// 策略接口 public interface IStrategy {void Execute(); }// 具体策略类A public class ConcreteStrategyA : IStrategy {public void Execute(){Console.WriteLine("具体策略A的执行逻辑");} …...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...