2026年1月

Triton 是一种用于并行编程的语言和编译器。它旨在提供一个基于 Python 的编程环境,以高效编写自定义 DNN 计算内核,并能够在现代 GPU 硬件上以最大吞吐量运行。

更多 Triton 中文文档可访问 →http://triton.hyper.ai/

*在线运行 Triton 学习教程

链接是:https://hyper.ai/notebooks/35867?utm_source=Distribute&utm_me...

triton.language.swizzle2d(i, j, size_i, size_j, size_g)

将行主序的 size_i size_j 矩阵的索引转换为每组 size_g* 行的列主序矩阵的索引。

例如, 对 size_i = size_j = 4 和 size_g = 2,它将转换

 [[0 , 1 , 2 , 3 ],
 [4 , 5 , 6 , 7 ],
 [8 , 9 , 10, 11],
 [12, 13, 14, 15]]

[[0, 2,  4 , 6 ],
 [1, 3,  5 , 7 ],
 [8, 10, 12, 14],
 [9, 11, 13, 15]]

随着人工智能从生成式 AI迈向智能体(AI Agent)\阶段,技术能力正在从“信息生成”跃迁为“任务执行”。这一转变并非表层的交互升级,而是对传统行业\工作流、组织结构与效率边界的系统性重构。

与以往 AI 工具不同,智能体不再依赖人类逐步指令,而是能够在目标约束下完成感知—规划—执行—反馈的完整闭环,因此对传统行业的冲击呈现出不均匀扩散的特征。


一、核心定义:什么是智能体(AI Agent)?

在工程与应用层面,智能体(AI Agent)可被定义为:

一种由大语言模型驱动,具备目标拆解能力、长期记忆能力、工具调用能力,并可在有限监督下完成多步骤任务的自治系统。

其核心能力通常由四个模块构成:

  • 规划(Planning)

将抽象目标拆解为可执行的任务序列,并在执行中动态修正路径。

  • 记忆(Memory)

同时具备短期上下文记忆与长期经验记忆(通常由向量数据库承载)。

  • 工具调用(Tool Use)

能直接操作外部系统,如 API、数据库、企业软件与自动化脚本。

  • 自主性(Autonomy)

在目标设定后,独立完成跨系统、多步骤的业务闭环。

关键差异点在于: 智能体不是“更聪明的聊天机器人”,而是可嵌入业务系统的执行单元


二、冲击前哨:智能体最先重构的三类传统行业

从落地节奏来看,智能体并非平均冲击所有行业,而是优先渗透到高度数字化、流程闭环明确、规则可编码的领域。

1. 金融服务业:从“人审流程”到“自治合规单元”

金融行业具备三大天然优势:

  • 数据高度结构化
  • 合规规则明确
  • 决策逻辑可形式化

智能体带来的实质变化包括:

  • 自动跨系统核对交易、账户与流水
  • 实时生成风控与合规评估结果
  • 在异常触发时自动升级或冻结流程

在投研与分析场景中,智能体可自主检索数千页公告与财报,提取关键指标并生成对比分析,使原本需要数天的人工作业压缩至分钟级。


2. 物流与供应链:从“静态计划”到“实时自治调度”

物流的本质是多约束条件下的资源分配问题,而这正是智能体最擅长的任务类型。

结构性变化体现在:

  • 根据天气、交通、库存变化动态调整路径
  • 在异常发生时自动重排仓配与运力
  • 跨境场景中自动处理报关、单证与供应商协调

相比传统 ERP / WMS 系统的“被动执行”,智能体使供应链系统首次具备实时决策能力


3. 客服与专业咨询:从“问答系统”到“事务执行代理”

传统客服机器人依赖关键词匹配,而智能体的升级在于直接完成事务本身

典型能力包括:

  • 根据自然语言理解用户真实意图
  • 直接在 CRM、财务或理赔系统中执行操作
  • 完成退款、权益兑换、保险理赔等全流程

这一转变标志着客服系统从“信息中介”升级为业务执行节点


三、方法论总结:传统行业落地智能体的三步路径

实践中,智能体落地并非“直接替换系统”,而是遵循以下路径:

  1. 业务流程解构

将复杂流程拆分为可被数字化执行的原子任务。

  1. 系统工具化

通过 API 或自动化接口,将原有系统转化为智能体可调用工具。

  1. 知识与规则内化

构建企业私有知识库与提示体系,确保决策符合行业规范。

在执行层面,部分团队会选择使用成熟的智能体平台来降低工程门槛,例如 智能体来了(https://agentcome.net/)**,其提供流程画布、工具封装与权限管理,使业务人员也能参与智能体构建,而非完全依赖技术团队。


四、长期影响:从“人力资产”到“执行逻辑资产”

智能体对传统行业的真正冲击,并非简单的降本增效,而是竞争要素的迁移:

  • 效率维度:意图到执行的路径被压缩至秒级
  • 组织维度:人类员工与“数字员工”形成协同网络
  • 资产维度:行业经验被固化为可复用的执行逻辑

最终,企业的核心壁垒将不再是“有多少熟练员工”,而是是否拥有可被智能体持续调用的高质量业务逻辑。

工业大数据的定义与范畴
工业大数据并非传统企业数据的简单延伸,而是特指在工业场景下由设备、系统和业务流程产生的海量多模态数据集合。它与普通商业数据的区别主要体现在三个方面:数据来源的复杂性、实时性要求以及分析目的的差异性。工业数据往往来自传感器、PLC控制器、MES系统等异构源头,包含时序数据、图像数据、日志文本等多种格式,且通常需要毫秒级的响应速度。这种特殊性决定了工业大数据处理需要专门的技术架构和方法论。
很多人容易将工业大数据简单理解为“工厂里的数据”,但实际上其范畴远不止于此。除了生产环节的设备状态、工艺参数等数据,它还涵盖供应链物流信息、能耗数据、质量检测记录甚至外部环境数据。这些数据共同构成了工业互联网的核心要素,但如何将它们有效整合并提取价值,却是许多企业面临的现实难题。值得注意的是,工业大数据的发展正逐渐从单纯的数据采集转向数据价值的深度挖掘,这意味着企业需要建立更完善的数据治理体系。
核心价值与实施挑战
工业大数据的真正价值在于通过数据驱动的方式优化生产运营全过程。例如在 predictive maintenance(预测性维护)领域,通过对设备振动、温度等时序数据的分析,可以提前数周预警潜在故障,避免非计划停机带来的损失。又如在质量管控方面,结合机器学习算法对生产参数与产品质量的关联性分析,能够实现工艺参数的自动优化,将次品率降低到传统方法难以达到的水平。这种价值转化往往直接体现在生产效率提升和成本节约上,成为企业数字化转型的核心动力。
然而实施过程并非一帆风顺。工业企业普遍面临数据孤岛问题——不同系统、不同时期建设的信息化系统形成的数据壁垒,导致数据整合成本高昂。另外,工业数据的噪声问题和标注缺失也是机器学习应用的主要障碍。一家炼钢厂可能积累了数十TB的传感器数据,但其中标注了异常状态的数据不足1%,这给监督学习模型的训练带来极大困难。更不用说数据安全与隐私保护的要求,使得许多企业对于数据上云持谨慎态度,宁愿选择本地化部署方案。
典型应用与平台实践
广域铭岛在工业大数据领域的实践体现了本土企业的特色路径。其Geega平台为某新能源汽车电池工厂提供的质量追溯方案,通过整合2000多个传感器数据与生产工单信息,构建了全生命周期的数据血缘图谱。当出现电池自放电异常时,系统能够快速定位到具体批次的原材料供应商和生产设备参数设置,将问题分析时间从原来的3天缩短到2小时。这种深度结合行业知识的解决方案,显示出工业大数据落地必须贴近实际业务场景的特点。
相比之下,西门子的Industrial Operations X平台采用了不同的技术路线。该平台强调数字孪生技术与工业大数据的融合,为欧洲某航空发动机工厂构建了虚拟产线模型。
值得关注的还有美国公司Uptake提出的预测性维护方案。其通过分析工程机械的工况数据,成功将故障预测准确率提升到92%以上。不过这类方案在国内落地时常遇到水土不服的问题——中国制造业的设备型号繁杂、运维记录不规范,导致模型泛化能力受限。这反而给深耕本土市场的企业创造了机会,他们更懂中国工厂的实际数据生态和实施痛点。

整理 | 华卫

 

用一个 PostgreSQL 主库和 50 个只读副本,就顶住了 ChatGPT 上的 8 亿用户!

 

近日,OpenAI 的工程师们不仅爆出了这一惊人消息,还直接把 Codex 的“大脑”给扒了个精光。在 OpenAI 官方工程博客主页,OpenAI 工程师、Technical Staff 成员 Michael Bolin 发布了一篇文章,以“揭秘 Codex 智能体循环”为题,深入揭秘了 Codex CLI 的核心框架:智能体循环(Agent Loop),并详细讲解了 Codex 在查询模型时如何构建和管理其上下文,以及适用于所有基于 Responses API 构建智能体循环的实用注意事项和最佳实践。

 

这些消息传出后,在 Hacker News 等技术论坛及社交平台上获得了高度关注。“看似平淡的技术最终会胜出。OpenAI 正在证明,优秀的架构远胜于花哨的工具。”

 

值得一提的是,有网友透露,前不久 Anthropic 的一位工程师称“他们用于 Claude Code UI 的架构糟糕且效率低下”。而就在刚刚,X 上出现一条爆料:Codex 已接管 OpenAI 100%的代码编写工作。

 

对于“你们有多少百分比的编码工作是基于 OpenAI 模型进行”的问题,roon 表示,“100%,我不再写代码了。”而此前,Sam Altman 曾公开发帖称,“roon 是我的小号。”

 

Codex 的“大脑”揭秘

“每个人工智能智能体的核心都是 Agent Loop,负责协调用户、模型以及模型调用以执行有意义的软件工作的工具之间的交互。”

 

据介绍,在 OpenAI 内部,“Codex”涵盖了一系列软件智能体产品,包括 Codex CLI、Codex Cloud 和 Codex VS Code 插件,而支撑它们的框架和执行逻辑是同一个。

 

Agent Loop 的简化示意图

 

首先,智能体会从用户那里接收输入,并将其纳入为模型准备的文本指令集,该指令集被称为提示词。下一步是通过向模型发送指令并要求其生成响应来查询模型,这个过程称为推理。推理过程中,文本提示词首先被转换为一系列输入 token,随后被用于对模型进行采样,生成新的输出 token 序列。输出 token 会被还原为文本,成为模型的回复。由于 token 是逐步生成的,该还原过程可与模型的运行同步进行,这也是众多基于大语言模型的应用支持流式输出的原因。实际应用中,推理功能通常封装在文本 API 后方,从而抽象化词元化的细节。

 

推理步骤完成后,模型会产生两种结果:(1)针对用户的原始输入生成最终回复;(2)要求智能体执行某项工具调用操作。若为第二种情况,智能体将执行该工具调用并将工具输出结果附加至原始提示词中。该输出结果会被用于生成新的输入内容,再次对模型进行查询;智能体随后会结合这些新信息,重新尝试完成任务。这一过程会不断重复,直至模型停止发出工具调用指令,转而生成面向用户的消息(在 OpenAI 的模型中,该消息被称为助手消息)。多数情况下,这条消息会直接解答用户的原始请求,也可能是向用户提出的跟进问题。

 

由于智能体可执行能对本地环境进行修改的工具调用,其 “输出” 并不仅限于助手消息。在很多场景下,软件智能体的核心输出是在用户设备上编写或编辑的代码。但无论何种情况,每一轮交互最终都会以一条助手消息收尾,该消息是智能体循环进入终止状态的信号。从智能体的角度来看,其任务已完成,操作控制权将交还给用户。

 

多轮智能体循环

 

这意味着,对话内容越丰富,用于模型采样的提示词长度也会随之增加。而所有模型都存在上下文窗口限制,即其单次推理调用可处理的 token 最大数量,智能体可能在单次对话轮次中发起数百次工具调用,这有可能耗尽上下文窗口的容量。因此,上下文窗口管理是智能体的多项职责之一。

这套智能体循环如何运行?

据介绍,Codex 正是借助响应 API 来驱动这套智能体循环的,博文曝出许多背后的实际运行细节,包括:

  • Codex 不会把用户的话直接给大模型用,而是会主动“拼接”出一整套精心设计的提示词结构,且涵盖多个角色的指令、用户输入的一句话在结尾才出现。

  • 模型推理与工具调用之间可能会进行多轮迭代,提示词的内容会持续增加。

构建初始提示词

作为终端用户,在调用响应 API 时无需逐字指定用于模型采样的提示词,只需在查询中指定各类输入类型,由响应 API 服务器决定如何将这些信息组织为模型可处理的提示词格式。在初始提示词中,列表中的每个条目均关联一个角色。该角色决定了对应内容的权重占比,优先级从高到低分为以下几类:系统、开发者、用户、助手。

 

响应 API 接收包含多个参数的 JSON 负载,其中三个核心参数有:

  • 指令:插入模型上下文的系统(或开发者)消息

  • 工具:模型生成回复过程中可调用的工具列表

  • 输入:向模型传入的文本、图片或文件输入列表

 

在 Codex 中,若已配置,指令字段的内容会从~/.codex/config.toml 配置文件中的模型指令文件读取;若未配置,则使用与该模型关联的基础指令。模型专属指令存储在 Codex 代码仓库中,并被打包至命令行工具中。工具字段为符合响应 API 定义的模式的工具定义列表。对于 Codex 而言,该列表包含三部分工具:Codex 命令行工具自带的工具、响应 API 提供且开放给 Codex 使用的工具,以及通常由用户通过 MCP 服务器提供的自定义工具。JSON 负载的输入字段为一个条目列表。在添加用户消息前,Codex 会先向该输入中插入以下条目:

 

1. 一条角色为开发者(role=developer)的消息,用于描述仅适用于工具部分中定义的 Codex 内置 Shell 工具的沙箱环境。也就是说,其他工具(如由 MCP 服务器提供的工具)并不受 Codex 的沙箱限制,需自行负责实施自身的防护规则。该消息基于模板构建,核心内容均来自打包在 Codex 命令行工具中的 Markdown 代码片段。

2.一条角色为开发者的消息,其内容为从用户的 config.toml 配置文件中读取的 developer_instructions 配置值。

3.一条角色为用户的消息,其内容为用户指令;该内容并非来源于单个文件,而是从多个数据源聚合而来。一般而言,表述越具体的指令,排序越靠后:

  • 加载 $CODEX_HOME 目录下 AGENTS.override.md 和 AGENTS.md 文件的内容

  • 在默认 32 千字节的大小限制内,从当前工作目录对应的 Git / 项目根目录(若存在)向上遍历至当前工作目录本身,加载任意 AGENTS.override.md、AGENTS.md 文件的内容,或加载 config.toml 配置文件中 project_doc_fallback_filenames 参数指定的任意文件内容

  • 若已配置相关技能,则补充以下内容:关于技能的简短引言、各技能对应的技能元数据、技能使用方法说明章节。

4. 一条角色为用户的消息,用于描述智能体当前的运行本地环境,其中会明确当前工作目录及用户所使用的终端 Shell 信息。

 

当 Codex 完成上述所有计算并完成输入初始化后,会追加用户消息以启动对话。需注意的是,输入中的每一个元素都是一个 JSON 对象,包含类型、角色和内容三个字段。当 Codex 构建好要发送至响应 API 的完整 JSON 负载后,会根据~/.codex/config.toml 中响应 API 端点的配置方式,携带授权请求头发起 HTTP POST 请求(若有指定,还会添加额外的 HTTP 请求头和查询参数)。当 OpenAI 响应 API 服务器接收到该请求后,会使用 JSON 数据来推导出模型的提示信息,(需要说明的是,Responses API 的自定义实现可能会采用不同的方法)。

 

可见,提示词中前三项的顺序由服务器决定,而非客户端。也就是说,这三项里仅系统消息的内容同样由服务器控制,工具与指令则均由客户端决定。紧随其后的是 JSON 负载中的输入内容,至此提示词拼接完成。

模型采样

提示词准备就绪后,模型才开始进行进行采样。

 

第一轮交互:此次向响应 API 发起的 HTTP 请求,将启动 Codex 中对话的第一轮交互。服务器会以服务器发送事件(SSE)流的形式进行响应,每个事件的数据均为一个 JSON 负载,其 type 字段以 response 开头。Codex 接收该事件流并将其重新发布为可供客户端调用的内部事件对象。`response.output_text.delta`这类事件用于为用户界面实现流式输出功能,而`response.output_item.added`等其他事件则会被转换为对象,附加至输入内容中,为后续的响应 API 调用所用。

 

若首次向响应 API 发起的请求返回两个`response.output_item.done`事件,一个类型为推理(reasoning),一个类型为函数调用(function_call),那么当结合工具调用的返回结果再次向模型发起查询时,这些事件必须在 JSON 的输入字段中进行体现。后续查询中用于模型采样的最终提示词结构如下:

 

需要特别注意的是,旧提示词是新提示词的完整前缀。这一设计是有意为之的,因为它能让用户借助提示词缓存提升后续请求的效率。

 

在 Codex 命令行工具中,会将助手消息展示给用户,并聚焦输入编辑区,以此提示用户轮到其继续对话。若用户做出回应,上一轮的助手消息以及用户的新消息均需附加至响应 API 请求的输入字段中,从而开启新一轮对话。同样,由于对话处于持续进行的状态,发送至响应 API 的输入内容长度也会不断增加。

 

弃用简单参数费力做优化,就为了用户隐私?

“在对话过程中,发送至响应 API 的 JSON 数据量,是否会让智能体循环的时间复杂度达到二次方级别?”答案是肯定的。

 

据悉,尽管响应 API 支持通过可选的 previous_response_id 参数缓解这一问题,但目前 Codex 并未启用该参数,主要是为了保证请求完全无状态,并兼容零数据保留(ZDR) 配置,即不存储用户对话数据。

 

取而代之的,是两套需投入大量研发精力、涉及复杂实施流程的技术策略。文中,OpenAI 详细介绍了这两项硬核优化的具体方案。

 

通常,模型采样的开销远高于网络传输的开销,采样环节会成为优化效率的核心目标,这也是提示词缓存至关重要的原因,它能复用前一次推理调用的计算结果。当缓存命中时,模型采样的时间复杂度将从二次方降至线性。OpenAI 相关的提示词缓存文档对这一机制有更详细的说明:仅当提示词存在完全匹配的前缀时,才有可能实现缓存命中。为充分发挥缓存的优势,需将指令、示例等静态内容置于提示词开头,而将用户专属信息等可变内容放在末尾。这一原则同样适用于图片和工具,且其内容在各次请求中必须保持完全一致。

 

基于这一原则,Codex 中可能有以下导致缓存未命中的操作:

  1. 在对话过程中修改模型可调用的工具列表;

  2. 更换响应 API 请求的目标模型(实际场景中,这会改变原始提示词中的第三项内容,因该部分包含模型专属指令);

  3. 修改沙箱配置、审批模式或当前工作目录。

 

因此,Codex 团队在为命令行工具开发新功能时,必须审慎考量,避免新功能破坏提示词缓存机制。例如,他们最初对 MCP 工具的支持曾出现一个漏洞:工具的枚举顺序无法保持一致,进而导致缓存未命中。需要注意的是,MCP 工具的处理难度尤为突出,因为 MCP 服务器可通过 notifications/tools/list_changed 通知,动态修改其提供的工具列表。若在长对话过程中响应该通知,极易引发高成本的缓存未命中问题。

 

在可能的情况下,针对对话过程中发生的配置变更,他们会通过在输入中追加新消息的方式体现变更,而非修改已有的早期消息:

  • 若沙箱配置或审批模式发生变更,我们会插入一条新的role=developer消息,格式与原始的条目保持一致;

  • 若当前工作目录发生变更,我们会插入一条新的role=user消息,格式与原始的条目保持一致。

 

据介绍,为保障性能,OpenAI 在实现缓存命中方面投入了大量精力。除此之外,他们还重点管理了一项核心资源:上下文窗口。

 

其规避上下文窗口耗尽的通用策略是:一旦词元数量超过某个阈值,就对对话进行压缩。具体来说,会用一个更精简、且能代表对话核心内容的新条目列表替代原有输入,让智能体在继续执行任务时仍能理解此前的对话过程。早期的压缩功能实现方案,需要用户手动调用/compact 命令,该命令会结合现有对话内容和自定义的摘要生成指令,向响应 API 发起查询;Codex 则会将返回的、包含对话摘要的助手消息,作为后续对话轮次的新输入。

 

此后,响应 API 不断迭代,新增了专用的/responses/compact 端点,能以更高效率完成压缩操作。该端点会返回一个条目列表,可替代原有输入继续对话,同时释放出更多的上下文窗口空间。该列表中包含一个特殊的 type=compaction 条目,其附带的 encrypted_content 加密字段为透明化设计,可保留模型对原始对话的潜在理解。

 

现在,当词元数量超过 auto_compact_limit 自动压缩阈值时,Codex 会自动调用该端点对对话内容进行压缩。

极限扩容:用 1 个数据库扛住了 8 亿用户

在另一篇技术博文中,OpenAI 工程师 Bohan Zhang 介绍, OpenAI 通过严苛的技术优化与扎实的工程实践,对单个数据库 PostgreSQL 进行深度扩容,实现以单套体系支撑 8 亿用户、每秒数百万次查询的访问需求。

 

据称,多年来,PostgreSQL 一直是支撑 ChatGPT、OpenAI API 等核心产品的核心底层数据系统之一。过去一年,公司 PostgreSQL 的负载增长超 10 倍,且这一增长趋势仍在持续加速。OpenAI 称,PostgreSQL 的横向扩展能力远超此前行业普遍认知,能够稳定支撑规模大得多的读密集型工作负载。“这套最初由加州大学伯克利分校的科学家团队研发的系统,助力我们通过单主节点 Azure PostgreSQL 弹性服务器实例,搭配分布在全球多个区域的近 50 个只读副本,承接了海量的全球访问流量。”

 

而且,OpenAI 表示,其扩容在实现规模提升的同时,始终将延迟控制与可靠性优化放在核心位置:生产环境中,客户端 99 分位延迟稳定保持在十几毫秒的低水平,服务可用性达到五个九标准;过去 12 个月内,PostgreSQL 仅出现过一次零级严重故障,该故障发生在 ChatGPT 图像生成功能爆红上线期间,一周内超 1 亿新用户注册导致写流量突发暴涨超 10 倍。

 

尽管 PostgreSQL 的扩容成果已达预期,OpenAI 仍在持续探索其性能极限。目前,他们已将可分片的写密集型业务负载迁移至 CosmosDB 等分片式数据库系统;对于分片难度更高的剩余写密集型负载,相关迁移工作也在积极推进,以此进一步减轻 PostgreSQL 主节点的写压力。同时,OpenAI 正与微软 Azure 团队展开合作,推动级联复制功能落地,实现只读副本的安全、大规模扩容。随着基础设施需求的持续增长,其将继续探索更多扩容方案,包括基于 PostgreSQL 的分片架构改造、引入其他分布式数据库系统等。

 

有网友评价道,“这招的高明之处,就在于极简。他们没用什么花里胡哨的冷门技术,不过是把最佳实践做到了极致。过去十年,行业里全是 ‘一切皆分片、拥抱 NoSQL、全面分布式,为 CAP 定理折腰’ 的论调,而 OpenAI 倒好, 服务十亿级用户的解法,居然只是一句‘试过加只读副本吗?’”

 

参考链接:

https://openai.com/index/unrolling-the-codex-agent-loop/

https://openai.com/index/scaling-postgresql/

有人了解过谷歌云与 cloudflare 带宽联盟的吗?

如果使用 cloudflare cdn ,源站是谷歌云云主机或对象存储,这个流量费用是免费的还是打折的?

研讨会回顾

日前,由Atlassian全球白金合作伙伴——上海龙智主办的《解锁服务管理新效能:Jira Service Management + AI 实战指南》网络研讨会圆满落幕。

研讨会上,龙智资深技术顾问张晓乐带来主题演讲,围绕服务管理的典型挑战、Jira Service Management(JSM)的核心能力、AI在服务支持中的实际应用、Cloud环境下的数据安全等展开探讨,并通过新员工入职流程的Demo演示,直观展示了JSM + AI如何显著提升服务效率。

以下为演讲实录,欢迎收藏阅读!


大家好,我是龙智的资深技术顾问张晓乐。本次研讨会聚焦 Jira Service Management + AI实战指南,旨在探索如何将 Atlassian 服务管理与人工智能相结合,为企业的现代服务管理带来新思路。希望能为大家带来实用启发。

服务管理面临的挑战

随着社会的进步及数字企业的兴起,全天候运作的服务和支援成为必然趋势,数字经济的蓬勃发展也使得远程协作模式逐渐成熟。这就要求支持服务时刻在线,满足客户随时可能产生的服务需求,而分散在各地的支持团队成员也需要无缝协作,来保障工作的顺畅进行。

但是服务管理领域的支持团队却面临着诸多挑战,例如:

  • 由于缺乏足够的历史经验和服务运营数据,团队难以精准把握运营状况,无法对服务方式及质量进行有效优化;
  • 服务台负荷过载,大量的服务请求让支持人员疲于应对,导致服务质量下降;
  • 处理客户问题的周期过长,不仅服务效率低下,还可能引发客户不满,影响企业口碑。

这些挑战相互交织,严重影响着服务管理支持团队的效能。

经过进一步的分析,我们发现导致这些问题的深层原因主要有:相互隔离的工具与团队、过时且杂乱的知识资产、效能不佳的人工智能没有给支持人员提供有效的信息和数据支撑;团队成员目标不一致、沟通效率低下,且复杂的解决方案增加了支持人员相互协作的难度,从而导致客户问题处理周期过长、服务台负荷过载,对服务质量也较难进行有效的优化。

Atlassian服务管理解决方案:Jira Service Management

为了有效解决这些问题,Atlassian推出了专业的服务管理解决方案——Jira Service Management(JSM),它是服务管理领域的有力工具,能为企业解决诸多难题。

那么 Jira Service Management(JSM)是如何运作、有哪些功能呢?

JSM的工作机制是:客户在服务台寻求帮助或提单,内部支持人员接收并处理这个工单,客户及支持人员可以在线沟通讨论相关问题,支持人员完成工单并反馈给客户后,客户可以提交对服务的满意度。

另外呢,由于客户分散在各地,常用的沟通工具和习惯都有所不同。为了提供更好的服务,JSM提供了多渠道一键提单、基于不同的业务需求自动assign/分类工单给特定支持团队、用SLA衡量服务质量、自动化服务,以及利用Assets实时透明地管理企业资产等功能。

接下来,我们逐步来看JSM是如何针对性解决服务管理中存在的问题的。

项目模板,轻松开启服务管理

为了更好地服务不同地区、不同领域的客户,降低企业的使用门槛,JSM提供了各类预置的服务模板,例如:HR服务、IT服务等,各模板里包括专用的请求类型、工作流、界面等,供大家开箱即用。另外,这些预置服务模板十分“全能”,能够针对不同团队的具体场景做到快速落地,一键创建,操作极为便捷。

统一入口,专属门户

JSM支持多渠道一键提单(例如通过聊天工具Slack/Teams,以及门户、Email,甚至在Confluence中都可以一键提单),不论客户通过何种渠道提交工单,都能在系统中统一呈现,避免了信息分散。

JSM还内嵌了知识库,支持客户自助搜索,以快速解决常见问题。另外JSM具有统一的帮助中心,还可以针对不同项目定制专属门户,用户可在帮助中心快捷查询所有项目,从而打破项目壁垒,让信息流通更顺畅。

会话式工单处理

支持人员在处理工单或与客户沟通时,JSM采用会话式工单处理方式,条理清晰,可看性更强。

知识驱动的服务

为了缩短服务的整体时间、提高服务响应速度,各企业都在提倡服务左移(即尽量让客户通过自助服务解决问题),而知识驱动是服务左移的基础,也是提升服务效能的关键。

JSM内置知识库,客户可在提单时自助搜索匹配相关信息,自行解决常见问题,从而显著减少工单数量,减轻支持团队的工作量,使支持团队将精力集中在更复杂的问题上,有效提升首次解决率与回应速度。

队列管理,高效分流

另外,为了实现服务资源的更优配置,优先聚焦关键服务事项,JSM提供了队列功能,可基于预设规则自动为工单分配支持人员、确定工单处理顺序,同时也可进行队列的快速切换和灵活调度,让服务管理更加高效、有序。

SLA 管理,透明可控

清晰定义的服务承诺是高质量服务管理的基础,而JSM提供了SLA目标自定义功能,能够基于客户要求自定义SLA服务。通过实时追踪SLA,支持团队还能够及时发现服务过程中的问题和偏差,进而管控客户预期,提升客户满意度。

知识库复用,持续沉淀

JSM基于与Confluence的集成,提供高效链接、管理Confluence文档的功能,可利用AI实时总结工单的解决过程及方式,形成有效的业务经验并自动更新至知识库,实现新知识即时沉淀、形成问题标准化解决方案,提高支持人员回应的一致性。另外,JSM还支持按支持人员和外部客户身份区分知识库权限,在提供最新知识的同时,有效保障信息安全。

Dev & Ops 真正协同

Dev与Ops真正协同是现代服务请求支持的关键一环。

JSM可与Jira Software无缝衔接,使支持团队与开发团队深度集成。从提出服务需求到问题解决,确保任务的精准分配与高效执行,实现完整的项目管理闭环,确保全流程可控、可追溯。这意味着可以打破部门间的隔阂,实现信息与资源的高效共享,有效提升服务质量和客户满意度。

资产与配置管理

企业资产也是服务管理中必不可少的一环。

JSM系统中的资产管理模块(Assets)可用于对企业至关重要的软件、硬件、服务、人员等资产进行自定义设置、实时跟踪和可视化管理,成为企业的实时资源库。通过动态追踪资产的使用状况及状态,企业可以及时发现潜在问题,提前做好维护或调整,避免因资产故障影响业务开展。还将资产对象与服务工单进行轻松关联,从而提高工作效率,减少沟通成本,让企业的管理流程更顺畅。

零编码的自动化规则构建器

Automation是JSM中协助支持团队做好服务管理的另一强大工具。针对可规则化的重复性服务需求,JSM支持零编码构建“触发器—条件—行为动作”的自动化规则,以系统自动执行来替代人工重复劳动,从而提高工作效率,让员工有更多精力投入到创造性的工作中。

虚拟智能助手

Atlassian 推出了虚拟智能助手(Virtual Intelligent Assistant),融合人工智能与自然语言处理技术,能够通过对话理解用户问题,快速响应并实时提供解决方案。同时,它还支持监控助手表现,便于用户有针对性地优化训练,持续提升其服务能力,从而显著增强企业客户服务的效率与质量。

综上所述,JSM 的各项功能有效应对了前述服务管理挑战,已成为众多企业实现高效、优质服务管理的首选方案。

Atlassian AI如何赋能现代服务请求支持

2025年,Atlassian进一步将Jira Service Management(JSM)、Customer Service Management(CSM)、Assets 和Rovo集成为全新的Service Collection解决方案推向市场。这是一个基于人工智能的服务管理解决方案,旨在帮助企业更智能、更高效地预防和应对各类服务问题。

JSM 和 Assets 的功能前面已作介绍,客户服务管理 CSM 不是本次研讨会的重点,此处不再展开。接下来,我们将目光聚焦到 Rovo 上。

认识Atlassian AI助手——Rovo

Rovo是Atlassian的全新AI产品,通过释放AI潜力帮助用户将信息瞬时转化为行动。Rovo的目标是让Atlassian平台从一个优秀的“工作系统”,进化为理解用户、辅助用户甚至能主动为用户工作的“智能工作伙伴”——这也是我们迎接智能未来的方式。

Rovo 由 OpenAI 和 Google 的大语言模型驱动,具备强大的语言理解与生成能力。同时,它深度集成 Atlassian Cloud 的核心引擎——团队知识图谱(Teamwork Graph),可自动聚合并识别企业团队在信息、工作内容、目标规划与知识沉淀之间的关联。通过结合 AI 模型的语言能力与结构化知识网络,Rovo 为高效服务管理提供有力支撑。

此外,Rovo 还可集成企业外部应用,快速分析和处理海量用户与服务数据,并通过三种主要模式——智能搜索(Rovo Search)、对话交互(Rovo Chat),以及开箱即用与可定制的AI助手(Rovo Agent)——为用户提供即时、精准的服务支持,助力团队从容应对复杂的工作场景。

JSM:AI驱动的智能服务台

JSM集成Rovo后成为AI驱动的智能服务台,通过Rovo、虚拟代理和知识库为用户提供全渠道的自助服务,实现服务左移。另外JSM平台通过深度整合Jira生态,打破团队壁垒,支持跨产品协作与自动化流程,涵盖IT、HR、一般服务管理等多种应用场景。同时支持外部知识整合及全生命周期资产管理,提供开箱即用的报表、服务管理分析工具等等,助力企业高速构建、部署和运行新服务。

那么,Rovo是如何助力企业进行高效服务管理的呢?

写作助手及智能摘要

Rovo在服务管理中的应用非常广泛。无论是日常知识的构建、更新与沉淀,还是与外部客户的沟通,它都能充当写作助手——不仅帮助用户总结、提炼、扩写、优化和翻译内容,还可以基于工单解决过程及用户沟通的上下文,自动归纳总结问题及解决方案,并将其创建、更新为最新的知识库经验。这有效解决了企业信息更新不及时、历史经验难以沉淀等问题。

智能建议及分类

Rovo还可根据项目和服务队列的实际情况,为工单给出智能建议,实现工单的精准分类与自动分派,大大提升支持人员的工作效率和决策质量。

智能搜索(Rovo Search)

Rovo智能搜索主要以三种形式服务用户:

  • 跨平台智能搜索:搜索信息时可跨平台显示搜索结果,例如用自然语言搜索信息后,搜索结果不仅包含Jira/JSM里的工单,也包括Confluence里的内容,从而打破平台壁垒,提高效率;
  • 针对用户权限及习惯,个性化显示搜索结果;
  • 通过不断迭代更新知识体系,提升系统性能和用户的搜索体验。

对话式AI(Rovo Chat)

Rovo Chat是一个对话式的AI伙伴,用户可通过自然对话与其互动,获得即时、有效的反馈。无论是撰写、修改、总结、查找内容,还是按需呈现信息,它都能轻松完成,真正实现“对话即自动化”。基于聊天上下文和企业产品数据,Rovo Chat能够智能生成回复并推荐后续问题,且随着团队的持续使用不断进化,变得越来越智能。

智能代理(Rovo Agent)

Rovo提供了开箱即用的智能代理(Agent),可将其看作是能基于用户需求执行相关任务的“AI同事”,例如自动处理工单、生成经验总结、智能分类、提供智能回复等,真正实现“动手”替你干活。

同时,Rovo Studio赋予企业定制Agent的能力——通过使用自然语言和低代码方式,基于企业的实际业务构建专属AI助手,并灵活定义其技能,如创建/更新/评论工单等,满足个性化服务管理需求。

智能自动化:Rovo和Automation

此前我们已经介绍过,JSM的Automation功能可帮助处理大量的重复性事务。结合Rovo的AI功能后,Automation得以进一步升级,真正实现智能自动化。

对于不熟悉Automation配置的用户来说,可通过Rovo使用自然语言轻松创建自动化规则,降低配置门槛,带来更好的用户体验。另外,企业也可基于实际的业务需求,将Rovo Agent集成进Automation规则中,将传统“规则驱动”的自动化升级为“AI智能驱动”——不仅能执行预设规则,还能在规则执行过程中理解业务上下文、预测需求并主动推荐下一步行动,真正实现从”自动化任务”到”自动化决策”的跨越,助力Atlassian 平台真正成为企业的智能协作中枢。

Atlassian Cloud跨区域协作优势与数据安全

接下来,我们来探讨大家关心的另一个话题:Atlassian Cloud跨区域协作的优势以及数据安全机制,希望能有效解答部分客户对这两方面的顾虑。

Atlassian Cloud跨区域协作优势:

  • Altassian在全球多区域部署基于AWS的公有云基础设施,支持用户就近接入;
  • 提供自动负载均衡功能,承诺高达99.9%的SLA目标,保障服务的高可用性;
  • 统一数据源及实时更新,所有的工单、文档、代码集中存储于云端,多地团队能即时查看同一版本,避免副本冲突;
  • 支持多种语言及时区,降低跨国团队的理解成本,避免跨时区排期错误。

Atlassian Cloud通过多重措施保障数据安全:

  • 安全工具Atlassian Guard可通过访问控制、单点登录 (SSO) 和多因素身份验证 (MFA)等措施,保证用户数据安全;
  • Cloud产品传输数据时,Atlassian会对数据进行加密,同时利用 AWS定期对加密、解密和密钥管理等流程进行内部检查和验证等,共同保障数据安全;
  • Atlassian也对分布于不同区域的多个数据中心制定了全面的备份计划,通过定期测试灾难恢复和业务持续性计划来提供服务保障,即使遇到突发情况,也能迅速恢复数据,确保业务的连续性,降低损失。

这几重保障相互配合,为用户和服务的数据安全保驾护航,让用户能够更加放心地使用Atlassian Cloud服务。

Rovo数据权限及隐私:

部分用户可能因Rovo可结合开源的AI模型,而对其数据安全有所顾虑,在此,我们专门做个解答。

  • Rovo严格遵循产品现有的权限设置,杜绝将数据用于跨客户的模型训练,对用户数据的使用边界有清晰的界定,能够保障不同客户的数据独立性和安全性;
  • Atlassian承诺用户数据不会用于改进任何大语言模型或服务,与第三方托管模型的数据交互是通过SSL加密服务单独发送的,进一步强化了数据隐私保护,企业无需担心数据泄密问题;
  • 符合条件的客户可申请仅使用Atlassian托管的大语言模型,将大语言模型的使用范围限制在Atlassian云平台内。

希望这一列的安全保证措施,能够解答大家对Atlassian Cloud产品数据安全的顾虑。

Demo演示:利用Jira Service Management + AI,高效处理新员工入职全流程

最后,我们以新员工入职流程为例,演示 JSM 与 AI 深度集成后在实际场景中的高效应用。

https://www.bilibili.com/video/BV1hQzNBhE7g/?page=1

Atlassian全球白金合作伙伴—上海龙智

作为Atlassian全球白金合作伙伴,以及大中华区第一家获得Cloud Specialization 和ITSM Specialization 认证的企业,龙智提供:

– Jira Service Management 规划与实施

– Atlassian平台整合、迁移与自动化设计

– DevOps流程与ITSM落地咨询

– 企业级培训与本地技术支持等服务

进一步了解Jira Service ManagementRovo如何帮助您的企业升级服务管理

从零开始使用ComfyUI:镜像部署与工作流操作全指南

本文基于实际Linux云实例操作场景,详细讲解从ComfyUI镜像环境到成功进入工作流的完整流程,涵盖环境排查、服务启动、访问验证等核心步骤,适配润云平台ComfyUI镜像及类似环境。

一、什么是comfyui

ComfyUI就像拥有一支神奇魔杖,可以轻松创造出令人惊叹的AI生成艺术。从本质上讲,ComfyUI是构建在Stable Diffusion之上的基于节点的图形用户界面(GUI),而Stable Diffusion是一种最先进的深度学习模型,可以根据文本描述生成图像。 但ComfyUI真正特别之处在于,它如何让像你这样的艺术家释放创造力,将你最疯狂的想法变为现实。

想象一下有一块数字画布,你可以通过连接不同的节点来构建自己独特的图像生成工作流,每个节点代表一个特定的功能或操作。 就像为你的AI生成杰作构建一个视觉食谱!

二、ComfyUI的准备

2.1 前置准备

进入润云平台,创建实例时选择ComfyUI镜像

创建实例成功之后,进入刚创建的实例Jupyter页面,并打开终端

2.2 确认ComfyUI安装路径

首先定位ComfyUI核心启动文件main.py,执行以下命令全局查找:


find / -name "main.py" 2>/dev/null | grep -i comfy

示例输出(本文实操路径):


/home/ComfyUI/main.py

若输出为空(镜像未预装ComfyUI),手动安装:


cd /root/workspace
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install -r requirements.txt

2.3 查看实例公网IP

访问ComfyUI需实例公网IP,执行命令快速获取:


curl ifconfig.me

示例输出(本文实操IP):


221.5.60.2

2.4 检查端口占用

ComfyUI默认端口为8188,本文实操使用8888/8889端口,先检查端口是否被占用:


# 检查8888端口
netstat -tuln | grep 8888
# 检查8889端口
netstat -tuln | grep 8889

若输出包含LISTEN,说明端口被占用,需更换端口。

三、启动ComfyUI服务

3.1 基础启动命令(前台运行)

进入ComfyUI主目录,启动服务并指定外网访问权限及端口:


# 进入ComfyUI目录(根据实际路径调整)
cd /home/ComfyUI
# 启动服务(使用8889端口,避开占用)
python main.py --listen 0.0.0.0 --port 8889

启动成功标志:终端最后输出以下内容,说明服务已正常运行:


Starting server
To see the GUI go to: http://0.0.0.0:8889

3.2 后台运行(推荐)

避免关闭终端导致服务停止,使用nohup命令后台启动,同时记录日志:


cd /home/ComfyUI
nohup python main.py --listen 0.0.0.0 --port 8889 > /root/workspace/comfyui.log 2>&1 
  • 日志查看tail -f /root/workspace/comfyui.log 实时监控启动状态
  • 停止服务

      `# 查找ComfyUI进程ID

    ps aux | grep comfy

    3.3 常见启动报错解决

报错类型解决命令
python: command not foundapt update && apt install -y python3 python3-pip && ln -s /usr/bin/python3 /usr/bin/python
No module named xxx(缺少依赖)cd /home/ComfyUI && pip install -r requirements.txt
address already in use(端口占用)更换端口(如8889)重新启动服务
xformers依赖报错(TypeError: JITCallable._set_src()pip uninstall -y xformers && pip install xformers==0.0.27.post2 --force-reinstall

四、访问ComfyUI工作流界面

进入实例详情页增加上面的开启的端口,复制访问地址至浏览器即可看到ComfyUI可视化工作流编辑界面(左侧为节点面板,中间为画布,右侧为控制栏)。

五、首次使用工作流

5.1 加载内置工作流

  1. 进入界面后,点击左上角 LoadLoad WorkflowFrom Examples
  2. 选择 basic_text_to_image.json(基础文生图工作流),画布将自动加载预设节点;
  3. Checkpoint Loader 节点下拉选择模型(如SD 1.5,需提前放入模型文件至/home/ComfyUI/models/Stable-diffusion目录);
  4. CLIP Text Encode 节点输入正向提示词(如“a cute cat, 4k, detailed”)和反向提示词(如“low quality, blurry”);
  5. 点击右上角 Queue Prompt 运行工作流,生成的图片将在 Preview Image 节点实时显示。

5.2 保存与复用工作流

工作流调试完成后,点击顶部 SaveSave Workflow,将工作流保存为JSON文件,后续可通过 Load Workflow → From File 上传复用。

5.3 核心界面与节点详解

ComfyUI界面分为三大区域,掌握各区域功能是灵活使用的基础:

  • 左侧节点面板:按功能分类存放所有节点,可通过顶部搜索框快速查找(如输入“Lora”定位Lora加载节点)。核心分类包括:
    模型加载类(Checkpoint Loader、Lora Loader、VAE Loader):用于加载基础模型、微调模型及解码模型;
  • 提示词处理类(CLIP Text Encode、CLIP Text Encode (Advanced)):用于解析正向/反向提示词,控制生成内容;
  • 采样生成类(KSampler、EulerSampler):核心生成节点,控制采样步数、CFG值、生成尺寸等关键参数;
  • 后处理类(Preview Image、Save Image):用于预览生成结果及保存图片到本地。

中间画布区域:工作流编辑核心区,可拖拽节点、连接端口、调整节点位置。操作技巧:

连接节点:点击一个节点的输出端口(右侧小圆点),拖拽到目标节点的输入端口(左侧小圆点),松开即可建立连接;

删除节点:选中节点后按Delete键,或右键节点选择Remove

清空画布:右键画布空白处,选择Clear Workflow

右侧控制栏:包含工作流队列、历史记录、设置等功能。队列面板可查看当前生成任务进度,历史记录可回溯之前的生成结果及对应工作流配置。

5.4 自定义工作流搭建(以图生图为例)

除了加载内置工作流,也可手动搭建自定义流程,以图生图为例,步骤如下:

  1. 加载基础模型:从节点面板拖拽Checkpoint Loader到画布,选择SD 1.5或SDXL模型,同时拖拽VAE Loader加载对应VAE模型(优化图像质量);
  2. 导入参考图:拖拽Load Image节点,点击节点上的Upload按钮上传本地图片,作为生成参考;
  3. 图片预处理:拖拽Image Scale节点,连接Load Image的输出端口,设置目标生成尺寸(如512×512),勾选cropresize调整图片适配尺寸;
  4. 提示词配置:拖拽两个CLIP Text Encode节点,分别输入正向提示词(如“a beautiful landscape, oil painting style”)和反向提示词(如“ugly, distorted, low resolution”);
  5. 采样生成:拖拽KSampler节点,依次连接以下端口:
    model端口:连接Checkpoint Loader的model输出;
  6. positive端口:连接正向提示词节点的输出;
  7. negative端口:连接反向提示词节点的输出;
  8. latent_image端口:连接Image Scale的输出(需先拖拽VAEDecode节点转换图像格式);
  9. 结果预览与保存:拖拽Preview ImageSave Image节点,均连接KSampler的输出端口,设置保存路径(默认保存在/home/ComfyUI/output);
  10. 运行工作流:点击右上角Queue Prompt,等待生成完成,在Preview Image节点查看结果。

5.5 常用功能拓展(插件与模型管理)

ComfyUI支持通过插件拓展功能,核心拓展方式如下:

5.5.1 插件安装(以ComfyUI-Manager为例)

ComfyUI-Manager已预装在当前镜像中,可通过它快速安装插件:

  1. 进入ComfyUI界面,点击左侧节点面板顶部的ComfyUI-Manager按钮;
  2. 在弹出的窗口中选择Install Custom Nodes,搜索需要的插件(如“ControlNet”“UltimateSDUpscale”);
  3. 点击插件右侧的Install,安装完成后重启ComfyUI服务,插件节点将自动显示在左侧面板。
5.5.2 模型管理与加载

不同类型的模型需放在对应目录,否则无法加载:

模型类型存放目录加载节点
基础模型(.ckpt/.safetensors)/home/ComfyUI/models/Stable-diffusionCheckpoint Loader
Lora模型(.safetensors)/home/ComfyUI/models/LoraLora Loader
ControlNet模型(.pth)/home/ComfyUI/models/ControlNetControlNet Loader
VAE模型(.ckpt/.safetensors)/home/ComfyUI/models/VAEVAE Loader
模型上传方式:通过云实例文件管理工具,将本地模型上传至对应目录,重启ComfyUI后即可在节点中选择加载。

六、关键注意事项

  1. 核心路径:本文实操中ComfyUI主目录为/home/ComfyUI,启动文件为main.py,实际路径需根据查找结果调整;
  2. 端口选择:优先使用未被占用的端口,避免与Jupyter、Nginx等服务冲突;
  3. 报错处理depthanythingv2nodes_audio.py等扩展节点报错仅影响小众功能,文生图、图生图、ControlNet等核心工作流不受影响,可后续按需修复;
  4. 后台运行:生产环境建议使用nohup后台启动,同时定期清理日志文件,避免占用过多存储空间。

七、常见问题排查

问题现象排查方向
浏览器无法访问界面1. 公网IP是否正确;2. 端口是否放行;3. ComfyUI服务是否正常运行;4. 实例是否处于运行状态
启动后无界面提示1. 启动命令是否包含--listen 0.0.0.0(允许外网访问);2. 端口是否被占用;3. 查看日志定位报错原因
运行工作流生成图片失败1. 模型文件是否存在且路径正确;2. GPU显存是否充足(建议RTX 3060及以上);3. 节点连接是否完整;4. 提示词是否合规

写在前面,本人目前处于求职中,如有合适内推岗位,请加:lpshiyue 感谢。同时还望大家一键三连,赚点奶粉钱。本系列已完结,完整版阅读课联系本人

现代内容分发不是简单的缓存填充,而是静态加速、动态优化与安全管控的精密协同艺术

在构建了高可用的服务架构之后,我们面临一个更关键的挑战:如何将内容高效、安全地交付给全球用户?内容分发网络(CDN)与边缘缓存策略正是解决这一挑战的核心技术。本文将深入探讨静态内容加速、动态内容优化与签名鉴权机制的三位一体组合,帮助构建高效、安全的内容分发体系。

1 CDN的本质:从内容分发到边缘计算的演进

1.1 CDN架构的核心价值重估

传统CDN被简单理解为内容缓存网络,而现代CDN已演进为边缘计算平台。根据天翼云的实践,CDN通过全球分布式节点网络,将内容缓存至离用户最近的边缘服务器,实现“就近访问”的本质突破。

CDN的三大核心价值转变

  • 从带宽优化到体验优化:不仅减少源站压力,更关注终端用户的实际体验
  • 从静态缓存到动态加速:支持API、实时数据等动态内容智能路由
  • 从内容分应用到计算下沉:边缘计算能力使业务逻辑可下沉至节点

全球领先的CDN服务商已拥有3200+全球节点,覆盖70多个国家和地区,将平均延迟从120ms降至40ms以内,提升用户体验70%以上。

1.2 边缘缓存的层次化设计

现代CDN采用多层次缓存架构,在不同层级实施差异化策略:

graph TD
    A[用户请求] --> B[边缘节点]
    B -->|缓存命中| C[直接响应]
    B -->|缓存未命中| D[父层节点]
    D -->|缓存未命中| E[中心节点]
    E -->|回源| F[源站]
    
    style B fill:#e1f5fe
    style D fill:#fff3e0
    style E fill:#f3e5f5
    style F fill:#e8f5e8

CDN多层次缓存架构,实现高效内容分发

这种分层设计使得热门内容在边缘节点即可响应,而冷门内容通过智能回源机制获取,平衡了存储成本与访问效率。

2 静态内容加速:极致性能的缓存策略

2.1 静态资源的缓存优化机制

静态资源(如图片、CSS、JS文件)是CDN加速的主要对象,通过精准的缓存策略实现极致性能优化。

缓存规则设计原则

  • 高频资源长期缓存:不常变化的资源设置长TTL(如30天)
  • 版本化资源永久缓存:通过文件名哈希或版本号实现永久缓存
  • 低频资源短期缓存:不常访问的资源设置较短TTL,避免存储浪费
# Nginx缓存配置示例
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 1y;  # 缓存1年
    add_header Cache-Control "public, immutable";
    
    # 版本化资源永久缓存
    if ($request_uri ~* \.[0-9a-f]{8}\.(js|css)) {
        expires max;
    }
}

静态资源缓存配置示例

2.2 缓存命中率提升策略

高缓存命中率是CDN效能的关键指标,通过多种技术手段提升:

预热机制:提前将热点资源推送到边缘节点,避免首次访问回源。
智能淘汰算法:基于LRU(最近最少使用)或LFU(最不经常使用)算法管理节点缓存。
关联缓存:将相关资源组合缓存,提升整体命中率。

阿里云CDN通过智能缓存策略,将静态资源缓存命中率提升至95%以上,源站压力减少70%。

2.3 缓存更新与失效策略

合理的缓存更新机制确保内容及时更新一致性

版本化发布:通过文件名包含哈希值或版本号,确保内容更新后立即失效旧缓存。

<!-- 版本化资源引用 -->
<script src="app.a1b2c3d4.js"></script>
<link rel="stylesheet" href="style.v2.1.0.css">

主动刷新:通过API或控制台主动清除CDN缓存,适用于紧急更新。
条件请求:利用ETag和Last-Modified头,减少带宽消耗。

3 动态内容加速:智能路由的优化艺术

3.1 动态内容加速的挑战与突破

传统观念认为动态内容无法缓存,但现代CDN通过智能路由优化实现了动态内容加速。

动态内容加速的核心原理

  • 路径优化:选择最优网络路径,避免拥堵节点
  • 协议优化:采用HTTP/2、QUIC等先进协议减少握手延迟
  • 连接复用:保持长连接,减少TCP/TLS握手开销

天翼云CDN通过动态路由优化,将API接口延迟降低30%以上,即使实时性要求高的业务也能受益。

3.2 边缘计算赋能动态加速

边缘计算使CDN从内容缓存升级为计算平台,部分动态逻辑可在边缘执行:

// 边缘计算示例:简单的AB测试逻辑
addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
    // 根据用户特征进行AB测试
    const userId = getUserId(request)
    const variant = getABTestVariant(userId)
    
    // 边缘节点执行逻辑,减少回源
    if (variant === 'B') {
        return handleVariantB(request)
    }
    
    // 默认回源
    return fetch(request)
}

边缘计算实现动态逻辑

3.3 动态缓存与个性化平衡

动态内容也可适度缓存,平衡实时性性能

短时缓存:对变化不频繁的动态内容设置短TTL(如1-10秒)。
条件缓存:基于请求参数、用户群组等条件差异化缓存。
局部缓存:对动态页面中的静态部分单独缓存,动态部分实时获取。

4 签名鉴权与安全管控

4.1 URL签名防篡改机制

URL签名是保护CDN资源的核心安全机制,防止未授权访问和资源盗链。

签名URL的工作原理

// URL签名生成示例(Go伪代码)
func GenerateSignedURL(path, secret string, expire int64) string {
    // 构造原始字符串
    raw := fmt.Sprintf("%s:%d", path, expire)
    
    // HMAC-SHA256签名
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(raw))
    signature := base64.URLEncoding.EncodeToString(mac.Sum(nil))
    
    // 构造签名URL
    return fmt.Sprintf("https://cdn.example.com%s?x-expires=%d&x-signature=%s", 
        path, expire, signature)
}

URL签名生成算法

CDN边缘节点收到请求后,使用相同算法验证签名有效性和过期时间,确保请求合法性。

4.2 多层次防盗链策略

防盗链是保护企业流量成本的关键措施,通过多维度策略实现:

Referer检查:基于HTTP Referer头过滤非法域名。

# Referer防盗链配置
location /protected/ {
    valid_referers none blocked server_names ~\.example\.com;
    if ($invalid_referer) {
        return 403;
    }
}

IP黑白名单:限制特定IP范围的访问权限。
Token认证:动态生成访问令牌,增强安全性。

4.3 安全传输与合规性

HTTPS强化:全链路HTTPS加密,支持TLS 1.3等现代协议。
合规认证:通过等保三级、PCI-DSS等权威认证,满足金融、政务场景要求。
DDoS防护:集成DDoS清洗能力,抵御大规模流量攻击。

5 实战配置:阿里云CDN最佳实践

5.1 CDN加速OSS完整流程

阿里云CDN与OSS深度集成,提供完整的静态资源加速方案:

配置流程

  1. 添加加速域名:在CDN控制台添加加速域名,配置源站为OSS Bucket。
  2. DNS解析配置:将域名CNAME记录指向CDN提供的地址。
  3. 缓存策略设置:根据文件类型设置差异化缓存规则。
  4. 安全策略启用:配置Referer防盗链、URL鉴权等安全机制。

核心优势

  • 成本优化:CDN下行流量单价显著低于OSS外网流量,可节省70%成本。
  • 性能提升:全球节点覆盖,实现毫秒级响应。
  • 管理简便:控制台一体化管理,简化运维复杂度。

5.2 缓存规则精细化配置

科学的缓存规则是CDN性能的核心保障

# 缓存规则配置示例
缓存规则:
  - 路径: "/static/"
    文件类型: "图片/CSS/JS"
    TTL: "30天"
    规则: 版本化文件名,永久缓存
    
  - 路径: "/api/"
    文件类型: "接口响应"
    TTL: "1秒"
    规则: 短时缓存,保证实时性
    
  - 路径: "/media/"
    文件类型: "视频资源"
    TTL: "7天"
    规则: 分段缓存,支持范围请求

基于路径的差异化缓存策略

5.3 监控与优化闭环

完善的监控体系是持续优化的数据基础

关键监控指标

  • 缓存命中率:衡量CDN效能的核心指标,目标>90%。
  • 回源率:反映缓存策略合理性,高回源率需优化缓存规则。
  • 平均延迟:衡量用户体验的关键指标。
  • 错误率:识别系统问题和安全威胁。

天翼云CDN通过实时监控和智能告警,帮助企业快速定位问题,持续优化性能。

6 新兴趋势:边缘计算的深度融合

6.1 从内容分发到计算分发

边缘计算正推动CDN向边缘计算平台演进,实现计算能力的分布式部署:

边缘函数:在CDN节点运行轻量级代码,实现个性化逻辑。
边缘存储:将部分数据持久化在边缘,减少回源延迟。
边缘AI:在边缘节点执行AI推理,实现实时智能响应。

6.2 5G与物联网的协同机遇

5G网络为CDN带来新机遇新挑战

低延迟需求:5G超低延迟要求内容更靠近用户。
海量连接:物联网设备激增,需要高效的边缘缓存架构。
网络切片:基于业务需求的差异化服务质量保障。

6.3 安全架构的演进

零信任安全:在边缘节点实施零信任验证,增强整体安全性。
区块链鉴权:分布式身份验证,防止单点故障。
量子安全:应对未来量子计算的安全威胁。

总结

CDN与边缘缓存策略已从简单的内容分发发展为静动态加速与安全管控的精密组合。通过静态内容极致缓存、动态内容智能路由、资源访问安全管控的三位一体协同,企业可构建高效、安全、可靠的内容分发体系。

核心成功要素

  1. 策略精细化:基于内容类型和业务需求制定差异化缓存策略
  2. 安全全面化:从传输加密到访问鉴权的全方位安全防护
  3. 监控持续化:基于数据的持续优化和迭代
  4. 技术前沿化:拥抱边缘计算、5G等新技术趋势

成功的CDN架构不仅提升性能,更成为业务增长的加速器。通过精心设计的缓存策略和安全机制,企业可显著提升用户体验,同时优化成本结构。

随着边缘计算的成熟和5G的普及,CDN将进一步演进为智能边缘平台,为下一代互联网应用提供坚实基础。


📚 下篇预告
《Nginx与网关配置观——超时、限流、TLS与代理缓存的原则化清单》—— 我们将深入探讨:

  • ⚙️ 配置哲学:Nginx配置的深层原理与最佳实践范式
  • ⏱️ 超时控制:连接、读写、代理超时的精细化管理策略
  • 🚦 限流机制:令牌桶、漏桶算法在网关层的实现与调优
  • 🔐 TLS安全:证书管理、协议选择与密钥交换的安全强化
  • 💾 代理缓存:多级缓存架构与缓存失效的精准控制
  • 📋 清单化实践:生产环境网关配置的完整检查清单

点击关注,掌握网关配置的精髓!

今日行动建议

  1. 审计现有静态资源缓存策略,优化TTL设置和版本化管理
  2. 评估动态内容加速需求,部署智能路由和边缘计算功能
  3. 强化CDN安全管控,实施签名鉴权和防盗链机制
  4. 建立CDN性能监控体系,持续优化缓存命中率和用户体验
  5. 规划边缘计算演进路径,为未来业务创新奠定基础

NFS(网络文件系统)是一种分布式文件系统协议,允许您在服务器上挂载远程目录。这使您能够管理位于不同位置的存储空间,并支持从多个客户端向该空间写入数据。NFS 提供了一种相对标准且高性能的网络远程系统访问方式,非常适合需要频繁访问共享资源的场景。

本教程将详细介绍如何在 Ubuntu 系统上安装 NFS 服务器与客户端软件、配置 NFS 导出目录、设置 NFS 挂载点,并通过 fstab 条目创建持久化 NFS 挂载。

注:本教程已在 Ubuntu 20.04、22.04 和 24.04 版本中验证通过,所涉及的软件包名称、命令及配置文件在这些版本中均保持兼容。

本文核心要点

  • NFS 通过允许多个客户端服务器通过网络访问单个主机服务器共享的目录,实现了集中式存储。
  • 搭建 NFS 需要安装两个软件包:主机端需安装 nfs-kernel-server,客户端需安装 nfs-common
  • 安全配置通过 /etc/exports 文件实现,需在该文件中指定共享的目录及允许访问的客户端 IP 地址。
  • 防火墙规则对限制 NFS 仅允许授权客户端访问至关重要,通常使用 UFW 放行来自特定 IP 地址的 2049 端口。
  • 持久化挂载需在 /etc/fstab 中添加相应条目,以确保系统重启后 NFS 共享能自动重连。

为实现最佳性能,建议为 NFS 服务器和客户端均配置具备 10 Gbit 网络的 DigitalOcean 高级专用服务器( Premium Dedicated Droplets)。使用 10 Gbit 网络可使 NFS 性能接近已公布的存储卷最高传输速率。

开发前的准备

本教程将使用两台服务器,其中一台将其文件系统的部分目录共享给另一台。要完成本教程,您需要:

两台 Ubuntu 服务器。每台服务器应具备以下条件:

  • 拥有具备 sudo 权限的非 root 用户
  • 已使用 UFW 设置防火墙
  • (若可用)已配置私有网络

如需了解如何设置具备 sudo 权限的非 root 用户及防火墙,请参照我们曾经发布的文章《Ubuntu 初始服务器设置教程》。

如果您使用 DigitalOcean Droplet 作为服务器和客户端,可参阅我们关于《如何选择适合自己团队的服务器配置》的文档,了解更多私有网络设置信息。有关防火墙配置的更多说明,请查看《如何在 Ubuntu 上使用 UFW 设置防火墙》。

本教程中,我们将共享目录的服务器称为​主机​,挂载这些目录的服务器称为​客户端​。您需要知道两者的 IP 地址,并确保(若可用)使用私有网络地址。

在下文中,我们将用占位符 host\_ip 和 client\_ip 指代这些 IP 地址,请根据需要替换为实际地址。

步骤 1 — 下载并安装组件

我们首先在两台服务器上安装必要的 NFS 组件。

在主机上

在主机服务器上安装 nfs-kernel-server 软件包,该软件包允许您共享目录。由于这是本次会话中首次使用 apt 进行操作,请在安装前刷新本地软件包索引:

sudo apt update
sudo apt install nfs-kernel-server

安装完成后,切换到客户端服务器。

在客户端上

在客户端服务器上,我们需要安装 nfs-common 软件包(也称为 nfs-utils),它提供 NFS 客户端功能,不包含任何服务器组件。同样,请在安装前刷新本地软件包索引,以确保获取最新信息:

sudo apt update
sudo apt install nfs-common

现在两台服务器均已安装必要软件包,我们可以开始进行配置。

步骤 2 — 在主机上创建共享目录

我们将共享两个独立的目录,并采用不同的配置设置,以说明在超级用户访问权限方面配置 NFS 挂载的两种关键方式。

超级用户可以在其系统上的任何位置执行任何操作。然而,NFS 挂载的目录并非挂载它们的目标系统的一部分,因此默认情况下,NFS 服务器会拒绝执行需要超级用户权限的操作。这一默认限制意味着,客户端的超级用户无法以 root 身份写入文件、重新分配所有权或在 NFS 挂载上执行任何其他超级用户任务。

但有时,客户端系统上存在可信用户,他们需要在挂载的文件系统上执行这些操作,却不需要在主机上拥有超级用户访问权限。你可以配置 NFS 服务器来允许此类操作,尽管这会引入一定的风险,因为这样的用户可能获得对整个主机系统的 root 访问权限。

示例 1:导出通用挂载

在第一个示例中,我们将创建一个通用型 NFS 挂载,它利用默认的 NFS 行为,使得客户端机器上拥有 root 权限的用户难以利用这些客户端超级用户权限与主机进行交互。你可能使用类似这样的配置来存储通过内容管理系统上传的文件,或者为用户创建共享项目文件的空间。

首先,创建共享目录:

sudo mkdir /var/nfs/general -p

由于我们使用 sudo 创建它,该目录归主机的 root 用户所有:

ls -la /var/nfs/general

输出:

drwxr-xr-x 2 root root 4096 May 14 18:36 .

作为一种安全措施,NFS 会将客户端上的任何 root 操作转换为 nobody:nogroup 凭证。因此,我们需要更改目录的所有权以匹配这些凭证。

sudo chown nobody:nogroup /var/nfs/general

现在,该目录已准备就绪,可以导出。

示例 2:导出主目录

在我们的第二个示例中,目标是让存储在主机上的用户主目录能够在客户端服务器上可用,同时允许那些客户端服务器的可信管理员获得他们便捷管理用户所需的访问权限。

为此,我们将导出 /home 目录。由于该目录已存在,我们无需创建。我们也不会更改其权限。如果更改,可能会给主机上任何拥有主目录的用户带来一系列问题。

步骤 3 — 在主机服务器上配置 NFS 导出

接下来,我们将深入 NFS 配置文件来设置这些资源的共享。

在主机上,使用具有 root 权限的文本编辑器打开 /etc/exports 文件:

sudo nano /etc/exports

该文件包含注释,展示了每行配置的基本结构。语法如下:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

我们需要为计划共享的每个目录创建一行配置。请务必将此处的 client\_ip 占位符替换为您的实际 IP 地址:

/etc/exports
/var/nfs/general    client_ip(rw,sync,no_subtree_check)
/home               client_ip(rw,sync,no_root_squash,no_subtree_check)

在此,我们对两个目录使用了相同的配置选项,除了 no\_root\_squash。让我们逐一了解这些选项的含义:

  • rw​:此选项赋予客户端计算机对该卷的读写权限。
  • sync​:此选项强制 NFS 在响应前先将更改写入磁盘。由于响应反映了远程卷的实际状态,这能带来更稳定、一致的环境,但也会降低文件操作速度。
  • no\_subtree\_check​:此选项禁用子树检查。子树检查是指在每个请求中,主机必须检查文件是否在导出树中仍然实际可用。当客户端打开文件时对其重命名,可能会导致许多问题。在几乎所有情况下,最好禁用子树检查。
  • no\_root\_squash​:默认情况下,NFS 会将远程 root 用户的请求转换为服务器上的非特权用户。这原本是作为一种安全特性,旨在防止客户端上的 root 账户以 root 身份使用主机的文件系统。no\_root\_squash 会为特定共享禁用此行为。

完成更改后,保存并关闭文件。然后,为了使配置的客户端能够访问共享,使用以下命令重启 NFS 服务器:

sudo systemctl restart nfs-kernel-server

但在实际使用新共享之前,您需要确保防火墙规则允许访问共享的流量。

步骤 4 — 调整主机防火墙设置

首先,我们检查防火墙状态,确认其是否已启用,并查看当前允许的规则:

sudo ufw status

输出:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

在我们的系统中,当前仅允许 SSH 流量通过,因此需要为 NFS 流量添加规则。

对于许多应用程序,您可以使用 sudo ufw app list 并按名称启用它们,但 nfs 不在此列。不过,由于 ufw 还会检查 /etc/services 中服务的端口和协议信息,我们仍可按名称添加 NFS 规则。最佳实践建议启用限制最严格但仍允许所需流量的规则,因此我们将明确指定来源,而不是允许来自任意地址的流量。

使用以下命令在主机上开放 2049 端口(请务必将 client\_ip 替换为您的客户端 IP 地址):

sudo ufw allow from client_ip to any port nfs

您可以通过以下命令验证更改:

sudo ufw status

输出中应显示允许来自 2049 端口的流量:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
2049                       ALLOW       203.0.113.24        
OpenSSH (v6)               ALLOW       Anywhere (v6)

这确认了 UFW 将仅允许来自我们客户端机器的 2049 端口 NFS 流量。

步骤 5 — 在客户端创建挂载点并挂载目录

现在主机服务器已配置完成并开始提供共享,我们将准备客户端环境。

为了使远程共享在客户端可用,我们需要将主机上要共享的目录挂载到客户端的空目录中。

注意​:如果挂载点中已存在文件和目录,在挂载 NFS 共享后它们将被隐藏。为避免重要文件丢失,请确保用于挂载的目录(如果已存在)是空的。

我们将为挂载位置创建两个目录:

sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home

现在我们已经有了存放远程共享的位置,并且防火墙已放行,接下来可以使用主机服务器的 IP 地址挂载共享:

sudo mount host_ip:/var/nfs/general /nfs/general
sudo mount host_ip:/home /nfs/home

从客户端挂载 NFS 共享时,可使用 -o nconnect=n 参数来提升特定工作负载的 IOPS。其中 "n" 代表该客户端与目标 NFS 服务器之间建立的连接数,取值范围为 1 到 16。您可以尝试不同的 nconnect 值以找到最适合您工作负载的配置,建议从 8 开始尝试。设置 nconnect 参数可能为某些工作负载(特别是小文件写入操作)带来轻微的 IOPS 提升。

这些命令会将主机上的共享目录挂载到客户端机器上。您可以通过多种方式确认挂载是否成功。虽然可以使用 mount 或 findmnt 命令检查,但 df -h 命令的输出更易读:

df -h

输出:

Filesystem                       Size  Used Avail Use% Mounted on
udev                             474M     0  474M   0% /dev
tmpfs                             99M  936K   98M   1% /run
/dev/vda1                         25G  1.8G   23G   8% /
tmpfs                            491M     0  491M   0% /dev/shm
tmpfs                            5.0M     0  5.0M   0% /run/lock
tmpfs                            491M     0  491M   0% /sys/fs/cgroup
/dev/vda15                       105M  3.9M  101M   4% /boot/efi
tmpfs                             99M     0   99M   0% /run/user/1000
10.132.212.247:/var/nfs/general   25G  1.8G   23G   8% /nfs/general
10.132.212.247:/home              25G  1.8G   23G   8% /nfs/home

我们挂载的两个共享都显示在输出底部。由于它们从同一个文件系统挂载,因此显示的磁盘使用情况相同。要查看每个挂载点下实际使用了多少空间,请使用磁盘使用命令 du 并指定挂载路径。-s 标志可显示使用情况摘要而非每个文件的详细使用情况,-h 标志则输出人类可读的格式。

例如:

du -sh /nfs/home

输出:

36K /nfs/home

这表明整个主目录的内容仅使用了 36K 的可用空间。

步骤 6 — 测试 NFS 访问权限

接下来,我们将通过向两个共享目录写入内容来测试访问权限。

示例 1:通用共享目录

首先,在 /var/nfs/general 共享中创建一个测试文件:

sudo touch /nfs/general/general.test

然后,检查其所有权:

ls -l /nfs/general/general.test

输出:

-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

由于我们在挂载此卷时未更改 NFS 的默认行为,并且通过 sudo 命令以客户端机器的 root 用户身份创建了文件,因此文件所有权默认归 nobody:nogroup。客户端超级用户在此 NFS 挂载的共享上将无法执行典型的管理操作,例如更改文件所有者或为用户组创建新目录。

示例 2:主目录共享

为了比较通用共享目录与主目录共享的权限差异,以相同方式在 /nfs/home 中创建一个文件:

sudo touch /nfs/home/home.test

然后查看该文件的所有权:

ls -l /nfs/home/home.test

输出:

-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

我们同样使用 sudo 命令以 root 身份创建了 home.test 文件,这与创建 general.test 文件的方式完全相同。然而,在这种情况下,文件归 root 所有,因为我们在挂载时通过指定 no\_root\_squash 选项覆盖了默认行为。这使得客户端机器上的 root 用户可以以 root 身份操作,从而大大方便了用户账户的管理。同时,这也意味着我们无需在主机上为这些用户授予 root 访问权限。

步骤 7 — 开机自动挂载远程 NFS 目录

我们可以通过将 NFS 挂载添加到客户端的 /etc/fstab 文件来创建持久化挂载。这可以确保 NFS 共享在系统启动时自动挂载。

使用具有 root 权限的文本编辑器打开此文件:

sudo nano /etc/fstab

在文件底部,为每个共享添加一行配置。配置行如下所示:

/etc/fstab
. . .
host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

注意​:您可以在 NFS 手册页中找到关于此处指定的选项的更多信息。可通过运行以下命令查看:

man nfs

客户端将在启动时自动挂载远程分区,但可能需要一些时间来建立连接并使共享可用。

步骤 8 — 卸载 NFS 远程共享

如果您不再希望远程目录挂载在系统上,可以通过离开共享目录结构并执行卸载操作来移除它,方法如下:

cd ~
sudo umount /nfs/home
sudo umount /nfs/general

请注意,该命令名为 umount,而非可能预期的 unmount。

执行后将移除远程共享,仅保留本地存储可访问:

df -h

输出:

Filesystem                       Size  Used Avail Use% Mounted on
udev                             474M     0  474M   0% /dev
tmpfs                             99M  936K   98M   1% /run
/dev/vda1                         25G  1.8G   23G   8% /
tmpfs                            491M     0  491M   0% /dev/shm
tmpfs                            5.0M     0  5.0M   0% /run/lock
tmpfs                            491M     0  491M   0% /sys/fs/cgroup
/dev/vda15                       105M  3.9M  101M   4% /boot/efi
tmpfs                             99M     0   99M   0% /run/user/1000

如果还希望防止下次重启时重新挂载,请编辑 /etc/fstab 文件,删除对应行或在行首添加 # 字符将其注释掉。您也可以通过移除 auto 选项来防止自动挂载,这样仍可手动挂载。

生产环境使用的其他注意事项

在生产环境中部署 NFS 时,请考虑以下最佳实践以确保稳定性、性能和安全性:

1. NFS 版本兼容性

确保客户端和服务器运行兼容版本。推荐使用 NFSv4,因为它简化了防火墙要求并改进了安全特性。

在挂载时强制使用特定版本:

sudo mount -t nfs -o vers=4 host_ip:/path /mountpoint

2. 性能优化参数

除了 nconnect 外,还可考虑以下选项:

  • rsize=8192,wsize=8192:增加读/写缓冲区大小以提升吞吐量。
  • async:提高写入性能,但崩溃时可能导致数据丢失。
  • actimeo=1800:减少属性缓存频率。

3. 安全性增强

NFS 默认不加密数据。为保护您的设置:

  • 仅在受信任的私有网络或 VPN 上使用 NFS。
  • 除非必要,否则应用 root\_squash 选项。
  • 在 /etc/exports 中限制仅允许特定 IP 访问。

4. ​日志记录与监控

监控 NFS 活动以进行审计或调试:

tail -f /var/log/syslog | grep nfs

或使用:

journalctl -u nfs-server

常见问题解答 (FAQs)

1. Linux 中的 NFS 挂载是什么?

NFS 挂载允许一个系统通过网络访问另一个系统共享的目录。它实现了 Linux/Unix 系统间的无缝文件共享,使远程目录如同本地目录一样可见。这在以下场景中特别有用:

  • 在多个服务器间共享应用数据
  • 集中存储以便于备份和管理
  • 允许多个服务器访问相同文件
  • 在网络中创建分布式文件系统

2. 如何在重启后保持 NFS 挂载?

您可以在客户端的 /etc/fstab 中添加挂载配置。以下是一个详细示例:

# 格式:host_ip:/shared_directory /mount_point nfs options 0 0
192.168.1.100:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

主要选项及其说明:

  • auto:启动时自动挂载
  • nofail:挂载失败时不中断启动过程
  • noatime:不更新访问时间(提高性能)
  • nolock:禁用文件锁定(对某些应用有用)
  • intr:允许硬挂载时中断
  • tcp:使用 TCP 而非 UDP
  • actimeo=1800:属性缓存 30 分钟

3. NFS 工作需要哪些端口

NFS 需要多个端口用于不同版本和功能:

  • 端口 2049 (TCP/UDP):主 NFS 通信
  • 端口 111 (TCP/UDP):rpcbind(尤其 NFSv3 需要)
  • 端口 20048 (TCP/UDP):NFS 挂载守护进程
  • 端口 20049 (TCP/UDP):NFS 锁管理器

对于 NFSv4,仅需端口 2049,便于防火墙配置。

4. NFS 有哪些替代方案?

根据需求,存在多种替代方案:

5. 如何排查 NFS 挂载问题?

常见排查步骤:

检查 NFS 服务状态:

sudo systemctl status nfs-kernel-server  # 主机
sudo systemctl status nfs-common         # 客户端

验证导出配置:

sudo exportfs -v

检查挂载点:

df -h
mount | grep nfs

查看 NFS 日志:

tail -f /var/log/syslog | grep nfs

6. 如何保护 NFS 设置?

NFS 安全最佳实践:

  • 使用 NFSv4 以增强安全性
  • 在 /etc/exports 中限制仅允许特定 IP 访问
  • 使用 root\_squash 防止 root 访问

实施防火墙规则:

sudo ufw allow from client_ip to any port nfs
  • 使用私有网络或 VPN
  • 定期审计权限安全

7. 有哪些性能优化方案?

多种提升 NFS 性能的选项:

使用 nconnect 建立并行连接:

mount -t nfs -o nconnect=8 host_ip:/share /mountpoint

调整读/写缓冲区大小:

mount -t nfs -o rsize=8192,wsize=8192 host_ip:/share /mountpoint
  • 使用 async 提升写入性能(需谨慎)
  • 通过 actimeo 实现适当的缓存
  • 考虑使用 10 Gbit 网络以提高吞吐量

8. 如何卸载 NFS 共享?

卸载 NFS 共享:

sudo umount /mountpoint

如果共享正忙:

sudo umount -f /mountpoint  # 强制卸载
sudo umount -l /mountpoint  # 延迟卸载

如果不想在重启后重新挂载,请记得删除或注释掉 /etc/fstab 中的对应行。

9. NFS 各版本有何区别?

NFS 各版本关键区别:

  • NFSv3​:

    • 使用多个端口
    • 需要 rpcbind
    • 性能优于 v2
    • 仍被广泛使用
  • NFSv4​:

    • 单端口(2049)
    • 安全性更好
    • 性能更优
    • 有状态协议
    • 推荐用于新部署
  • NFSv4.1​:

    • 并行 NFS (pNFS)
    • 可扩展性更好
    • 会话管理
    • 高级功能

10. 如何监控 NFS 性能?

可用的工具:

nfsstat 查看 NFS 统计:

nfsstat -c  # 客户端统计
nfsstat -s  # 服务器统计

iostat 查看 I/O 统计:

iostat -x 1
  • nfsiostat 查看 NFS 专用 I/O:

系统监控工具如 Prometheus 或 Grafana 配合 NFS 导出器

11. 常见的 NFS 挂载选项有哪些?

重要的挂载选项:

  • rw/ro:读-写或只读
  • sync/async:同步或异步写入
  • no\_root\_squash:允许 root 访问
  • no\_subtree\_check:禁用子树检查
  • soft/hard:处理服务器不可用的方式
  • intr:允许硬挂载时中断
  • tcp/udp:传输协议
  • vers:使用的 NFS 版本

使用多个选项的示例:

mount -t nfs -o rw,sync,no_subtree_check,vers=4 host_ip:/share /mountpoint

结论

在本教程中,我们创建了一个 NFS 主机,并通过创建两个不同的 NFS 挂载(与 NFS 客户端共享)演示了 NFS 的一些关键行为。

如果您计划在生产环境中实施 NFS,请注意该协议本身不提供加密。在私有网络上共享时,这可能不是问题。但在其他情况下,需要使用 VPN 或其他类型的加密隧道来保护数据。对于加密替代方案,可考虑使用 SSHFS 或建立 VPN 连接。

如果你正在考虑将 NFS 应用于你的 AI、Web 应用集群、媒体存储分发、持续集成/测试环境等业务上,或者你希望进一步了解 DigitalOcean 云平台为 NFS 优化的高性能存储方案与全球网络架构,欢迎咨询 DigitalOcean 中国区独家战略合作伙伴——卓普云 AI Droplet(aidroplet.com)。我们为企业客户提供从产品选型、架构设计到技术支持的全流程服务,助力你的业务稳定高效地运行在全球云端。

在现代软件开发中,生成文档自动化变得越来越重要。借助像 Spire.Doc for .NET 这样的库,我们可以轻松地在 C# 中创建和操作 Word 文档。本文将介绍如何使用 Spire.Doc 创建一个简单的 Word 文档,涉及到标题、段落等文本元素的添加。

Spire.Doc for .NET 简介

Spire.Doc 是一款功能强大的 .NET 文档处理组件,它允许开发者在 C# 和 VB.NET 中创建、读取、编辑和保存 Word 文档。该库支持多种格式,包括 DOC、DOCX、HTML 和 PDF。用户可以简单地通过代码来控制文档的内容和样式,进而生成满足需求的文档。

NuGet 安装

要在项目中使用 Spire.Doc,你可以通过 NuGet 包管理器轻松安装。只需在命令行中输入以下命令:

Install-Package Spire.Doc

安装完成后,你就可以开始使用 Spire.Doc 创建 Word 文档了。

示例代码

下面的代码示例展示了如何使用 C# 和 Spire.Doc 创建一个包含标题和段落的简单 Word 文档。

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

namespace CreateSimpleWordDocument
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Document对象
            Document document = new Document();

            // 添加节
            Section section = document.AddSection();

            // 设置页边距
            section.PageSetup.Margins.All = 60f;

            // 添加一个标题段落
            Paragraph title_para = section.AddParagraph();
            TextRange textRange = title_para.AppendText("这是标题");
            title_para.ApplyStyle(BuiltinStyle.Title);
            textRange.CharacterFormat.FontName = "宋体";

            // 添加几个小标题段落
            string[] headings = { "这是标题1", "这是标题2", "这是标题3", "这是标题4" };
            for (int i = 0; i < headings.Length; i++)
            {
                Paragraph heading = section.AddParagraph();
                textRange = heading.AppendText(headings[i]);
                heading.ApplyStyle((BuiltinStyle)((int)BuiltinStyle.Heading1 + i));
                textRange.CharacterFormat.FontName = "宋体";
            }

            // 添加一个段落
            Paragraph normal_para = section.AddParagraph();
            normal_para.AppendText("这是一个段落。");

            // 创建段落样式
            ParagraphStyle style = new ParagraphStyle(document);
            style.Name = "paraStyle";
            style.CharacterFormat.FontName = "宋体";
            style.CharacterFormat.FontSize = 13f;
            style.CharacterFormat.TextColor = Color.Brown;
            document.Styles.Add(style);

            // 将自定义样式应用到指定段落
            normal_para.ApplyStyle("paraStyle");

            // 保存文档
            document.SaveToFile("AddText.docx", FileFormat.Docx);

            // 释放资源
            document.Dispose();
        }
    }
}

代码详解

  1. 创建 Document 对象 :首先,我们实例化一个 Document 对象,这是文档的核心。
  2. 添加节 :使用 AddSection() 方法,我们可以向文档添加新的节。
  3. 设置页面边距 :使用 PageSetup.Margins 属性可以轻松设置页边距。
  4. 添加标题和段落

    • 我们可以通过 AddParagraph() 方法添加段落,并利用 AppendText() 方法添加文本。
    • Spire.Doc 允许使用内置样式,通过 ApplyStyle() 方法为段落应用不同的样式。
  5. 自定义段落样式 :使用 ParagraphStyle 类,我们可以定义自己的段落样式并应用到段落上。
  6. 保存文档 :最后,我们使用 SaveToFile() 方法将文档保存为 .docx 格式。

更多功能

如果想要了解如何在 Word 文档中添加图片、列表等更复杂的元素,可以参考 Spire.Doc 的在线教程。这些教程涵盖了库的更多先进功能,帮助你更好地掌握文档生成的技术。

结论

通过本文的介绍,你应该能够使用 C# 和 Spire.Doc 创建一个包含基本元素的 Word 文档。无论是生成报告、合同或其他任何文档,Spire.Doc 都提供了丰富的功能,满足各种需求。继续探索更多特性,你将能创建出更加复杂和专业的文档。

慕了!内存芯片巨头人均发 64 万年终奖;月之暗面总裁张予彤:Kimi 仅使用美国顶尖实验室 1% 的资源;32 岁程序员猝死背后公司:不配合工伤认定,曾给 39 万“封口费”;黄仁勋现身上海菜市场;大清洗!大众裁员 3.5 万人,包括 1/3 高管;微信聊天不能导出和分析;腾讯回应开源项目被下架;苹果 Siri「偷听」集体诉讼和解,美国用户开始获赔 9500 万美元;传阿里旗下芯片公司平头哥拟独立上市;马斯克:星舰今年目标全复用,成本将下降 99%;TikTok 宣布“美国方案”:成立数据安全合资公司,字节保留算法知识产权;黄景瑜成为中国首批商业航天太空旅客……

 

行业热点

 

慕了!内存芯片巨头人均发 64 万年终奖

 

1 月 19 日,据韩媒报道,全球内存芯片行业的三巨头之一 SK 海力士宣布,将向全体员工发放人均超 1.36 亿韩元(约合 64 万元人民币)的绩效奖金,创公司历史最高纪录。据报道,SK 海力士为员工提供以公司股票形式领取绩效奖金的选项,即“股东参与计划”。根据股东参与计划,员工可以选择将其年终奖的最多 50%以公司股票形式领取。持有这些股票满一年的员工,将获得相当于购买金额 15%的额外现金奖励。例如,一位获得 1 亿韩元年终奖的员工如果选择顶格持股,将获得价值 5000 万韩元的股票。若持有一年,该员工还将额外获得 750 万韩元。

 

2024 年,由于半导体行业低迷,SK 海力士推出了该计划。但由于当年仅发放了慰问金而未发放绩效奖金,因此当时未能实施。该计划从去年开始向员工提供购股选择。随着去年下半年劳资双方达成的新指南于本月底生效,SK 海力士员工的奖金金额预计将大幅增加。根据新协议,此前绩效奖金发放最高限额为 1000%(即 10 个月基本工资)的规定已被废除。取而代之的是,以上一年度营业利润的 10%作为年终奖,其中 80%的绩效奖金在当年发放,剩余 20%分两年递延发放,并享受每年 10%的利息。

 

鉴于 SK 海力士去年全年营业利润预计为 45 万亿韩元,员工总数为 3.3 万人,因此预计每位员工的绩效奖金约为 1.36 亿韩元(约合 64 万元人民币)。不过,“股东参与计划”也存在潜在变数。SK 海力士在公告中提示,韩国国会正在推进《公司法第三次修订案》审议,其中明确要求企业回购的自有股必须注销。若法案在本月或 3 月正式通过,企业将无法用自有股开展员工激励,本次持股计划或面临调整甚至取消。相关修订案将于 1 月 21 日进入议案审查小组讨论环节。行情数据显示,得益于人工智能热潮,SK 海力士的股价在 2025 年内涨幅达 275%。同时,今年年初,SK 海力士就表示其 2026 年的全部芯片产能已售罄。

 

月之暗面总裁张予彤:Kimi 仅使用美国顶尖实验室 1%的资源

 

1 月 21 日,月之暗面 Kimi 总裁张予彤出席在瑞士达沃斯举行的世界经济论坛 2026 年年会时表示,Kimi 仅使用美国顶尖实验室 1%的资源,就开放出 Kimi K2、Kimi K2 Thinking 这样全球领先的开源模型,甚至在部分性能上超越美国的顶尖闭源模型。张予彤透露,Kimi 投入大量精力将工程化思维引入研究环节,确保所有算法创新都能在生产系统中大规模稳定运行,据她透露,Kimi 最新模型将很快发布。

 

1 月 19 日,据外媒报道,两位知情人士透露,月之暗面 Kimi 在最新一轮融资中估值达到 48 亿美元(约合 330 亿元人民币),而就在几周前,该公司的估值还为 43 亿美元。消息人士称,由于市场需求旺盛,此轮融资可能很快就会完成。截至本文发布时,月之暗面尚未回复置评请求。消息人士补充说,由于市场对中国 AI IPO 候选企业的兴趣激增,该公司在后续几轮融资中的估值可能会更高。

 

32 岁程序员猝死背后公司:不配合工伤认定,曾给 39 万“封口费”

 

2025 年 11 月 29 日,32 岁程序员高广辉(视源股份任职 7 年)因长期工作强度大、频繁熬夜,在身体不适晕倒送医后抢救无效死亡,病历标注其“经常熬夜,工作强度大”。事发当日,他送医前仍叮嘱妻子“带上电脑”计划住院工作,急救期间及离世 8 小时后仍收到同事工作消息,当日曾 5 次登录公司 OA 系统,但公司隐藏后台时间,给工伤认定带来阻碍。

 

高广辉的工作状态极具代表性:公司实行“弹性工作制”却无加班费,他需同时承担研发、管理、售后、拉业务等多项职责,入职 7 年底薪始终 3000 元,依赖“多劳多得”维持税前 2.9 万元月薪,且面临每季度末位淘汰压力,长期深夜甚至凌晨回家成为常态。他曾在 GitHub 开源“反 996”项目,提醒同行“不要被任务压垮”,其离世后该项目被大量悼念留言刷屏。

 

事发后,视源股份的处理引发争议:6 天后向家属支付 39 万元“人道主义抚恤金”,实则附带“负面评价需支付 50 万违约金”的“封口费”条款;删除高广辉企业微信工作号、撤掉工位、丢失部分遗物,并要求全体员工不得提及此事,且不配合工伤认定相关调查。

 

“大概就是炒掉我老公的 N+1 钱,其实就是封口费,说如果我对公司造成负面评价违约金 50 万,当时被逼的没办法所以签了。”高广辉妻子对凤凰网说道,后续因为高父想要提前分遗产,分走了三十多万元,“其实(这笔钱)我只拿到四到六万。”

 

据报道,视源股份是一家业务涵盖教育、办公、AI、汽车电子等多领域的上市公司,技术人员占比超 58%,资料显示“无刚性考勤、人性化管理”,且福利优厚,但背后是普遍的强制加班文化。前员工反映,加班至深夜是常态,休假、就医需随身携带电脑,拒绝加班会影响绩效,部分员工因长期高压出现躯体化症状。公司近年盈利持续下滑,正推进 H 股上市,业务扩张压力最终转嫁至一线员工。

 

目前高广辉的工伤认定仍在调查中,律师表示,若能提供工作记录、加班文化等证据证明猝死与工作高度相关,可认定为工伤,居家办公也可视为工作时间延伸。高广辉家属希望此事能敲响职场警钟,推动职场环境改革,避免类似悲剧重演。

 

黄仁勋现身上海菜市场

 

昨天,黄仁勋现身陆家嘴街道乳山路锦德菜市场,体验上海市井风俗。此前,多位知情人士透露,黄仁勋再度来华,首站到访了英伟达位于上海的新办公室,与员工见面并回答了诸多员工关注的问题,同时回顾公司 2025 年主要事件。

 

大清洗!大众裁员 3.5 万人,包括 1/3 高管

 

1 月 21 日,德国汽车制造商大众汽车周三表示,其核心品牌集团计划削减管理岗位并整合生产平台,目标是到 2030 年节约 10 亿欧元。该公司在声明中表示,计划在 2026 年夏季前将大众核心品牌集团的董事会成员数量减少约三分之一。报道称,这意味着董事会职位将从 29 个减少到 19 个。

 

该公司补充说,大众乘用车、斯柯达和西雅特/Cupra 等品牌未来将各有四名董事会成员——一位首席执行官,加上财务、销售和人力资源主管--而开发、采购和生产将由位于沃尔夫斯堡的汽车制造商总部处理。它表示,将在中期内进一步逐步精简核心品牌集团内部的管理结构。该公司表示,核心品牌集团的 20 多家全球运营工厂将被组织成五个生产区域,区域经理将承担跨品牌和跨国家的责任。

 

大众汽车正努力应对工业放缓、来自中国的激烈竞争和昂贵的关税,到 2030 年将在德国削减 3.5 万个工作岗位。媒体曾报道称,大众核心品牌集团首席执行官托马斯·谢弗预计的节约成本由 6 亿欧元的人力成本和 4 亿欧元的生产效率组成。大众汽车的此次改革,远不止于财务上的“节流”。它标志着集团在向电动化与数字化转型的关键时期,正试图重塑其庞大的管理体系——通过削减层级、整合资源与强化区域协调,构建一个更敏捷、更高效的运营模式。

 

微信聊天不能导出和分析?腾讯回应开源项目被下架

 

1 月 22 日下午消息,近日在小红书等社交媒体上,有用户发帖表示,腾讯要求全球最大代码托管与协作平台 GitHub 全面下架一批微信开源项目,相关项目主要涉及“允许用户导出或分析自己微信聊天记录”。

 

这一话题引发网友讨论,部分网友质疑表示,像导出个人聊天记录、清理微信缓存这类基础功能工具,本该是提升用户体验的标配,可微信不仅自己不提供,还不允许用户自主优化使用体验。这是否说明用户对微信数据没有自主权。

 

对此,腾讯方面回应称,部分读取微信聊天记录的开源项目,是通过对微信客户端进行逆向工程等手段,破解本地数据库的密钥,以绕过微信客户端的加密措施,威胁用户本人及第三方数据隐私与客户端安全,且极易被黑灰产利用。腾讯依据相关法规向开源平台提出请求,并获得了平台支持,大部分项目也在平台沟通后选择主动移除违规内容。

 

苹果 Siri「偷听」集体诉讼和解,美国用户开始获赔 9500 万美元

 

苹果去年年初就 Siri「非法且故意录音」集体诉讼达成和解。该事件可追溯至 2019 年,苹果曾否认指控并加强隐私保护。从去年年中起受影响用户可提交索赔申请,如今部分用户已陆续收到赔付款。用户需在 2014 年 9 月 17 日至 2024 年 12 月 31 日购买过支持 Siri 的设备且经历过「非预期激活 Siri」才能申请。本次赔付总价值 9500 万美元,每名用户最多申报 5 台设备,最初预计每台赔 20 美元、单人最多 100 美元,最终每台约 8.02 美元、最多 40.1 美元。成功参与和解的用户,直接转账的赔付款从前天开始陆续到账,选择支票 / 礼品卡形式的需留意邮箱或实体邮箱。

 

传阿里旗下芯片公司平头哥拟独立上市

 

1 月 22 日下午消息,接近市场人士称,阿里巴巴集团已决定支持旗下芯片公司平头哥未来独立上市。平头哥是阿里巴巴集团旗下全资芯片公司,2018 年成立以来,在行业中非常低调,是阿里雪藏多年的“核武器”。如今平头哥芯片正式浮出水面。阿里方面对此消息未作评论。

 

截至目前,平头哥在算力芯片领域推出 AI 推理芯片含光 800、CPU 倚天 710 以及 AI 芯片 PPU,在存储芯片领域推出 SSD 主控芯片镇岳 510,在网络芯片领域据称也将推出相关芯片,已布局数据中心全栈芯片。平头哥还在端侧芯片推出羽阵 IoT 芯片,已实现数亿出货,布局覆盖云端和终端。此外,2026 年 1 月 2 日,百度集团宣布,昆仑芯已于 1 月 1 日通过其联席保荐人向香港证券交易所提交了上市申请表。在拟议的分拆完成后,昆仑芯预计仍将作为子公司。

 

马斯克:星舰今年目标全复用,成本将下降 99%

 

2026 年 1 月 22 日,特斯拉首席执行官埃隆·马斯克在达沃斯世界经济论坛与贝莱德首席执行官拉里·芬克交谈时,阐述了其在太空探索、人工智能、机器人及自动驾驶领域的愿景与规划。

 

在太空探索领域,马斯克表示 SpaceX 今年的目标是实现“星舰(Starship)”的完全可重复使用。作为有史以来最大的飞行器,星舰若达成该目标,将使进入太空的成本降至当前的 1%(每磅 100 美元以下)。此外,他还提及未来两到三年计划发射太阳能驱动的人工智能卫星,由于太空中太阳能持续充足且无大气干扰,太阳能电池板效率将是地球的五倍,未来太空或将成为部署人工智能成本最低的地方,而此前他曾提出未来四到五年内将大规模人工智能系统部署到轨道的设想。

 

在机器人领域,马斯克透露特斯拉计划明年年底向公众销售人形机器人 Optimus,目前该机器人已在工厂执行简单任务,预计今年年底将具备更复杂功能。

 

自动驾驶方面,马斯克称自动驾驶汽车“基本是已解决的问题”,特斯拉“全自动驾驶”软件每周都会更新,部分保险公司已为使用该技术的客户提供半价保险。目前特斯拉已在美国多个城市推出自动驾驶出租车服务,计划今年年底在美国大规模推广,欧洲则有望下月获得全面自动驾驶监管批准。

 

此外,马斯克此前在社交媒体 X 上表示,Cybercab(无人驾驶出租车)和 Optimus 的生产速度将呈 S 型曲线逐步加快。他还展望,今年年底或最迟明年,人工智能将“比任何人更聪明”,其公司的总体目标是“最大限度提高人类文明拥有美好未来的可能性”,并“将意识扩展到地球之外”。

 

资本市场上,商业航天概念板块热度颇高,价格波动情况受到市场广泛关注。

 

TikTok 宣布“美国方案”:成立数据安全合资公司,字节保留算法知识产权

 

北京时间 1 月 23 日,TikTok 发布公告称已成立 TikTok 美国数据安全合资有限责任公司,负责 TikTok 美国的数据保护等业务,字节跳动继续拥有 TikTok 算法知识产权并授权其使用。TikTok 美国公司由字节跳动全资控股,负责电商等商业活动及全球产品互联互通。这意味着 TikTok 美国方案正式落地,超 2 亿美国用户可继续使用。合资公司中,甲骨文、银湖资本、MGX 各持股 15%,字节跳动保留 19.9% 股份为最大单一股东,由七人董事会管理。TikTok 美国公司保障产品全球内容互联、体验一致,其商业活动是重要收入来源。

 

黄景瑜成为中国首批商业航天太空旅客

 

1 月 22 日,黄景瑜以「009 号太空游客」身份官宣成为中国首批商业航天太空旅客,计划 2028 年搭乘国产可重复使用载人飞船飞赴亚轨道太空,同行者包括中国工程院院士李立浧等人。他们将乘坐亚轨道载人飞船穿越卡门线,体验至少 5 分钟失重并俯瞰地球。

 

据穿越者此前消息,穿越者已开启船票预售,预售船票 300 万/张,预付 10%可锁定名额,目前已签约来自学界、商界、航天界、艺术界、娱乐界、网红界等领域的十余位付费太空游客。

 

智元机器人 CMO 邱恒是“中国 001 号商业航天员”。邱恒于 2023 年自费购买中国首张商业航天“太空船票”,成为首位签约亚轨道飞行的普通人。他表示,人形与四足机器人能创造无限生产力,这样的生产力正加速服务工业、商业,未来也有可能助力人类拓展新的疆域。

 

2023 年 11 月,穿越者与首位太空游游客签约。据穿越者官方消息,目前穿越者载人飞船的签约游客有中国工程院院士李立浧、旅美诗人林小颜、广州正佳集团副董事长兼首席执行官谢萌、星河动力 CEO 刘百奇、航天垂类大 V 博主 @NASA 爱好者等。

 

1 月 18 日,穿越者自主研制的穿越者壹号(CYZ1)载人飞船试验舱,完成着陆缓冲系统的综合验证试验。穿越者介绍,这是我国商业航天领域首个载人飞船全尺寸试验舱着陆缓冲关键技术验证项目,此次试验的成功,标志着穿越者已成为全球第三家研发并验证了载人飞船着陆缓冲技术的商业航天企业。

 

穿越者官方资料显示,穿越者成立于 2023 年 1 月,是中国首家商业的“载人航天科技”有限公司,专注可重复使用载人飞船研制和太空旅游运营,计划 3-4 年首先完成亚轨道可重复使用载人飞船研制,2028 年前后实现中国乃至亚洲的太空旅游。

 

OpenAI 计划于今年下半年推出首款硬件设备

 

1 月 19 日消息,据 Axios 网站报道,OpenAI 政策主管克里斯 · 莱恩周一在达沃斯论坛透露,公司“正按计划”于 2026 年下半年推出其首款设备。OpenAI 首席执行官萨姆・奥特曼和苹果前首席设计师乔尼・艾维去年 5 月份曾透露,该公司正在研发一系列硬件产品,有望于 2026 年正式亮相。彭博社记者马克・古尔曼去年 11 月曾爆料,OpenAI 正在从苹果的硬件工程团队中大肆挖人。

 

据悉,其合作开发的神秘 AI 硬件已拥有首个原型机,奥尔特曼称原型机的表现“令人惊叹”,并表示项目正按预期推进,并透露该产品将在两年内投入生产。在本次活动中,两人阐述了该设备的核心理念:彻底改变人们使用计算机的方式。他们认为,当前的智能设备如同“走在纽约时代广场”,充斥着各种干扰信息,无法带来平静。因此,这款新设备旨在创造一种“坐在湖边小屋”般的宁静体验,让用户能专注于真正重要的事情。

 

大模型一周大事

 

重磅发布

 

DeepSeek 新模型“Model 1”曝光,疑似“高效推理模型”

 

1 月 21 日下午消息,DeepSeek 于官方 GitHub 仓库更新了一系列 FlashMLA 代码,在这些更新中,一个名为“Model 1”的模型引起了广泛关注。据悉,目前这个还很神秘的 Model1 不仅出现在了代码与注释中,甚至还有与 DeepSeek-V3.2 并驾齐驱的文件。这也不禁引发广大网友猜测,认为 Model 1 很可能就是传闻中 DeepSeek 将于春节前后发布的新模型代号。

 

最新消息显示,Model1 是 DeepSeek FlashMLA 中支持的两个主要模型架构之一,另一个是 DeepSeek-V3.2。这很可能是一个高效推理模型,相比 V3.2 内存占用更低,适合边缘设备或成本敏感场景。此外,它也可能是一个长序列专家,针对 16K+序列优化,适合文档理解、代码分析等长上下文任务。

 

阿里推出 AIGC 设计应用“呜哩 (Wuli)”,集成通义千问图像模型

 

1 月 20 日,阿里巴巴推出了一款名为“呜哩”的 AIGC 创意设计生产力平台,并已正式开启测试。该平台旨在为内容创作者、设计师及营销人员提供一套高效多元的 AI 创意生成解决方案。平台深度整合了通义千问团队研发的多款图像大模型,形成一个模型全家桶。其中包括主打高质量的 Qwen Image25.12 生成模型、追求极致响应速度的 Qwen Image Turbo 模型,以及专注于细节调整的 Qwen Image25.11 编辑模型。用户可根据不同创作需求,在生成质量、速度与可控性之间灵活选择。

 

在功能层面,呜哩平台提供了从图片生成、视频生成到灵感联想、翻译辅助及资源库支持的完整具集,可帮助用户跨越创意瓶颈。用户通过输入简单的描述,即可快速生成如 3D 艺术字体、电影风格海报、电商场景图在内的丰富内容。

 

百川推出最低幻觉循证增强医疗大模型 M3 Plus

 

1 月 22 日,百川智能正式发布 Baichuan-M3 Plus,严肃医疗场景下的问答准确性、可靠性,再次刷新了刚刚推出的 M3 所创下的世界纪录。凭借独创的六源循证技术与 M3 基座结合,M3 Plus 将幻觉率降低至 2.6%,低于 Open Evidence,达到全球最低水平;首创“证据锚定”技术,不仅给出引文来源,还能将模型生成的每一句医学结论,精确锚定到原始论文中的对应证据段落。

 

微软 Copilot 测试 Real Talk 和视频生成功能

 

微软正邀请全球用户测试 Copilot 的 Real Talk 功能,并开始测试视频生成能力,以应对 Google Gemini 和 ChatGPT 的竞争。网络分析公司 SimilarWeb 数据显示,Copilot 网页端市场份额约为 1%。为提升竞争力,微软推出两项核心更新:Real Talk 模式与视频生成功能。

 

Real Talk 模式通过“深度”和“写作风格”两个维度调整 AI 回应方式。系统可根据对话历史自动选择对话深度(如标准、压缩)和风格(如休闲),并允许用户随时查看 AI 的思维过程,旨在实现更接近人类的对话体验。该模式下,Copilot 不再以程式化方式回应问题,而是表现出真实的好奇心。面对不合理提问时,会主动反驳并表达对特定话题的兴趣,而非对所有问题均表现出虚假热情,从而提升互动活跃度。

 

在安卓版 Copilot 中已发现“生成视频”功能开关,测试表明可创建最长 8 秒且包含音频的视频片段。目前尚不明确该视频功能基于微软自研或 OpenAI 的 Sora 模型,但已在基础版 Microsoft 365 订阅提供,未设置额外付费门槛。

 

文心 App 秘密筹划界面改版,将新增“多人多 Agent”群聊功能

 

1 月 21 日消息,文心 App 近期将启动交互界面改版,新增“多人、多 Agent 群聊”功能,以更加社交化、活人感的方式进行用户交互。目前,文心 App 群聊功能已开启内测,将很快与用户见面。据百度内部人士透露,这是国内 AI 应用首次从“一对一助手”进化为参与人类社交与协作的“智能成员”。

 

据介绍,文心 App 群聊功能将支持用户在同一群聊中调动多个 AI 角色,适用职场创意脑暴、办公协作、家庭成员间生活协同、趣味互动等场景。AI 能理解群聊上下文、识别成员意图,并根据讨论氛围精准判断介入时机,主动应答。

 

据相关人士透露,预计今年 2 月,文心 App 还将新增支持群聊内给自己或别人布置日程提醒,支持自定义个人的文心助手人设和回复风格,支持图生图能力和特色玩法类 Agent。

 

目前,文心 App 群聊功能已在内测阶段。百度内部人士表示:“我们其实没有考虑过要做一个微信或者取代微信,目前没有考虑,我相信大家也都感觉这个不现实,我们都是从需求和任务本身去出发的,大家如果真的有特定的任务,比如说家庭健康的任务、小组作业的任务、旅游规划的任务,或者是一些特别复杂的决策,我们希望提供一个平台给大家,大家可以尝试在这里面跟你的一些同事朋友去借助 AI 的能力,更好地完成你们的任务。”

 

X 平台正式开源推荐算法,马斯克:没有其他社交媒体这么做

 

1 月 20 日,马斯克宣布正式开源新的 X 平台算法,该算法由与 xAI 的 Grok 模型相同的 Transformer 架构驱动。马斯克坦言,我们知道这种算法很笨拙,还需要大幅改进。但至少可以看到 X 平台在实时、透明的情况下努力让它变得更好,没有其他社交媒体公司这样做。

 

据悉,该算法与当前运行的生产系统相同,并由 xAI 的 Grok 提供支持。完整代码已发布在 GitHub 上,并将每 4 周更新一次。用户的推荐内容会结合关注账号的帖子与 X 上发现的帖子,然后使用基于 Grok 的转换器进行排序。该转换器预测用户可能喜欢、回复、转发、点击或观看的几率。模型不仅预测单一分数,而是预测多种行为并综合它们,以实现更细致的排序。所有内容均直接从用户行为中学习。

 

特斯拉发布第二代人形机器人摆件:199 元

 

1 月 20 日,特斯拉中国官网发布 Tesla Bot 摆件(生肖盲盒版),售价 199 元,将于 1 月 21 日 10:00 开售。据介绍,Tesla Bot 系列摆件是以 1:10 比例打造的可动收藏玩偶,由 40 多个独立零件组成,配备 20 个关节点。

产品尺寸为 5.5cm x 18.2cm,净重约 25 克。无论是外观细节还是动作表现,均高度还原第二代人形机器人。用户可以自由调整摆件姿势,如双手抱拳的拜年造型、手持节日道具的俏皮模样。

据了解,盲盒内还有神秘嘉宾,将以 10% 的概率随机出现,可能是身穿新年限定服饰的 Tesla Bot(马年生肖特别版),也可能是 Tesla Bot 的神秘好友。

 

苹果内部“ChatGPT”曝光:能 AI 写代码、改文案、分析文件等

 

1 月 22 日消息,日前,据外媒报道,苹果公司于 2025 年 11 月在内部推出名为 Enchanté 的类 ChatGPT 聊天机器人,以及名为“企业助手”(Enterprise Assistant)的知识中心应用。消息称 Enchanté 界面酷似 macOS 版 ChatGPT,但专为苹果严格的安全需求定制。媒体援引博文介绍,Enchanté 仅运行苹果批准的模型(含苹果自研基础模型以及 Claude 和 Gemini),且完全在本地或私有服务器上运行。该工具不仅能协助员工完成创意构思、代码开发和校对工作,还能深度分析员工上传的文档和图像,且杜绝了任何向第三方发送敏感数据的风险。

 

另一款名为“企业助手”(Enterprise Assistant)的应用则更具针对性,它充当了苹果员工的中央知识库。该工具完全基于苹果内部的大语言模型(LLM)构建,整合了海量的内部政策与技术文档。员工可通过它快速查询高管职责、商业行为准则、健康保险福利,甚至包括“如何在 iPhone 上配置 XXX”等具体技术指南,极大地简化了信息检索流程。这两款应用均内置了反馈机制,允许员工对 AI 的回答质量进行评分,甚至能将苹果自研模型的回答与第三方模型进行“同屏比对”。

 

虽然苹果尚未公开具体细节,但行业普遍认为,这些来自工程、设计及营销等跨部门的高质量内部数据,将直接用于训练和微调其基础模型。该媒体认为这种“内部试错”的模式,或许正是苹果在 Apple Intelligence 发展受阻的背景下,试图通过提升模型硬实力来打破僵局的关键一步。

 

企业应用

 

  • 1 月 22 日,手机厂商 vivo 在近期叫停了 AI 眼镜项目。这一项目此前已秘密筹备半年时间,并已与歌尔、中科创达在内的多家 ODM 厂商合作 demo。原因是 vivo 执行副总裁胡柏山在内的多位高层判断,其 AI 眼镜“在当下很难做出差异化”。报道指出,叫停 AI 眼镜项目之后,vivo 将继续聚焦混合现实(MR)方向。

  • 1 月 20 日,OpenAI 宣布,将为旗下 ChatGPT 个人版推出年龄识别模型,助力这家人工智能企业识别出未满 18 周岁用户的账号。该公司表示,此模型的运行依托账号数据信号与用户行为数据信号的结合分析。具体信号涵盖用户长期使用习惯、账号注册时长、日常活跃时段以及用户自行填报的年龄信息。管理解决方案提供商 ServiceNow 达成三年期协议,将 AI 模型集成进后者的业务软件。

工业AI原生企业的定义与价值
工业AI原生企业并非简单地将通用人工智能技术移植到工业场景,而是从底层架构开始就为工业领域深度定制的新型技术供应商。这类企业通常具备一个显著特点:他们的技术产品生来就为了解决工业场景中的具体问题,比如设备预测性维护、生产工艺优化或质量缺陷检测。与传统AI公司不同的是,工业AI原生企业更注重技术与工业知识的融合,而非单纯追求算法层面的创新。这种深度结合让它们在应对复杂工业环境时表现出更强的适应性。
然而,工业领域的特殊性也意味着这类企业面临更高门槛。产线数据往往存在噪声大、格式不统一的问题,且不同行业甚至不同工厂的需求差异显著。正因如此,工业AI原生企业需要既懂技术又懂工业的人才团队,能够深入生产一线理解业务逻辑。这种跨界能力成为其核心竞争力的重要组成部分,但也导致真正能跑通商业模式的企业并不多见。
核心能力与行业适配性
工业AI原生企业的核心能力体现在三个方面:技术架构的工业兼容性、行业知识的沉淀效率以及解决方案的可扩展性。首先,他们的技术平台通常支持多源异构数据接入,能够直接对接PLC、SCADA等工业系统,而无需经过复杂的数据清洗和转换。这种原生兼容性大幅降低了实施门槛,让企业能够快速启动项目而不必担心数据孤岛问题。
其次是行业知识的积累方式。优秀的工业AI原生企业会通过模块化、组件化的方式沉淀行业经验,例如将钢铁行业的工艺优化模型调整为化工行业可用的版本。这种知识复用机制不仅加速了项目交付,还降低了定制化开发成本。不过,这种能力需要长期积累,新兴企业往往难以在短期内构建完善的行业知识库。
最后是解决方案的灵活性。工业场景的需求变化频繁,今天可能关注能耗管理,明天可能转向产能提升。工业AI原生平台需要能够通过低代码甚至零代码方式快速调整模型和规则,避免每次需求变更都带来冗长的开发周期。这种敏捷性正是传统工业软件供应商难以匹敌的。
典型案例与实战分析
广域铭岛在工业AI原生领域展现出独特价值,其基于Geega平台打造的智能制造解决方案已在家电、汽车等行业落地。例如为某家电企业实施的质检优化项目,通过AI视觉技术替代传统人工检测,将漏检率降低至0.5%以下,同时提升了3倍检测效率。这种成果得益于其平台对工业协议的天然支持和多年积累的行业知识库。但值得注意的是,该平台更擅长离散制造领域,在流程工业中的实践案例相对有限。
对比来看,美国的C3.ai提供了另一种发展路径。其工业AI平台专注于预测性维护和能源优化,尤其在石油、电力等流程工业中积累了丰富经验。埃克森美孚就利用其系统实现了炼油设备的故障预测,将非计划停机时间减少了40%。不过,C3.ai的解决方案定价较高,且对本地化部署的支持较弱,这对预算有限或数据合规要求严格的中国企业可能形成障碍。
另一家值得关注的企业是德国的Siemens Advanta,其将工业知识和AI技术深度融合,在数字孪生领域表现突出。欧洲企业这种扎实的工业根基值得借鉴,但其系统复杂度较高,需要客户具备较强的技术团队配合实施。

如题。

之前试过手机网络抓包,可以下载,但是音频估计被加密过了播放不了。

也试过手机录屏再提取音频但是音质不理想。

看看大佬们有没有其他方案?不要外接硬件录制的。

引言

消息队列的存储架构是决定其可靠性、吞吐量、延迟性能的核心因素,直接影响业务场景适配能力。本文聚焦三款主流消息队列 ——Kafka(LinkedIn 开源,侧重高吞吐)、RocketMQ(阿里开源,金融级特性突出)、JMQ(京东开源,侧重高可用与灵活性),从存储模型、数据组织、索引设计等维度展开深度对比,为技术选型与架构优化提供参考。​

本文将从概念辨析出发,系统拆解主流存储模型与存储引擎的设计逻辑,对比 JMQ、Kafka、RocketMQ的技术选型差异与架构设计。​
一、Kafka存储架构
1.1 核心存储模型:分区日志流
在这里插入图片描述

Topic - 主题

Kafka学习了数据库里面的设计,在里面设计了topic(主题),这个东西类似于关系型数据库的表,此时我需要获取中国移动的数据,那就直接监听中国移动订阅的Topic即可。

Partition - 分区

Kafka还有一个概念叫Partition(分区),分区具体在服务器上面表现起初就是一个目录,一个主题下面有多个分区,这些分区会存储到不同的服务器上面,或者说,其实就是在不同的主机上建了不同的目录。这些分区主要的信息就存在了.log文件里面。跟数据库里面的分区差不多,是为了提高性能。

至于为什么提高了性能,很简单,多个分区多个线程,多个线程并行处理肯定会比单线程好得多。

Topic和partition像是HBASE里的table和region的概念,table只是一个逻辑上的概念,真正存储数据的是region,这些region会分布式地存储在各个服务器上面,对应于kafka,也是一样,Topic也是逻辑概念,而partition就是分布式存储单元。这个设计是保证了海量数据处理的基础。我们可以对比一下,如果HDFS没有block的设计,一个100T的文件也只能单独放在一个服务器上面,那就直接占满整个服务器了,引入block后,大文件可以分散存储在不同的服务器上。

注意:
1.分区会有单点故障问题,所以我们会为每个分区设置副本数
2.分区的编号是从0开始的

在这里插入图片描述




Kafka 以「主题(Topic)- 分区(Partition)」为核心组织数据,每个分区本质是一个 append-only 的日志流,消息按生产顺序追加存储,保证分区内消息有序性。​

优点:可以充分利用磁盘顺序读写高性能的特性。存储介质也可以选择廉价的SATA磁盘,这样可以获得更长的数据保留时间、更低的数据存储成本。
1.2 数据组织:分段日志文件
•每个分区拆分为多个 Segment 文件(默认 1GB),命名格式为「起始偏移量.log」(如 00000000000000000000.log)​,做这个限制目的是为了方便把.log加载到内存去操作
•配套两类索引文件:.index(偏移量→物理地址映射)、.timeindex(时间戳→偏移量映射)​​

在这里插入图片描述




这个9936472之类的数字,就是代表了这个日志段文件里包含的起始offset,也就说明这个分区里至少都写入了接近1000万条数据了。

Kafka broker有一个参数,log.segment.bytes,限定了每个日志段文件的大小,最大就是1GB,一个日志段文件满了,就自动开一个新的日志段文件来写入,避免单个文件过大,影响文件的读写性能,这个过程叫做log rolling,正在被写入的那个日志段文件,叫做active log segment。
1.3 消息读/写过程
在这里插入图片描述

写消息:
•Index文件写入,Index文件较小,可以直接用mmap进行内存映射,避免频繁的磁盘I/O操作,提高写入性能;由于Index文件是稀疏索引,只需要记录关键位置的偏移量,因此即使使用mmap,写入的开销也相对较低。
•Segment文件写入,Segment文件较大,可以采用普通的写操作(FileChannel.write),由于Segment文件是顺序写入的,并且Kafka会利用操作系统的PageCache(页缓存)机制,写入操作会先写入到内存中,然后由操作系统在后台异步刷新到磁盘,可以进一步提高写入的性能。

读消息:
•Index文件读取,通常使用mmap方式读取,由于Index文件较小,且是稀疏索引,缺页中断的可能性较小。
•Segment文件读取,通常使用sendfile系统调用来实现零拷贝读取和发送,减少数据在用户空间与内核空间之间的拷贝次数,提高数据传输的效率。
1.4 关键技术

Kafka 作为高性能的消息中间件,其超高吞吐量的核心秘诀之一就是深度依赖 PageCache + 顺序 I/O + mmap 内存映射的组合。

PageCache,中文名称为页高速缓冲存储器。它是将磁盘上的数据加载到内存中,当系统需要访问这些数据时,可以直接从内存中读取,而不必每次都去读取磁盘。这种方式显著减少了磁盘I/O操作,从而提高了系统性能。

mmap(Memory-mapped file)是操作系统提供的一种将磁盘文件与进程虚拟地址空间建立映射关系的核心技术,本质是让进程通过直接操作内存地址的方式读写文件,无需传统的 read/write 系统调用。核心价值在于零拷贝和内存式文件访问,尤其适合大文件、高吞吐、随机访问的场景。

将日志段(.log)文件映射到内存,生产者写入时直接写内存(内核异步刷盘),消费者读取时直接从内存读取,实现超高吞吐(Kafka 的 “顺序写 + mmap” 是其高性能核心);

在这里插入图片描述

零拷贝流程示意图

零拷贝过程:
1.用户进程发起sendfile系统调用,上下文(切换1)从用户态转向内核态
2.DMA控制器,把数据从硬盘中拷贝到内核缓冲区。
3.CPU将读缓冲区中数据拷贝到socket缓冲区
4.DMA控制器,异步把数据从socket缓冲区拷贝到网卡,
5.上下文(切换2)从内核态切换回用户态,sendfile调用返回。
1.5 设计优势
•顺序写磁盘:Segment 文件仅追加写入,规避随机 IO,吞吐量极高(单分区可达 10 万 + TPS)​​
•索引轻量化:仅维护偏移量与时间戳索引,降低存储开销​
•副本同步:基于 ISR 机制,仅同步已提交消息,兼顾一致性与可用性
二、RocketMQ存储架构

Kafka的每个Partition都是一个完整的、顺序写入的文件,但当Partition数量增多时,从操作系统的角度看,这些写入操作会变得相对随机,这可能会影响写入性能。
2.1 核心存储模型:分离式设计

RocketMQ采用「CommitLog + ConsumeQueue + IndexFile」三层结构,彻底分离数据存储与索引查询:​
•CommitLog:全局单一日志文件(默认 1GB / 个,循环覆盖),存储所有主题的原始消息​​
•ConsumeQueue:按主题 - 队列维度拆分的索引文件,存储「消息物理地址 + 偏移量 + 长度」,供消费者快速查询​
•IndexFile:哈希索引文件,支持按消息 Key 查询

CommitLog:消息的原始日记本

CommitLog是RocketMQ存储消息的物理文件,所有消息都会按到达顺序写入这个文件。你可以把它想象成一本不断追加的日记本——每条消息都是按时间顺序记录的新日记。

// 消息存储的核心逻辑简化示例(非源码)
public void putMessage(Message message) {

 // 1. 将消息序列化为字节数组
 byte[] data = serialize(message);
 // 2. 计算消息物理偏移量
 long offset = commitLog.getMaxOffset();
 // 3. 将数据追加到CommitLog文件末尾
 commitLog.append(data);
 // 4. 返回消息的全局唯一物理偏移量
 return offset;

}

消息写入CommitLog时有三个关键特性:
1.顺序写入:所有消息按到达顺序追加到文件末尾,避免磁盘随机寻址
2.内存映射:通过MappedByteBuffer实现文件映射,减少数据拷贝次数
3.文件分割:单个CommitLog文件默认1GB,写满后创建新文件(文件名用起始偏移量命名)

举个例子,当生产者发送三条消息时,CommitLog文件可能长这样:

0000000000000000000(文件1,1GB)
2|--消息A(offset=0)
3|--消息B(offset=100)
4|--消息C(offset=200)
500000000001073741824(文件2,起始偏移量1073741824)

温馨提示:虽然CommitLog是顺序写,但读取时需要配合索引结构,否则遍历文件找消息就像大海捞针。

消费队列ConsumeQueue:消息的快速目录

如果每次消费都要扫描CommitLog,性能会惨不忍睹。于是RocketMQ设计了ConsumeQueue——它是基于Topic和Queue的二级索引文件。

每个ConsumeQueue条目包含三个关键信息(固定20字节):

1| CommitLog Offset (8字节) | Message Size (4字节) | Tag Hashcode (8字节) |

这相当于给CommitLog里的消息做了一个目录:

TopicA-Queue0的ConsumeQueue
2|--0(对应CommitLog偏移0的消息A)
3|--100(对应CommitLog偏移100的消息B)
4|--200(对应CommitLog偏移200的消息C)

当消费者拉取TopicA-Queue0的消息时:
1.先查ConsumeQueue获取消息的物理位置
2.根据CommitLog Offset直接定位到CommitLog文件
3.读取指定位置的消息内容

关键设计点:
•ConsumeQueue采用内存映射+异步刷盘,保证高性能
•单个文件存储30万条索引,约5.72MB(30万*20字节)
•通过hashCode快速过滤Tag,实现消息过滤

索引文件IndexFile:消息的全局字典

如果需要根据MessageID或Key查询消息,ConsumeQueue就不够用了。这时候就要用到IndexFile这个全局索引。

IndexFile的结构类似HashMap:
1.Slot槽位(500万个):存储相同hash值的Index条目链表头
2.Index条目(2000万条):包含Key的hash值、CommitLog偏移量、时间差等信息

当写入消息时:

// 索引构建过程简化示意
public void buildIndex(Message message) {

// 计算Key的hash值
int hash = hash(message.getKey());
// 定位到对应的Slot槽位
int slotPos = hash % slotNum;
// 在Index区域追加新条目
indexFile.addEntry(hash, message.getCommitLogOffset());

}

查询时通过两次查找快速定位:
1.根据Key的hash值找到Slot槽位
2.遍历Slot对应的链表,比对CommitLog中的实际Key值

性能优化必知:
•消息体积差异大时,CommitLog仍然保持顺序写,但ConsumeQueue可能出现「稀疏索引」(相邻索引指向的物理位置间隔大)
•生产环境中CommitLog建议放在单独SSD磁盘,ConsumeQueue和IndexFile可放普通磁盘
•遇到消息堆积时,优先检查消费者速度,而不是无脑扩容Broker存储

理解这些底层机制,下次遇到消息查询性能问题或者磁盘IO瓶颈时,就知道该从CommitLog的写入模式还是ConsumeQueue的索引结构入手排查了。
2.2 数据流转机制
•生产者写入 CommitLog,生成全局唯一偏移量(PHYOFFSET)​
•后台线程异步构建 ConsumeQueue 索引,同步消息元数据​
•消费者通过 ConsumeQueue 定位 CommitLog 中的消息,避免全量扫描

存储过程全景图

现在把各个模块串起来看消息的生命周期:
1.生产者发送消息到Broker
2.Broker将消息顺序写入CommitLog
3.异步线程同时构建ConsumeQueue和IndexFile
4.消费者通过ConsumeQueue快速定位消息
5.按需查询IndexFile实现消息回溯

整个过程就像图书馆的管理系统:
•CommitLog是藏书库(按入库时间摆放)
•ConsumeQueue是分类目录(按题材/出版社分类)
•IndexFile是检索电脑(支持按书名/作者查询)
2.4 设计优势
•读写分离:CommitLog 仅负责写入,ConsumeQueue 负责查询,提升并发性能​
•事务支持:通过 CommitLog 中的事务状态标记 + 回查机制,实现分布式事务消息​
•刷盘策略:支持「异步刷盘(高吞吐)」「同步刷盘(金融级可靠性)」动态切换
三、JMQ存储架构

JMQ的消息存储分别参考了Kafka和RocketMQ存储设计上优点,并根据京东内部的应用场景进行了改进和创新。
3.1 核心存储模型:分区日志 + 队列兼容

在这里插入图片描述

JMQ存储的基本单元是PartitionGroup。在同一个Broker上,每个PartitionGroup对应一组消息文件(Journal Files),顺序存放这个Topic的消息。

与Kafka类似,每个Topic包含若干Partition,每个Partition对应一组索引文件(Index Files),索引中存放消息在消息文件中的位置和消息长度。消息写入时,收到的消息按照对应的PartitionGroup写入依次追加写入消息文件中,然后异步创建索引并写入对应Partition的索引文件中。

以PartionGroup为基本存储单元的设计,在兼顾灵活性的同时,具有较好的性能,并且单个PartitionGroup可以支持更多的并发。
3.2 消息读/写过程

在这里插入图片描述

写消息:

JMQ的写操作使用DirectBuffer作为缓存,数据先写入DirectBuffer,再异步通过FileChannel写入到文件中。
•消息写入DirectBuffer后,默认写入该节点成功(数据的高可靠是通过Raft协议复制,用多个内存副本来保证),相对Kafka的写操作来看,JMQ响应写入请求的处理过程没有发生系统调用,在京东内部的大量单条同步发送的场景下开销更低、性能更优。
•同时也避免使用MappedByteBuffer(Mmap方式)产生Page Fault中断,OS在中断中将该页对应磁盘中的数据拷贝到内存中,在对文件进行追加写入的情况下,这一无法避免的过程是完全没有必要,反而增加了写入的耗时的问题。

读消息:

JMQ采用定长稠密索引设计,每个索引固定长度。
•定长设计的好处是,直接根据索引序号就可以计算出索引在文件中的位置:索引位置 = 索引序号 * 索引长度。这样,消息的查找过程就比较简单了,首先计算出索引所在的位置,直接读取索引,然后根据索引中记录的消息位置读取消息。
•在京东内部应用场景中,单条消息处理耗时高是比较常见的,微服务架构下用户一般会申请更多的消费节点,让每个消费节点单次拉取较小批量的消息进行处理,以提升消费并行度,这样消费拉取请求的次数会比较多,稠密索引的设计会更适用内部的应用场景。

JMQ消费读操作99%以上都能命中缓存(JMQ设计的堆外内存与文件映射的一种缓存机制),避免了Kafka可能遇到的Cache被污染,影响性能和吞吐的问题。同时直接读内存也规避了RocketMQ在读取消息存储的日志数据文件时容易产生较多的随机访问读取磁盘,影响性能的问题。(当没有命中缓存时,会默认降级为通过Mmap的方式读取消息)。
四、竞品对比分析


JMQ

Kafka

存储模型

以PartitionGroup为基本存储单元,支持高并发写入

以Partition为基本存储单元,支持灵活的数据复制和迁移

消息写入性能

- 单副本异步写入性能与 Kafka 相当 - 三副本异步写入性能优于 Kafka

- 单副本异步写入性能与 JMQ 相当 - 三副本异步写入性能略低于 JMQ

同步写入性能

- 同步写入性能稳定,几乎不受网络延迟影响

- 同步写入性能受网络延迟影响较大,稳定性略逊于 JMQ

多分区性能

- 多分区异步写入性能与 Kafka 相当 - 同步写入性能略低于 Kafka

- 多分区同步写入性能更稳定,适合高并发场景

副本机制

支持异步复制,副本间数据同步性能较好

支持异步和同步复制,副本机制成熟,适合复杂部署

跨机房部署

- 同步写入性能基本不受影响 - 异步写入性能下降

- 同步写入性能受网络延迟影响较大 - 异步写入性能下降

适用场景

- 对同步写入性能要求高 - 副本异步吞吐要求高 - 大规模微服务集群

- 复杂分区的高并发同步写入 - 大规模分布式系统 - 多语言生态支持丰富

在单副本场景下,JMQ与Kafka的单机写入性能均十分出色,均可达到网络带宽上限。

然而,在更贴近生产环境的三副本场景中,两者特性出现分化:

JMQ在三副本异步写入下的极限吞吐优势明显,且在跨机房部署时,其同步写入性能表现良好,几乎不受网络延迟影响;而Kafka则在多分区同步写入场景下展现出更稳定的性能,衰减小于JMQ。在大部分异步吞吐场景及不同消息体下的性能趋势上,两者表现相当。

综上所述,JMQ尤其适合对同步写入性能和副本异步吞吐有极高要求的场景,而Kafka在复杂分区的高并发同步写入方面适应性更广。