OpenStack Keystone 认证服务完整学习指南
OpenStack管理摘要本文全面介绍了OpenStack认证管理服务Keystone的核心概念与实践操作。首先详细解析了Keystone的八大基本概念Domain、User、Group、Project、Role、Service、Endpoint、Token、Credential及其相互关系然后通过命令行实操演示了域管理、用户管理、组管理、项目创建与配额设置等关键操作。接着深入剖析了Keystone的三大核心功能用户权限管理、服务端点维护、认证与鉴权并详细解释了User、Credentials、Authentication、Token、Project、Service、Endpoint、Role等核心概念的工作机制。最后通过查询可用image的实际操作示例完整展示了OpenStack内部认证流程包括登录验证、Token获取、服务端点访问和权限验证等关键步骤帮助读者建立对Keystone认证体系的系统性理解。OpenStack认证管理-KeystoneKeystone基本概念Domain域Keystone中一个虚拟概念一个域是一组User Group或Project的容器User用户是可以通过Keystone访问OpenStack服务的个人、系统或某个服务Group用户组是一组User的容器可以向Group中添加用户并直接给Group分配角色Project项目是各个服务中一些可以访问的资源集合项目只需在某个域下唯一即可Role角色具有一组定义的用户权限和特权以执行一组特定操作角色不同被赋予的权限不同Service服务一种OpenStack服务服务会对外暴露一个或多个端点用户可以通过这些端点访问资源并执行操作Endpoint端点是指一个可以用来访问某个具体服务的网络地址Token令牌是允许访问特定资源的凭证Credential凭证确认用户身份的数据如用户的用户名和密码•Domain一个域可以对应一个大的机构、一个数据中心并且必须全局唯一。云的终端用户可以在自己的Domain中创建多个Project、User、Group和Role。具备对多个Project进行统一管理的能力。•UserKeystone会通过认证信息Credential如密码等验证用户请求的合法性通过验证的用户将会分配到一个特定的令牌该令牌可以被当作后续资源访问的一个通行证并非全局唯一只需要在域内唯一即可。•Group用户组是一组User的容器可以向Group中添加用户并直接给Group分配角色在这个Group中的所有用户就拥有了Group所拥有的角色权限。通过引入Group的概念Keystone实现了对用户组的管理达到了同时管理一组用户权限的目的。•Project项目是各个服务中的一些可以访问的资源集合。我们需要在创建虚拟机时指定某个项目在Cinder创建卷时也需要指定具体的项目。用户总是被默认绑定到某些项目上在用户访问项目的资源前必须具有对该项目的访问权限或者说在特定项目下被赋予了特定的角色。项目不必全局唯一只需要在某个域下唯一即可。在OpenStack的界面和文档中Tenant/Project/Account这几个术语是通用的但长期看会倾向使用Project公有云叫租户•Role一个用户所具有的角色角色不同意味着被赋予的权限不同只有知道用户被赋予的角色才能知道该用户是否有权限访问某资源。用户可以被赋予一个域或项目内的角色。一个用户被赋予域的角色意味着他对域内所有的项目都具有相同的角色而特定项目的角色只具有对特定项目的访问权限。角色可以被继承在一个项目树下拥有父项目的访问权限也意味着同时拥有对子项目的访问权限。角色必须全局唯一。查看domain[rootcontroller ~]# source keystonerc_admin[rootcontroller ~(keystone_admin)]# openstack domain list------------------------------------------------------------------------|ID|Name|Enabled|Description|------------------------------------------------------------------------|2c99588e109d427abb530cbb9aada74a|heat|True|||default|Default|True|The default domain|------------------------------------------------------------------------创建domain:# 创建新的domain叫domain-test[rootcontroller ~(keystone_admin)]# openstack domain create domain-test-----------------------------------------------|Field|Value|-----------------------------------------------|description|||enabled|True||id|c70009318d0141c7a84b26ff427ff9d6||name|domain-test||options|{}||tags|[]|-----------------------------------------------#再次验证确实多了一个domain-test[rootcontroller ~(keystone_admin)]# openstack domain list----------------------------------------------------------------------------|ID|Name|Enabled|Description|----------------------------------------------------------------------------|2c99588e109d427abb530cbb9aada74a|heat|True|||c70009318d0141c7a84b26ff427ff9d6|domain-test|True|||default|Default|True|The default domain|----------------------------------------------------------------------------[rootcontroller ~(keystone_admin)]#删除domain:[rootcontroller ~(keystone_admin)]# openstack domain set --disable domain-test #设置domain禁用[rootcontroller ~(keystone_admin)]# openstack domain delete domain-test[rootcontroller ~(keystone_admin)]# openstack domain list------------------------------------------------------------------------|ID|Name|Enabled|Description|------------------------------------------------------------------------|2c99588e109d427abb530cbb9aada74a|heat|True|||default|Default|True|The default domain|------------------------------------------------------------------------开启多域登录界面[rootcontroller ~(keystone_admin)]# cd /etc/openstack-dashboard/[rootcontroller openstack-dashboard(keystone_admin)]# lscinder_policy.json glance_policy.json keystone_policy.json local_settings local_settings.d neutron_policy.json nova_policy.d nova_policy.json[rootcontroller openstack-dashboard(keystone_admin)]# vim local_settings#修改配置文件83行如下开启keystone支持多域83OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORTTrue[rootcontroller openstack-dashboard(keystone_admin)]# systemctl restart httpd测试多域登录效果列出所有用户[rootcontroller ~(keystone_admin)]# openstack user list----------------------------------------------|ID|Name|----------------------------------------------|7ef9147a8abe485889ece90dce340ab1|admin||8624a4e61d6c4b589814c369af26cb5f|heat_admin||8770fb183087426eb29543f3d629b66f|glance||c3eba4bb5577404285b333e4de5c1909|cinder||c286b069d5064a2b8050b3438f31ef7f|nova||66fbd238901143d1a2b9e1e848117aff|placement||7e1d63925490464c897f75275c7364e6|neutron||1dd2bd1d566a4f4091e99441bb1da9b5|swift||9368227a55f44dba85e10bc7c696813c|heat||be5dc0149ba4402db25045a17a3d7a59|heat-cfn||e1ddffa452504776bc845f6f4114cd14|gnocchi||fda949b4ff944336bb3206d6f7e6bc4c|ceilometer||10286ba1e9974e6994fe9908ab0db617|aodh|----------------------------------------------创建新用户user1#创建用户user1密码HUAWEI[rootcontroller ~(keystone_admin)]# openstack user create --password HUAWEI user1-------------------------------------------------------|Field|Value|-------------------------------------------------------|domain_id|default||enabled|True||id|77ae3f5b216749ef8663c3bdb5679d36||name|user1||options|{}||password_expires_at|None|-------------------------------------------------------#查看用户列表有没有新创建的用户user1user1在最下面[rootcontroller ~(keystone_admin)]# openstack user list----------------------------------------------|ID|Name|----------------------------------------------|7ef9147a8abe485889ece90dce340ab1|admin||8624a4e61d6c4b589814c369af26cb5f|heat_admin||8770fb183087426eb29543f3d629b66f|glance||c3eba4bb5577404285b333e4de5c1909|cinder||c286b069d5064a2b8050b3438f31ef7f|nova||66fbd238901143d1a2b9e1e848117aff|placement||7e1d63925490464c897f75275c7364e6|neutron||1dd2bd1d566a4f4091e99441bb1da9b5|swift||9368227a55f44dba85e10bc7c696813c|heat||be5dc0149ba4402db25045a17a3d7a59|heat-cfn||e1ddffa452504776bc845f6f4114cd14|gnocchi||fda949b4ff944336bb3206d6f7e6bc4c|ceilometer||10286ba1e9974e6994fe9908ab0db617|aodh||77ae3f5b216749ef8663c3bdb5679d36|user1|----------------------------------------------#查看user1用户详细信息[rootcontroller ~(keystone_admin)]# openstack user show user1-------------------------------------------------------|Field|Value|-------------------------------------------------------|domain_id|default||enabled|True||id|77ae3f5b216749ef8663c3bdb5679d36||name|user1||options|{}||password_expires_at|None|-------------------------------------------------------创建组group1并将user1加入group1#创建组group1[rootcontroller ~(keystone_admin)]# openstack group create group1-----------------------------------------------|Field|Value|-----------------------------------------------|description|||domain_id|default||id|f259902c4c0242d3b392d951494e747f||name|group1|-----------------------------------------------#列出所有的组[rootcontroller ~(keystone_admin)]# openstack group list------------------------------------------|ID|Name|------------------------------------------|f259902c4c0242d3b392d951494e747f|group1|------------------------------------------#查看group1组详细信息[rootcontroller ~(keystone_admin)]# openstack group show group1-----------------------------------------------|Field|Value|-----------------------------------------------|description|||domain_id|default||id|f259902c4c0242d3b392d951494e747f||name|group1|-----------------------------------------------#将user1加入group1[rootcontroller ~(keystone_admin)]# openstack group add user group1 user1#查看user1是否隶属于group1[rootcontroller ~(keystone_admin)]# openstack group contains user group1 user1user1ingroup group1查看角色role[rootcontroller ~(keystone_admin)]# openstack role list----------------------------------------------------|ID|Name|----------------------------------------------------|030b4ca553dc41349168eaca4fd43f42|ResellerAdmin||461321ea6a284081b692a469a15d7938|SwiftOperator||4ef39ef24f694c9aa6c1101622da0e92|admin||8b24d8bef4004573a8f3cb1f5a1517a8|_member_||973e0706bc66471a90d09f177bfb6a1d|member||a3af83fe8bf84014b01feae786f83b8b|heat_stack_owner||ce4a3e671d9040359d6f6f55555bf429|reader||e9cd36ba1b8744878cc15a05709ab1fd|heat_stack_user|----------------------------------------------------给group1赋予角色admin[rootcontroller ~(keystone_admin)]# openstack role add --project admin --group group1 admin验证group1角色[rootcontroller ~(keystone_admin)]# openstack role assignment list --names --group group1-----------------------------------------------------------------------|Role|User|Group|Project|Domain|System|Inherited|-----------------------------------------------------------------------|admin||group1Default|adminDefault|||False|-----------------------------------------------------------------------创建ProjectA:#创建项目ProjectA[rootcontroller ~(keystone_admin)]# openstack project create ProjectA-----------------------------------------------|Field|Value|-----------------------------------------------|description|||domain_id|default||enabled|True||id|a6aa11ee311a46889ac34e49b8da47d1||is_domain|False||name|ProjectA||options|{}||parent_id|default||tags|[]|-----------------------------------------------#查看验证命令[rootcontroller ~(keystone_admin)]# openstack project list[rootcontroller ~(keystone_admin)]# openstack project show projectA#ProjeectA分配给用户user1[rootcontroller ~(keystone_admin)]# openstack user set --project ProjectA user1#给项目ProjectA里的用户user1赋予角色admin[rootcontroller ~(keystone_admin)]# openstack role add --user user1 --project ProjectA admin查看ProjectA现象思考同样的 方式创建一个项目ProjectB,分配给用户user2角色admin创建一个用户user3,在项目ProjectA中的角色为member修改ProjectA配额#将Project配额设置为实例3vcpu 5,内存5000MB[rootcontroller ~(keystone_admin)]# openstack quota set --instance 3 --cores 5 --ram 5000 ProjectA修改配额实验现象使用user1登录切换到ProjectA查看OpenStack有哪些服务:[rootcontroller ~(keystone_admin)]# openstack service list--------------------------------------------------------------|ID|Name|Type|--------------------------------------------------------------|006d8f9e6a054e238a1093fe5af715bf|swift|object-store||1abf3641147f40368f8d1c7e8b5677e1|heat|orchestration||2e6919aa53eb48cb99bc992b506a0e3e|glance|image||5dfb29073cf140199cc78b2d84fac299|keystone|identity||5ed901220a18430f8d423f9a95d43477|ceilometer|metering||8ec4ba00f67448ad8acedc744dce2d87|heat-cfn|cloudformation||9a6c3edee4ba431db7d1cac840b91dcb|neutron|network||a747c0c45e544fa9b20538474ac579d1|nova|compute||c4e445f741a943ff897eb494cca6df6e|cinderv2|volumev2||d06744c3ad6343988bb0ab60b291ffeb|placement|placement||db9e425f65ac4808ab62dc1659f58916|cinderv3|volumev3||e11ec9b570254141bdac2ff3ec75179d|aodh|alarming||e3a0ba8fe0f844249bfa3a90ec6a6fea|gnocchi|metric|--------------------------------------------------------------查看OpenStack endpoint:三个入口admin\public\internal查看catalog:理解Keystone核心概念作为 OpenStack 的基础支持服务Keystone 做下面这几件事情管理用户及其权限维护 OpenStack Services 的 EndpointAuthentication认证和 Authorization鉴权学习 Keystone得理解下面这些概念UserUser 指代任何使用 OpenStack 的实体可以是真正的用户其他系统或者服务。当 User 请求访问 OpenStack 时Keystone 会对其进行验证。Horizon 在身份管理用户 管理 User除了 adminOpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User。 admin 也可以管理这些 User。CredentialsCredentials 是 User 用来证明自己身份的信息可以是用户名/密码TokenAPI Key其他高级方式AuthenticationAuthentication 是 Keystone 验证 User 身份的过程。User 访问 OpenStack 时向 Keystone 提交用户名和密码形式的 CredentialsKeystone 验证通过后会给 User 签发一个 Token 作为后续访问的 Credential。TokenToken 是由数字和字母组成的字符串User 成功 Authentication 后 Keystone 生成 Token 并分配给 User。Token 用做访问 Service 的 CredentialService 会通过 Keystone 验证 Token 的有效性Token 的有效期默认是 24 小时ProjectProject 用于将 OpenStack 的资源计算、存储和网络进行分组和隔离。根据 OpenStack 服务的对象不同Project 可以是一个客户公有云也叫租户、部门或者项目组私有云。这里请注意资源的所有权是属于 Project 的而不是 User。在 OpenStack 的界面和文档中Tenant / Project / Account 这几个术语是通用的但长期看会倾向使用 Project每个 User包括 admin必须挂在 Project 里才能访问该 Project 的资源。 一个User可以属于多个 Project。admin 相当于 root 用户具有最高权限Horizon 在 身份管理项目 中管理 Project通过 管理成员将 User 添加到 ProjectServiceOpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每个 Service 都会提供若干个 EndpointUser 通过 Endpoint 访问资源和执行操作。EndpointEndpoint 是一个网络上可访问的地址通常是一个 URL。Service 通过 Endpoint 暴露自己的 API。 Keystone 负责管理和维护每个 Service 的 Endpoint。可以使用下面的命令来查看 Endpoint。[rootcontroller ~(keystone_admin)]# openstack endpoint list[rootcontroller ~(keystone_admin)]# openstack catalog listRole安全包含两部分Authentication认证和 Authorization鉴权Authentication 解决的是“你是谁”的问题Authorization 解决的是“你能干什么”的问题Keystone 借助 Role 实现 AuthorizationKeystone定义Role可以为 User 分配一个或多个 RoleHorizon 的菜单为 Identity-Project-Manage MembersService 决定每个 Role 能做什么事情 Service 通过各自的 policy.json 文件对 Role 进行访问控制。 下面是 Nova 服务 /etc/nova/policy.json 中的示例访问策略规则以JSON格式指定文件名为policy.json策略文件的路径是/etc/SERVICE_NAME/policy.json例如/etc/keystone/policy.jsonpackstack安装策略文件路径是/etc/openstack-dashboard/SERVICE_NAME_policy.jsonOpenStack 默认配置只区分 admin 和非 admin Role。 如果需要对特定的 Role 进行授权可以修改 policy.json(一般不要改)。下一节我们将通过例子加深对这些概念的理解。通过例子学习keystone上一节介绍了 Keystone 的核心概念。本节我们通过“查询可用 image”这个实际操作让大家对这些概念建立更加感性的认识。User admin 要查看 Project 中的 image第 1 步 登录当点击登入时OpenStack 内部发生了哪些事情请看下面Token 中包含了 User 的 Role 信息第 2 步 显示操作界面请注意顶部显示 admin 可访问的 Project 为 “admin” ”。 其实在此之前发生了一些事情同时admin 可以访问 实例, 镜像 卷等服务这是因为 admin 已经从 Keystone 拿到了各 Service 的 Endpoints第 3 步 显示 镜像 列表点击 “镜像”会显示镜像列表背后发生了这些事首先 admin 将请求发送到 Glance 的 EndpointGlance 向 Keystone 询问 admin 身份是否有效接下来 Glance 会查看 /etc/glance/policy.json 判断 admin 是否有查看 image 的权限权限判定通过Glance 将 image 列表发给 admin。TroubleshootOpenStack 排查问题的方法主要是通过日志。每个 Service 都有自己的日志文件。Keystone 主要有一个日志 keystone.log 保存在 /var/log/keystone/ 目录里。[rootcontroller nova(keystone_admin)]# cd /var/log/keystone/[rootcontroller keystone(keystone_admin)]# lskeystone.log如果需要得到最详细的日志信息可以在 /etc/keystone/keystone.conf 中打开 debug 选项[rootcontroller keystone(keystone_admin)]# cd /etc/keystone/[rootcontroller keystone(keystone_admin)]# lsdefault_catalog.templates fernet-keys keystone.conf logging.conf policy.d policy.json puppet.conf sso_callback_template.html[rootcontroller keystone(keystone_admin)]# vim keystone.conf# 修改配置文件第94行94debugTrue•我们以创建VM为例站在整个OpenStack角度来看一下整个认证流程是怎样的。•首先用户需要使用OpenStack第一步就要向Keystone提供用户名密码来获取Token。当用户获取Token后需要向Nova发送创建虚拟机请求Nova负责调用计算资源并管理虚拟机的生命周期所以这个创建请求要发送到Nova。请求的Head中会携带Token当Nova-api接收到请求后会将Token传递到Keystone进行验证是否有效合法。当验证成功后返回信息给NovaNova才开始进行创建VM操作。这边不具体介绍Nova如何操作但是我们知道创建一台虚拟机不仅需要准备CPU、内存等计算资源还要有相应的网络、存储等资源这里以网络资源为例Nova-api将token透传给Nova-computeNova-compute会向Neutron-server发送与网络相关操作请求请求Head中也携带TokenNeutron收到请求后也会将Token传递到Keystone验证验证成功才执行相应操作。•这个流程中我们可以看到不同服务间的调用也要携带Token并且Keystone只校验了Token的有效性那么每个服务的操作权限控制是怎么实现的呢•首先用户发送基本信息给Keystone一般是用户名和密码。Keystone经过验证后会返回一个Token给用户用户向Nova发送创建虚拟机请求并携带Token信息nova接收到请求后会拿着Token去Keystone进行验证验证成功后开始执行创建VM操作Nova会向Glance发送申请镜像信息并携带Token会向Neutron发送申请网络信息也会携带TokenGlance和Neutron组件接收到请求后都会向Keystone验证Token的有效性图中仅用了一条线表示请注意理解验证通过即执行相应的操作返回完成信息当VM创建完成后Nova返回创建成功信息给用户用户即可使用虚拟机。

相关新闻

哈夫曼树与编码:数据结构中的贪心算法与文件压缩核心

哈夫曼树与编码:数据结构中的贪心算法与文件压缩核心

1. 项目概述:从“最省”的树到“最省”的码如果你学过数据结构,大概率听过“哈夫曼树”这个名字,它常常和“最优二叉树”、“带权路径长度最短”这些听起来有点学术的词绑在一起。我第一次接触它的时候,也觉得这玩意儿是不是只在考…

2026/8/3 5:05:44 阅读更多 →
防火墙策略路由

防火墙策略路由

需求分析一、整体组网架构内网分为两大业务网段:财务部、研发部防火墙双线互联网出口:电信链路 联通链路内网区域:Trust 安全区域;互联网:Untrust 安全区域配套能力:链路冗余检测、策略路由流量分流、源 N…

2026/8/2 2:43:31 阅读更多 →
2026 年 8 月北京别墅装修公司重磅推荐|甄选专业靠谱高端家装服务商

2026 年 8 月北京别墅装修公司重磅推荐|甄选专业靠谱高端家装服务商

在北京选购别墅之后,装修是至关重要的环节,独栋别墅、联排、叠拼产品空间构造复杂,包含地下室、挑空客厅、户外庭院等特殊空间,装修难度远远高于普通商品房。不少初次装修别墅的业主并不清楚其中的细节难点,简单按照平…

2026/8/3 5:04:41 阅读更多 →

最新新闻

离线环境PyTorch CPU到GPU迁移:版本匹配、依赖下载与安装验证全指南

离线环境PyTorch CPU到GPU迁移:版本匹配、依赖下载与安装验证全指南

1. 从CPU到GPU:一次彻底的PyTorch环境迁移最近在帮一个朋友处理他的深度学习项目,他之前一直用CPU版本的PyTorch跑模型,训练一个简单的图像分类任务都要等上大半天。项目临近交付,时间紧迫,他终于下定决心要把环境切换…

2026/8/3 5:05:28 阅读更多 →
基于Immich与NAS构建个人媒体中心:从数据聚合到AI智能管理

基于Immich与NAS构建个人媒体中心:从数据聚合到AI智能管理

1. 项目概述:从“媒体”到“个人媒体中心”的认知跃迁“媒体”这个词,听起来既宏大又遥远。它可能是你每天刷的短视频平台,是新闻客户端推送的头条,是朋友圈里转发的文章,也是你手机里存着的几百张照片和几十个G的视频…

2026/8/3 5:05:28 阅读更多 →
Grove传感器模块化开发指南:从原理到物联网应用实践

Grove传感器模块化开发指南:从原理到物联网应用实践

1. 项目概述:当“传感器”遇见“Grove”如果你正在捣鼓一个物联网项目,或者想给家里的盆栽、鱼缸、宠物窝加点智能监控,那么“传感器”这个词对你来说一定不陌生。温度、湿度、光照、声音、距离……这些物理世界的信号,都需要通过…

2026/8/3 5:05:28 阅读更多 →
语音转文字工具实战指南:从环境部署到工作流集成

语音转文字工具实战指南:从环境部署到工作流集成

这类工具最值得先看的不是功能列表,而是能不能在普通环境里稳定跑起来,以及它到底解决了录音、转录、辅助写作中的哪一个核心痛点。标题“可自录 可辅助 一直在”听起来像是一个集成了本地录音、实时转写和内容辅助生成功能的工具或应用。它可能面向需要…

2026/8/3 5:05:28 阅读更多 →
Orca安装指南:用Pandas语法处理分布式大数据

Orca安装指南:用Pandas语法处理分布式大数据

1. 从“orca”说起:它到底是什么,以及为什么值得你花时间 最近在技术社区和开源项目里,“orca”这个词的热度又起来了。很多朋友在讨论它的安装和使用,但如果你去搜,可能会发现不止一个叫“orca”的东西。这很正常&am…

2026/8/3 5:05:28 阅读更多 →
AI时代工程师的核心竞争力:写作式思考与结构化表达

AI时代工程师的核心竞争力:写作式思考与结构化表达

你有没有过这样的经历:面对一个复杂的技术问题,脑子里想法很多,但一打开文档或编辑器,却感觉思绪混乱,不知从何下笔?或者,在团队讨论时,明明心里有清晰的逻辑,但说出来却…

2026/8/3 5:04:27 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →