2026年1月

引言

随着大模型和多模态 AI 的快速发展,向量已成为文本、图像、音视频等多元数据的通用语义表示。在这种背景下,检索增强生成(RAG)技术成为连接私有知识与大模型的核心桥梁,而高效的向量检索则是其关键支柱。

与将向量检索视为独立外挂服务的方案不同,Apache Doris 4.0 选择将向量检索能力深度集成于其 MPP 分析型数据库内核。实现向量检索与 SQL 计算、实时分析和事务保障的无缝融合。

本文旨在深入剖析 Doris 向量检索的系统级设计与工程实践,展示其如何在性能、易用性与规模扩展之间取得的平衡。

1. ANN 索引核心设计

Apache Doris 的向量索引基于 ANN(近似最近邻)算法实现,并非独立的外挂组件,而是深度集成于存储、执行与 SQL 引擎中的原生能力。在 4.x 版本中,其核心 ANN 索引能力主要包括以下几方面:

  1. 多索引类型与距离度量支持:支持主流的 ANN 索引类型(HNSW、IVF)及常见距离度量(L2 距离、内积)。用户可根据业务在构建速度、内存占用与召回率上的要求灵活权衡。
  2. 原生 SQL 集成:向量检索以原生 SQL 算子形式提供,支持直接定义向量列、通过 ORDER BY distance LIMIT K 进行相似度搜索,并能与过滤、聚合、JOIN 等算子自由组合,天然支持混合检索与分析
  3. 构建与查询解耦:采用异步索引构建机制,数据导入后即可查询,索引在后台构建并加载,避免导入阻塞,保障查询高峰期的稳定低延迟写入。
  4. 向量压缩优化:在导入与构建阶段支持标量量化(SQ)、乘积量化(PQ)等压缩技术,显著降低存储与内存开销,提升高维大规模向量场景的资源效率。
  5. 分布式并行执行:依托于分布式架构,Doris 向量索引天然支持数据分片与索引分布式存储;查询可在各 BE 节点并行执行;Top-K 结果在上层进行合并与裁剪。随着节点数量增加,系统能够在数据规模与吞吐能力上实现近线性扩展。

2. Benchmark & Analysis

Apache Doris 的目标并非追求单一指标的极限表现,而是在真实生产负载下,实现性能的均衡性、系统稳定性与架构可扩展性。本次测试将围绕这一目标展开,所用工具为 ZillizTech 开源的向量搜索 BenchMark:https://github.com/zilliztech/VectorDBBench

  • 云服务商:阿里云
  • CPU:Intel Xeon Platinum 8369B @ 2.70GHz (16 核)
  • 内存:64GB

2.1 导入与构建性能

测试结果表明,在 Performance768D1M 数据集上,Apache Doris 在保证同等索引质量的前提下,导入性能显著优于对比系统。尤为重要的是,其导入速度的提升并未以牺牲图结构质量为代价。Doris 在 QPS 达到 895 的同时,仍保持了 97% 以上的召回率,在性能三角的三个维度上取得了出色的平衡

2.1 导入与构建性能.PNG

2.2 查询性能

即便单独考量查询性能,Apache Doris 同样处于业界第一梯队。

在 Performance768D10M 数据规模上,当召回率要求高于 95% 时,Apache Doris 的 QPS 表现优于 OpenSearch 与 Qdrant此结果为默认配置下的开箱性能,未针对 Segment 文件数量等进行专项调优

2.2 查询性能.png

这里比较的是开箱性能测试,即不做 segment 文件数量的优化时的性能对比。

Milvus 的 flat 版本以及 Cloud 版本会有更好的性能表现,但是其出品的 VectorDBBench 只提供了 SQ8 量化后的成绩。

3. 核心设计与性能优化

Apache Doris 采用 FE(协调节点)与 BE(计算节点)构成的分布式架构。BE 作为核心执行单元,承担查询计划执行与数据导入任务,负责几乎所有高负载计算与大规模数据吞吐,是系统高性能的基石。尤其在向量场景下,数据写入、索引构建与向量距离计算都属于典型的 CPU 与内存密集型工作。为充分发挥其性能、保障系统稳定运行,我们对 ANN 索引的写入、构建与查询路径进行了系统优化

3. 核心设计与性能优化.png

3.1 写入与构建路径优化

优化主要分为两类:功能优化性能优化

  • 在功能层面,依托 Doris 成熟的分布式集群管理与存储管理能力,引入 LightSchemaChange 实现轻量级的索引管理机制,这是目前专用向量数据库普遍不具备的能力。
  • 在性能层面,重点聚焦于索引构建流程的优化,以显著提升索引构建速度和整体吞吐能力。

3.1.1 异步索引构建机制

Apache Doris 针对 ANN 索引构建开销大的问题,提供了异步构建机制。用户可在数据导入后,选择业务低峰期触发索引构建;在查询高峰时,仅需将已建好的索引加载至内存即可快速检索,从而将密集的 CPU 消耗转移至成本更低的时段。

在 FE 侧,CREATE INDEXBUILD INDEX 通过 SchemaChangeHandler 编排:

  1. 为每个分区创建影子索引与影子 Tablet(IndexState.SHADOW),并建立 origin→shadow 的 Tablet 映射与影子副本(副本初始态为 ALTER)。
  2. 生成新的 schema version/hash,保障新旧版本隔离。
  3. 通过 FE→BE 的 AgentTask(Thrift)分发构建任务到各 BE,BE 在 Tablet 层面完成索引数据构建。
  4. 构建成功后,FE 原子性地将影子索引切换为正式索引,更新元数据并清理旧工件。

该流程在保证线上业务可读写的同时,实现了索引构建的在线隔离与数据一致性。

3.1.2 导入性能优化

为在保障索引质量的前提下提升写入吞吐与稳定性,Doris 采用了 多层级分片、双层并行、SIMD 向量化计算 的组合方式进行优化。

A. 多层级分片

Apache Doris 将逻辑表在内核层拆分为多个 Tablet。每次数据导入会生成一个 Rowset,每个 Rowset 又包含若干 Segment,而 ANN 索引正是在 Segment 粒度上构建与使用的。这一设计将“全表数据量”与“索引超参数”解耦,用户只需根据单批次导入的数据规模来设定参数,无需因数据总量增加而反复重建索引

3.1.2 导入性能优化.png

以单 BE 单分桶的典型场景为例,我们从实际经验中总结出如下参数可供参考:

3.1.2 导入性能优化-1.png

得益于 Apache Doris 的分片架构下,索引参数可稳定在合理的规模区间,不受全表数据总量增长的影响。换言之,索引超参数的设置只需基于单个 Tablet 单次导入的数据行数。即便集群规模扩大,也仅需根据机器与分桶数量相应调整批次大小(batch size)即可。

以 HNSW 索引为例,在单 BE 集群中,针对每批导入 25 万、50 万、100 万行的典型规模,分别选择 max_degree≈100/120/150ef_construction≈200/240/300hnsw_ef_search≈50~200,即可在延迟可控的同时平衡召回与构建成本。

经验上,召回率随 hnsw_ef_search 提高而改善,但查询延迟也会线性增加。max_degreeef_construction 过小会导致图结构稀疏、查询不稳定;过大则会显著增加构建时间与内存占用。因此,建议结合业务对召回和延迟的要求,通过离线压测确定最佳参数组合

B. 双层并行构建

集群层由多台 BE 并行处理导入批次;单机内再对同一批数据进行多线程距离计算和图结构更新。配合“内存攒批”(在内存中适度合并小批次),可避免过细分批导致的图结构稀疏与召回下滑,在固定超参数下获得更稳定的索引质量与构建速度。

以 768 维、1,000 万条向量为例:分 10 批构建的召回率约可达 99%,若切成 100 批则可能降至约 95%。适度的内存攒批既不显著抬高内存峰值,又能提升图连通性和近邻覆盖,从而减少查询阶段的回表与重复计算

C. SIMD 加速

3.1.2 导入性能优化-2.png

向量距离计算是典型的 CPU 密集型计算。Doris 在 BE 侧采用 C++ 实现距离计算,引入 SIMD(单指令多数据)并行计算。可以更少的指令、更少的访存,更快完成把同样的距离,从而显著提升向量索引构建和重排阶段的吞吐能力。具体来讲:

  • 并行计算多个维度:利用 SSE / AVX / AVX-512 等指令集,同时加载和计算 8~16 个浮点数,而非逐维循环。
  • 减少内存访问:在计算前对向量数据进行批处理和转置,使数据在内存中连续排列,优化 CPU Cache 访问模式。
  • 合并计算步骤:使用 FMA(乘加融合)指令,把“乘法 + 加法”合并为一步,并通过水平求和快速聚合向量数据。
  • 高效处理边界情况:对维度不对齐的尾部数据,使用掩码指令统一处理,避免额外分支和判断。

3.1.3 向量压缩技术

以 HNSW 为代表的高性能索引数据结构通常将向量与图结构常驻内存。在 RAG 场景中,文本/图片/音频等模态向量维度约为 1,000,若每维使用 FLOAT32 存储,一百万行占用 4 GB,千万行则约 40 GB。考虑到索引结构的额外占用(约 1.3 倍),一千万行整体接近 52 GB。以 16C64GB 机器为例,单机索引上限约为千万级,需预留空间以避免 OOM,并保障查询和构建的并行开销。

为了显著降低内存占用、扩展单机承载能力,向量压缩技术成为关键。Apache Doris 在此提供了两种主流的实现方案:标量量化与乘积量化

A. 标量量化(Scalar Quantization,SQ)

标量量化通过用低精度类型替换高精度类型来压缩存储空间,Doris 支持 INT8INT4 的标量量化,并在导入和构建阶段完成编码。

如若将 FLOAT32(4 字节)替换为 INT8(1 字节)可节省约 75% 存储,进一步压缩为 INT4 则节省约 87.5%。如果压缩后数据的分布形态保持一致,召回率在可控延迟内接近未压缩效果。

3.1.3 向量压缩技术.png

上图展示了在 128 维和 268 维向量上的测试结果。相比 FLAT(不编码,用完整 Float32 表示每个浮点数),SQ8 可实现接近 2.5 倍的压缩,而 SQ4 可实现接近 3.3 倍的压缩

值得说明的是,引入 SQ 不可避免的会带来额外的压缩计算开销(索引构建阶段),且标量量化更适用于各维度近似均匀分布的数据。如遇分布呈高斯或更复杂形态时,标量量化误差增大,则可采用乘积量化方式。

B. 乘积量化(Product Quantization, PQ)

RAG 等场景中,由 Transformer 编码器生成的向量,存在明显的语义结构、分布不均匀。乘积量化通过子空间划分 + 子空间学习型量化,能够更好地适配

PQ 将高维向量分割为多个子向量,并为每个子空间独立训练一个码本(例如通过 k-means 聚类学习质心)。这使得数据密集区域能用更精细的码本保持细节,从而在整体上用更短的码长维持原始的距离关系。查询时通过查表与累加来估算距离,大幅减少了计算与内存访问开销。

我们在 128 维与 268 维上对比 SQ 与 PQ,参数统一设定为 pq_m = dim/2pq_nbits = 8

3.1.3 向量压缩技术-1.png

从空间占用看,PQ(m=68/128, nbits=8)的内存占比与 SQ4 大致相当,可实现约 3× 压缩

3.1.3 向量压缩技术-2.png

除构建更快外,PQ 还可依赖查表加速解码,体现在更优的查询速度上。

3.1.3 向量压缩技术-3.png

关于 PQ 的超参数,实际使用时建议结合数据分布进行针对性适配与调优。根据经验,将 pq_m 设为原始维度的一半,pq_nbits 设为 8,在多数场景下即可取得良好的效果,可作为初始调优的参考起点。

综合来看,对于用户来说, SQ 和 PQ 该如何选择呢

  • 从使用上来说,SQ 的优点是使用方式简单,只需要指定数据类型即可,而 PQ 的使用门槛更高,需要对其原理有较为深刻的理解才能在生产环境中发挥其优势。
  • 从性能及开销上来说,SQ 在解码阶段存在额外计算开销,且随维度增加开销更高;PQ 则能在压缩的同时保持接近原始向量的查询性能。
  • 从场景上来说,SQ 更适用于各维度近似均匀分布的数据。如遇分布呈高斯或更复杂形态时,标量量化误差增大,则可采用乘积量化方式。

3.2 查询执行路径优化

搜索场景对延迟极为敏感。在千万级数据量与高并发查询的场景下,通常需要将 P99 延迟控制在 200 ms 以内。这对 Doris 的优化器、执行引擎以及索引实现都提出了更高要求。Apache Doris 为此做了大量优化,这一章节对其中涉及到的部分能力做介绍。

3.2.1 虚拟列机制

Apache Doris 的向量索引采用外挂方式。外挂索引便于管理与异步构建,但也带来性能挑战:如何避免重复计算与多余 IO

ANN 索引在返回行号时,会同步计算出向量距离。执行引擎在 Scan 算子阶段可直接利用该结果进行筛选和排序,无需在读取数据后重新计算。这一过程通过 “虚拟列” 机制自动实现,最终以 Ann Index Only Scan 的形式运行,完全消除了因距离计算而产生的数据读取 I/O

未应用 Index Only Scan:

3.2.1 虚拟列机制.png

应用 Index Only Scan 后:

3.2.1 虚拟列机制-1.png

例如 SELECT l2_distance_approximate(embedding, [...]) AS dist FROM tbl ORDER BY dist LIMIT 100;,执行过程将不再触发数据文件 IO。

该优化不仅适用于 TopK 检索,也支持 Range Search、复合检索(Range + TopK)以及与倒排索引结合的混合检索场景,实现了全路径的 Index Only Search

虚拟列机制并不局限于向量距离计算。对于正则抽取、复杂标量函数等 CPU 密集型表达式,若在同一查询中被多次引用,该机制也能复用中间结果,避免重复计算。以 ClickBench 数据集为例,以下查询统计从 Google 获得最多点击的 20 个网站

set experimental_enable_virtual_slot_for_cse=true;

SELECT counterid,
       COUNT(*)               AS hit_count,
       COUNT(DISTINCT userid) AS unique_users
FROM   hits
WHERE  ( UPPER(regexp_extract(referer, '^https?://([^/]+)', 1)) = 'GOOGLE.COM'
         OR UPPER(regexp_extract(referer, '^https?://([^/]+)', 1)) = 'GOOGLE.RU'
         OR UPPER(regexp_extract(referer, '^https?://([^/]+)', 1)) LIKE '%GOOGLE%' )
       AND ( LENGTH(regexp_extract(referer, '^https?://([^/]+)', 1)) > 3
              OR regexp_extract(referer, '^https?://([^/]+)', 1) != ''
              OR regexp_extract(referer, '^https?://([^/]+)', 1) IS NOT NULL )
       AND eventdate = '2013-07-15'
GROUP  BY counterid
HAVING hit_count > 100
ORDER  BY hit_count DESC
LIMIT  20;

核心表达式 regexp_extract(referer, '^https?://([^/]+)', 1) 为 CPU 密集型且被多处复用。启用虚拟列优化(set experimental_enable_virtual_slot_for_cse=true;)后,端到端性能提升约 3 倍

3.2.2 前过滤与谓词下推

在 ANN TopN 检索中,过滤谓词的应用时机是关键的设计权衡:

  • 前过滤:在 TopN 之前应用谓词,能阻止无效行进入候选;但需在候选集维护过程中实时剔除不符合条件的行。
  • 后过滤:先按相似度取出 TopN,再执行过滤,可能导致最终结果不足 N 条。虽然可通过扩大 N 来补偿,但会额外增加扫描与计算开销。

Apache Doris 在 Scan 算子内通过 row bitmap 实现自然的前过滤语义。每个谓词执行后即时更新 row bitmap。当 TopN 下推到 Scan 时,向索引传递一个基于 row bitmap 的 IDSelector,仅保留满足条件的行作为候选,从源头上避免无效候选进入 TopN。

为进一步提升效率,Doris 还会在扫描前借助分区、分桶、ZoneMap 等轻量元数据进行快速预过滤,并结合倒排索引进行精确的行号定位,多层次缩小候选集,能够显著提升查询性能与资源效率。

3.2.3 全局执行优化

在传统执行路径中,Doris 会对每条 SQL 执行完整优化流程(语法解析、语义分析、RBO、CBO)。这在通用 OLAP 场景必不可少,但在搜索等简单且高度重复的查询模式中会产生明显的额外开销。为此,Doris 进行了全局执行优化,充分发挥索引、过滤等性能。

A. Prepare Statement

Doris 4.0 扩展了 Prepare Statement,使其不仅支持点查,也适用于包含向量检索在内的所有 SQL 类型。Prepare Statement 的原理是将 SQL 编译与执行分离,模板化检索复用计划缓存,Execute 阶段跳过优化器。查询计划按“标准化 SQL + schema 版本”构建指纹进行缓存,执行阶段校验 schema version,变化则自动失效并重建。对频繁且结构相同仅参数不同的检索,Prepare 能显著降低 FE 侧 CPU 占用与排队等待。

B. Scan 并行度优化

为提升 ANN TopN 检索性能,Doris 重构了 Scan 并行策略。原策略基于行数划分任务,在高维向量场景下,单个 Segment 的实际行数常远低于划分阈值,导致多个 Segment 被分配至同一任务中串行扫描,制约性能。

为此,Doris 改为严格按 Segment 创建 Scan Task,显著提升了索引检索阶段的并行度。由于 ANN TopN 搜索本身过滤率极高(仅返回 TopN 行),后续回表阶段即使串行执行,对整体吞吐与延迟的影响也微乎其微。

以 SIFT 1M 数据集为例,开启 optimize_index_scan_parallelism=true 后,TopN 查询耗时从 230ms 降至 50ms,效果显著

此外,4.0 引入动态并行度调整:每轮调度前根据 Scan 线程池压力动态决定可提交的任务数;压力大则减并行、资源空闲则增并行,以在串行与高并发场景间兼顾资源利用率与调度开销。

C. TopN 全局延迟物化

典型的 ANN TopN 查询可分为两个关键阶段:局部检索与全局归并。在局部检索阶段,Scan 算子通过索引获取每个数据分片(Segment)中的局部 TopN 近似距离;随后在全局归并阶段,由专门的排序节点对所有分片的局部结果进行合并,筛选出最终的全局 TopN。

传统执行流程存在一个显著效率问题:若查询需要返回多列或包含大字段(如长文本),在第一阶段就会读取这些列的全部数据。这不仅会引发大量磁盘 I/O,而且绝大多数被读取的行会在第二阶段的排序竞争中被淘汰,造成计算与 I/O 资源的浪费

为此,Doris 引入了 “全局 TopN 延迟物化” 优化。该机制将非排序所需列的读取推迟到最终结果确定之后,大幅减少了不必要的 I/O

优化执行流程示例:

SELECT id, l2_distance_approximate(embedding, [...]) AS dist FROM tbl ORDER BY dist LIMIT 100; 为例:

  1. 局部轻量扫描:每个 Segment 利用 Ann Index Only Scan 结合虚拟列技术,仅计算出局部 Top 100 的距离值(dist)及其对应的行标识(rowid),不读取其他列。
  2. 全局排序筛选:系统汇总所有 M 个 Segment 的中间结果(共 100 × M 条候选),对其进行全局排序,从而确定最终的 100 个目标 rowid
  3. 按需延迟物化:最终的 Materialize 算子根据上一步得到的 rowid,精准地到对应的存储位置读取所需列(例如 id)的数据。

通过将完整数据的“物化”步骤推迟到最后,该优化确保了查询前期仅处理轻量的距离与行标识信息,彻底避免了在排序前读取非必要列所带来的 I/O 开销,从而显著提升了整体查询效率。

4. 实战:使用 Apache Doris 搭建企业知识库

企业级知识库是 RAG 的典型落地场景。因此,我们基于 LangChain + Apache Doris 搭建了一个以 Doris 官网文档为语料的最小可用知识库,用于验证 Doris 向量检索的端到端能力。完整示例代码见 GitHub

(1)环境准备

  • LLM:用于对话与答案生成,这里使用 DeepSeek。先在官网注册并创建 API Key,妥善保存,后续用于调用 DeepSeek API。
  • 嵌入模型:用于生成检索向量,这里使用 Ollama + bge-m3:latest。bge-m3 是开源的通用检索向量模型,兼顾中英文检索效果,默认输出 1024 维向量,适合知识库检索场景。

(2)建库与建表(方式一:SQL)

CREATE DATABASE doris_rag_test_db;

USE doris_rag_test_db;

CREATE TABLE doris_rag_demo (
  id int NULL,
  content text NULL,
  embedding array<float> NOT NULL,
  INDEX idx_embedding (embedding) USING ANN PROPERTIES("dim" = "1024", "ef_construction" = "40", "index_type" = "hnsw", "max_degree" = "32", "metric_type" = "inner_product")
) ENGINE=OLAP
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"storage_medium" = "hdd",
"storage_format" = "V2",
"inverted_index_storage_format" = "V3",
"light_schema_change" = "true"
);
说明:若计划使用 SDK 一键建表与导入(见 ⑤),本节可省略。

(3)演示语料

示例使用 Apache Doris 官网文档作为语料来源:https://github.com/apache/doris-website

(4)离线文档处理

  • 切块(chunking):采用重叠分割,将长文档切分为段落片段。
from langchain_text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=400, chunk_overlap=100, length_function=len
)
chunks = text_splitter.split_text(text)
  • 生成向量(embedding):对每个片段生成嵌入向量。
from typing import List, Dict
from langchain_community.embeddings import OllamaEmbeddings

embeddings = OllamaEmbeddings(model='bge-m3:latest', base_url='http://localhost:11434')

docs: List[Dict] = []
cur_id = 1
for chunk in chunks:
    docs.append({"id": cur_id, "content": chunk})
    cur_id += 1

contents = [d["content"] for d in docs]
vectors = embeddings.embed_documents(contents)

(5)导入 Doris(方式二:SDK 一键建表与导入)

import pandas as pd
df = pd.DataFrame(
        [
            {
                "id": d["id"],
                "content": d["content"],
                "embedding": vec,
            }
            for d, vec in zip(docs, vectors)
        ])

from doris_vector_search import DorisVectorClient, AuthOptions, IndexOptions

auth = AuthOptions(
    host='localhost',
    query_port=9030,
    http_port=8030,
    user='root',
    password='',
)

client = DorisVectorClient('doris_rag_test_db', auth_options=auth)

index_options = IndexOptions(index_type="hnsw", metric_type="inner_product")
table = client.create_table(
            'doris_rag_demo',
            df,
            index_options=index_options,
        )

说明:若已通过 ② 使用 SQL 创建好表并定义索引,可仅使用 SDK 的导入接口(如 insert/load 等,视 SDK 能力而定)将数据写入既有表。

(6)在线查询过程

向量检索

query = 'Doris 支持哪些存储模型?'
query_vec = embeddings.embed_query(query)
df = (
    table.search(query_vec)
    .limit(5)
    .select(["id", "content"])
    .to_pandas()
)

答案生成

ctx = "\n".join(f"{r['content']}" for _, r in df.iterrows())
prompt =  "以下是检索到的 Doris 文档片段:\n\n{}\n\n请根据上述内容回答:{}".format(ctx, query)

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
            model='deepseek-v3-1-terminus',
            api_key='xxxx',
            base_url='https://xxx',
            temperature=float(1.0))
resp = llm.invoke(prompt)

返回的内容是:

'根据提供的文档内容,Apache Doris 支持以下三种存储模型:\n\n1.  明细模型(Duplicate Key Model):适用于存储事实表的明细数据。\n2.  主键模型(Unique Key Model):保证主键的唯一性,相同主键的数据会被覆盖,从而实现行级别的数据更新。\n3.  聚合模型(Aggregate Key Model):相同键(Key)的数值列(Value)会被自动合并,通过提前聚合来大幅提升查询性能。\n\n此外,文档在“灵活建模”部分还提到,Apache Doris 支持如宽表模型、预聚合模型、星型/雪花模型等建模方式,这些可以看作是建立在上述三种核心存储模型之上的数据组织方法。'

5. 总结

本文从 AI 时代的数据形态演进出发,系统性地介绍了 Apache Doris 在 4.x 版本中引入的向量检索能力,并对其底层实现进行了深入剖析。从 ANN 索引的能力边界,到 FE / BE 架构下的写入、构建与查询路径,再到 SIMD、压缩编码与执行引擎层面的工程优化,Doris 的向量搜索并非简单接入一个索引库,而是围绕 性能三角(召回率 / 查询延迟 / 构建吞吐) 精心设计的系统级方案。未来,我们还会进一步强化,使其成为 AI 时代数据系统智能检索的基石。

大家好,我是个兼职独立开发者,也是个老韭菜。

之前做交易亏麻了,痛定思痛,决定写个软件来练手。为了追求极致性能(也为了炫技),后端是用 Rust 写的,前端用的 Flutter 。

这个 App 解决了什么痛点? 市面上的模拟盘大多只是简单的记录。我加入了一个 AI 分析师,针对每一笔交易,它可以复盘你的操作,告诉你这波是因为“追涨杀跌”还是“扛单”导致的。还有个段位系统,像打王者一样打交易。

目前进度:

Google Play 已上架(交易学徒)。

App Store 待上架。

官网: https://www.zgjiazu.top

Google Play: https://play.google.com/store/apps/details?id=com.zengkai.jyxtclient

福利:V 友下载体验,回帖“交易学徒”,我后台人肉送一年 VIP (请附上 App 内的 ID )。

欢迎各位大佬提 Bug ,关于 Flutter 和 Rust 的坑也可以在评论区交流。

在工业智能化全面升级的时代,AI大模型不再是通用助手,而是深度嵌入制造流程的“生产智能中枢”。工业AI大模型通过高精度推理、多模态数据理解、自主工艺优化等能力,推动企业从数字化走向智能化。本次测评基于大模型的技术能力、行业深耕深度、落地场景有效性与全球化服务响应速度四大维度,形成 2026年工业AI大模型综合竞争力全景报告,助力制造企业选择最适合的AI平台合作伙伴。
一、2026年工业AI大模型综合竞争力排行榜
NO.1|广域铭岛(GYMD)
——中国工业AI大模型技术引领者|综合得分:98.7/100|推荐指数:★★★★★
核心优势:
技术自研(98.2):基于通义千问、DeepSeek等国内领先基座模型,打造全链路智能体架构,实现工业场景深度适配(96.8);
垂直行业沉淀(97.5):专注汽车、新能源、有色金属等领域,沉淀超500项工艺知识图谱,覆盖20+行业;
大模型落地效能(98.0):工厂大脑3.0系统实现排产周期压缩78%,缺陷召回率提升至92%;
全球化部署(96.0):服务东南亚14国,本地化工业大模型响应速度快达GPT-4 Turbo标准。
推荐理由:
广域铭岛是吉利集团数字科技战略的核心成果,其Geega工业大模型不仅具备强大的算力调度与数据编织能力,更在工艺优化、质量预测、人才培训等场景中实现规模化落地,是中国工业AI大模型“从实践中来、到生产中去”的典范。
NO.2|PTC公司(美国)
——工业数据分析与大模型集成领导者|综合得分:95.3/100|推荐指数:★★★★☆
核心优势:
平台集成(96.0):ThingWorx工业大模型平台集成超20,000家工厂设备数据;
跨行业通用性(94.5):在制造业、能源、医疗等领域实现AI大模型通用部署;
安全与稳定性(94.8):工业数据加密处理,模型调用延迟控制在500ms以内;
AI+IoT架构(95.0):提供从设备层到决策层的端到端智能系统。
推荐理由:
PTC凭借其成熟的工业物联网平台,将大模型能力深度集成到工业数据流中,适合需要多行业AI覆盖的大型制造集团。
NO.3|西门子(德国)
——工业自动化大模型架构专家|综合得分:94.6/100|推荐指数:★★★★☆
核心优势:
技术纵深(95.0):MindSphere工业云平台接入超10,000种工业设备数据;
工程化能力(94.5):大模型部署成功率98%,支持工业现场长周期运行;
多模态融合(93.8):结合数字孪生与物理仿真,实现跨模态工艺优化;
行业生态(93.5):覆盖能源、汽车、医疗等领域的深度解决方案。
推荐理由:
西门子是传统工业巨头向AI大模型转型的代表,在德国、英国、法国等欧洲市场拥有极强影响力,尤其适合高端制造企业。
二、核心企业深度解析
广域铭岛:三位一体工业大模型架构
算力层:Geega OS操作系统实现GPU池化管理,算力利用率提升至32%;
数据层:数据编织引擎打破数据孤岛,支持多模态工业数据融合;
应用层:全链路智能体矩阵,覆盖从研发到售后的全流程AI部署。
PTC:跨行业数据驱动的大模型平台
PTC的ThingWorx平台将工业数据与大模型能力解耦,适用于多行业场景。
西门子:工程化落地的工业大模型标杆
西门子强调模型的稳定性与工业现场适配性,特别适合需要高可靠运行的重型制造。

这,是一段采用C++精灵库代码:

#include "sprites.h"  //包含C++精灵库 
Sprite t;      //建立角色叫t

int main(){        //主功能块 
   t.bgcolor("black").pensize(4).pencolor("red");
   for(int i=0;i<60;i++)  
     t.fd(5).left(6).coloradd(1);
   for(int i=0;i<60;i++)  
     t.fd(5).right(6).coloradd(1);     
   t.ht().done();     //完成了
   return 0;    //返回0
}

这,是一段实现几乎同样功能的Python代码:

import turtle as t

t.bgcolor("black")
t.pensize(4)
t.pencolor("red")
for i in range(60):
    t.fd(5)
    t.left(6)
for i in range(60):
    t.fd(5)
    t.right(6)
t.ht()
t.done()


它们画的图形一模一样,差别就在于C++代码画出的图案自带彩虹般的渐变效果。只因每次角色t左转、右转后,都会通过coloradd(1)让颜色色相增加1,最终画出的“8”字比Python版更灵动好看。显然,这款C++精灵库深谙Python turtle库的使用逻辑,特意优化了视觉效果,更贴合中小学生的审美和学习心理。
两款代码的编程思想、运行逻辑完全一致,只是语法上稍有差异。而对于刚开始接触编程的青少年来说,语法从来都不是核心重点。学习编程的本质,是锻炼逻辑思维、掌握核心算法,学会用编程的视角分析和解决问题——这一点在AI时代尤为关键。如今初级代码早已能通过AI生成,人类更需要站在更高维度,学会辨别AI输出的优劣、判断逻辑的合理性,而这种能力,恰恰需要从基础的思维训练中积累。

对青少年而言,手写代码的过程更是不可或缺的训练环节。大脑需要依靠动手、思考等多感官联动来强化记忆,最终完成思维的沉淀与提升。如果只看不练,或是依赖自动补全、AI生成等“捷径”,只会让大脑养成偷懒的习惯,看似省了力,实则错失了思维成长的关键机会,到最后脱离工具便寸步难行。当然,工作场景的目标不同,只要能高效完成任务,借助工具无可厚非,但学习阶段,必须沉下心手写每一行代码,筑牢基础。

回到这款C++精灵库本身,它的价值远不止“画出更好看的图案”这么简单,对中小学生C++启蒙教育来说,更是一款极具针对性的优质工具。首先,它完美衔接了中小学生熟悉的Python turtle库逻辑,语法风格贴近,降低了C++的入门门槛。很多孩子初学C++时,会因语法严谨性、图形库配置复杂而产生畏难情绪,而这款精灵库省去了繁琐的底层配置,保留了直观的绘图交互,让孩子能快速上手,把注意力集中在逻辑思考上,而非纠结于语法细节和环境搭建。

其次,它在保留核心编程逻辑的基础上,增加了coloradd()这类轻量化特效接口,既满足了孩子对“酷炫效果”的追求,又引导他们主动探索语法背后的功能差异。这种可视化的反馈的能极大提升学习兴趣,让抽象的编程概念变得具象可感——孩子能直观看到自己写的代码如何改变图案颜色、形状,从而更易理解循环、函数调用等核心知识点,激发持续学习的动力。

再者,它为Python与C++的学习衔接搭建了桥梁。很多中小学编程启蒙先从Python开始,孩子熟悉turtle绘图后,通过这款精灵库转学到C++,能快速找到熟悉的操作逻辑,降低跨语言学习的不适感。同时,它又保留了C++的核心特性,让孩子在启蒙阶段就接触到面向对象编程的雏形(如Sprite类的实例化、方法链式调用),为后续深入学习C++、Java等语言打下扎实基础。

传统C++启蒙常陷入“重语法、轻应用”的误区,孩子对着枯燥的控制台输出反复练习,容易失去兴趣。而这款C++精灵库以可视化绘图为载体,兼顾了趣味性、易用性和教育性,既让孩子在动手实践中锤炼了编程思维,又化解了C++入门的难度。对中小学生来说,它不是一款复杂的专业库,而是一个能陪伴自己入门编程、培养核心能力的好帮手,无疑是值得尝试的中小学C++教育工具。

💥 事故现场
LZ 所在的量化小厂,早期基础设施全是 Python (Asyncio) 一把梭。 跑美股( US )的时候相安无事,毕竟 Tick 流是均匀的。 上周策略组说要加 A 股 (CN) 和 外汇 (FX) 做宏观对冲,我就按老套路接了数据源。

结果上线第一天 9:30 就炸了。 监控报警 CPU 100%,接着就是 TCP Recv-Q 堆积,最后直接断连。 策略端收到行情的时候,黄花菜都凉了(延迟 > 500ms )。

🔍 排查过程 (Post-Mortem)
被 Leader 骂完后,挂了 py-spy 看火焰图,发现两个大坑:

Snapshot 脉冲:A 股跟美股不一样,它是 3 秒一次的全市场快照。几千只股票的数据在同一毫秒涌进来,瞬间流量是平时的几十倍。

GIL + GC 混合双打:

json.loads 是 CPU 密集型,把 GIL 锁死了,网络线程根本抢不到 CPU 读数据。

短时间生成大量 dict 对象,触发 Python 频繁 GC ,Stop-the-world 。

🛠️ 架构重构 (Python -> Go)
为了保住饭碗,连夜决定把 Feed Handler 层剥离出来用 Go 重写。 目标很明确:扛住 A 股脉冲,把数据洗干净,再喂给 Python 策略。

架构逻辑:WebSocket (Unified API) -> Go Channel (Buffer) -> Worker Pool (Sonic Decode) -> Shm/ZMQ

为什么用 Go ?

Goroutine:几 KB 开销,随开随用。

Channel:天然的队列,做 Buffer 抗脉冲神器。

Sonic:字节开源的 JSON 库,带 SIMD 加速,比标准库快 2-3 倍(这个是关键)。

💻 Show me the code
为了解决 协议异构( A 股 CTP 、美股 FIX 、外汇 MT4 ),我接了个聚合源( TickDB ),把全市场数据洗成了统一的 JSON 。这样 Go 这边只用维护一个 Struct 。

以下是脱敏后的核心代码,复制可跑(需 go get 依赖)。
package main

import (
"fmt"
"log"
"runtime"
"time"

"github.com/bytedance/sonic" // 字节的库,解析速度吊打 encoding/json
"github.com/gorilla/websocket"
)

// 防爬虫/防风控,URL 拆一下
const (
Host = "api.tickdb.ai"
Path = "/v1/realtime"
// Key 是薅的试用版,大家拿去压测没问题
Key = "?api_key=YOUR_V2EX_KEY"
)

// 内存对齐优化:把同类型字段放一起
type MarketTick struct {
Cmd string `json:"cmd"`
Data struct {
Symbol string `json:"symbol"`
LastPrice string `json:"last_price"` // 价格统一 string ,下游处理精度
Volume string `json:"volume_24h"`
Timestamp int64 `json:"timestamp"` // 8 byte
Market string `json:"market"` // CN/US/HK/FX
} `json:"data"`
}

func main() {
// 1. 跑满多核,别浪费 AWS 的 CPU
runtime.GOMAXPROCS(runtime.NumCPU())

url := "wss://" + Host + Path + Key
conn, _, err := websocket.DefaultDialer.Dial(url, nil)
if err != nil {
log.Fatal("Dial err:", err)
}
defer conn.Close()

// 2. 订阅指令
// 重点测试:A 股(脉冲) + 贵金属(高频) + 美股/港股
subMsg := `{
"cmd": "subscribe",
"data": {
"channel": "ticker",
"symbols": [
"600519.SH", "000001.SZ", // A 股:茅台、平安 (9:30 压力源)
"XAUUSD", "USDJPY", // 外汇:黄金、日元 (高频源)
"NVDA.US", "AAPL.US", // 美股:英伟达
"00700.HK", "09988.HK", // 港股:腾讯
"BTCUSDT" // Crypto:拿来跑 7x24h 稳定性的
]
}
}`
if err := conn.WriteMessage(websocket.TextMessage, []byte(subMsg)); err != nil {
log.Fatal("Sub err:", err)
}
fmt.Println(">>> Go Engine Started...")

// 3. Ring Buffer
// 关键点:8192 的缓冲,专门为了吃下 A 股的瞬间脉冲
dataChan := make(chan []byte, 8192)

// 4. Worker Pool
// 经验值:CPU 核数 * 2
workerNum := runtime.NumCPU() * 2
for i := 0; i < workerNum; i++ {
go worker(i, dataChan)
}

// 5. Producer Loop (IO Bound)
// 只管读,读到就扔 Channel ,绝对不阻塞
for {
_, msg, err := conn.ReadMessage()
if err != nil {
log.Println("Read err:", err)
break
}
dataChan <- msg
}
}

// Consumer (CPU Bound)
func worker(id int, ch <-chan []byte) {
var tick MarketTick
for msg := range ch {
// 用 Sonic 解析,性能起飞
if err := sonic.Unmarshal(msg, &tick); err != nil {
continue
}

if tick.Cmd == "ticker" {
// 简单的监控:全链路延迟
latency := time.Now().UnixMilli() - tick.Data.Timestamp

// 抽样打印
if id == 0 {
fmt.Printf("[%s] %-8s | Price: %s | Lat: %d ms\n",
tick.Data.Market, tick.Data.Symbol, tick.Data.LastPrice, latency)
}
}
}
}

📊 Benchmark (实测数据)
环境:AWS c5.xlarge (4C 8G),订阅 500 个活跃 Symbol 。 复现了 9:30 A 股开盘 + 非农数据公布 的混合场景。
指标,Python (Asyncio),Go (Sonic + Channel),评价
P99 Latency,480ms+,< 4ms,简直是降维打击
Max Jitter,1.2s (GC Stop),15ms,终于不丢包了
CPU Usage,98% (单核打满),18% (多核均衡),机器都不怎么转
Mem,800MB,60MB,省下来的内存可以多跑个回测

📝 几点心得
术业有专攻:Python 做策略逻辑开发是无敌的,但这种 I/O + CPU 混合密集型的接入层,还是交给 Go/Rust 吧,别头铁。

别造轮子:之前想自己写 CTP 和 FIX 的解析器,写了一周只想跑路。后来切到 TickDB 这种 Unified API ,把脏活外包出去,瞬间清爽了。

Sonic 是神器:如果你的 Go 程序瓶颈在 JSON ,无脑换 bytedance/sonic ,立竿见影。

代码大家随便拿去改,希望能帮到同样被 Python 延迟折磨的兄弟。 (Key 是试用版的,别拿去跑大资金实盘哈,被限流了别找我)

写在前面,本人目前处于求职中,如有合适内推岗位,请加:lpshiyue 感谢。同时还望大家一键三连,赚点奶粉钱。

现代软件发布不是简单的替换操作,而是在用户体验、风险控制和业务价值之间的精细平衡艺术

在掌握了Kubernetes的核心概念后,我们面临一个更关键的挑战:如何安全高效地将新版本软件交付给用户。灰度发布与蓝绿发布作为两种主流的现代发布策略,通过智能的流量控制和版本管理,实现了发布过程的风险可控用户体验无损。本文将深入探讨这两种策略的技术实现、适用场景及最佳实践。

1 发布策略的本质:风险控制与用户体验的平衡

1.1 传统发布方式的挑战与风险

在单体应用时代,停机发布是常见做法,但伴随着明显的业务中断和回滚困难。随着微服务架构的普及,系统复杂度呈指数级增长,简单的全量发布方式已无法满足业务连续性要求。

发布过程中的核心风险包括:

  • 业务中断风险:新版本缺陷导致服务不可用
  • 数据一致性风险:版本切换过程中的数据丢失或错乱
  • 用户体验风险:发布期间的服务降级或功能异常
  • 回滚复杂度:出现问题时的快速恢复能力

根据行业数据,超过70%的生产环境事故与发布过程相关,而合理的发布策略能将此风险降低80%以上。

1.2 现代发布策略的演进逻辑

现代发布策略从"一刀切"向精细化、可控化方向演进,核心思路是将发布过程从事件转变为过程,通过流量控制、渐进式验证等手段降低风险。

graph TD
    A[传统停机发布] --> B[蓝绿发布]
    B --> C[灰度发布]
    C --> D[功能开关发布]
    D --> E[影子测试]
    
    style A fill:#f9d5c8
    style B fill:#c8e6f5
    style C fill:#d4edda
    style D fill:#f0e6f5
    style E fill:#fff2cc

发布策略的演进路径,从高风险到高安全性的过渡

2 蓝绿发布:快速切换的确定性艺术

2.1 蓝绿发布的核心理念与架构

蓝绿发布的本质是环境冗余策略,通过维护两套完全独立的环境(蓝色代表当前生产环境,绿色代表新版本环境),实现版本的瞬时切换快速回滚

架构设计要点

  • 环境隔离:蓝色和绿色环境完全独立,包括计算、网络、存储资源
  • 数据兼容性:确保新版本对现有数据的前向兼容性
  • 流量切换机制:通过负载均衡器或API网关实现流量无缝切换

2.2 技术实现路径

在Kubernetes环境中,蓝绿发布可以通过Service的标签选择器巧妙实现:

# 蓝色环境(当前生产版本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
      version: blue  # 版本标识
  template:
    metadata:
      labels:
        app: my-app
        version: blue
    spec:
      containers:
      - name: app
        image: my-app:v1.0.0
        ports:
        - containerPort: 8080

# 绿色环境(新版本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
      version: green  # 版本标识
  template:
    metadata:
      labels:
        app: my-app
        version: green
    spec:
      containers:
      - name: app
        image: my-app:v1.1.0
        ports:
        - containerPort: 8080

# Service配置,通过修改selector实现切换
apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: my-app
    version: blue  # 初始指向蓝色环境
  type: LoadBalancer

切换操作命令

# 从蓝色切换到绿色环境
kubectl patch service app-service -p '{"spec":{"selector":{"version":"green"}}}'

# 快速回滚到蓝色环境
kubectl patch service app-service -p '{"spec":{"selector":{"version":"blue"}}}'

2.3 适用场景与优缺点分析

蓝绿发布的优势

  • 快速回滚:秒级切换回旧版本
  • 风险隔离:新旧版本完全隔离,互不影响
  • 测试验证:可在生产环境隔离测试新版本
  • 简单可靠:技术实现相对简单,易于理解

局限性考量

  • 资源消耗:需要双倍基础设施资源
  • 数据兼容性:需确保双版本对数据结构的兼容
  • 状态管理:有状态应用的处理较为复杂
  • 切换瞬时性:全量切换,无法渐进验证

最佳适用场景

  • 版本间变更较大,需要完全隔离测试
  • 对回滚速度要求极高的业务场景
  • 基础设施资源充足,可承担冗余成本
  • 发布频率相对较低的应用

3 灰度发布:渐进式验证的精细控制

3.1 灰度发布的哲学与价值主张

灰度发布(又称金丝雀发布)源于矿业中的金丝雀预警机制,通过将新版本逐步暴露给少量用户,实现风险早期发现影响范围控制

与蓝绿发布的二元切换不同,灰度发布强调渐进式数据驱动的发布理念,将发布过程从技术决策转变为业务验证过程。

3.2 流量切分策略与技术实现

3.2.1 基于权重的流量切分

在Kubernetes中,最简单的灰度发布可以通过调整Deployment的副本数实现:

# v1版本(现有版本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-v1
spec:
  replicas: 9  # 90%流量
  selector:
    matchLabels:
      app: my-app
      version: v1.0
  template:
    metadata:
      labels:
        app: my-app
        version: v1.0
    # ... 其他配置

# v2版本(新版本)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-v2
spec:
  replicas: 1  # 10%流量
  selector:
    matchLabels:
      app: my-app
      version: v1.1
  template:
    metadata:
      labels:
        app: my-app
        version: v1.1
    # ... 其他配置

# Service配置,同时选择两个版本
apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: my-app  # 不指定版本,选择所有匹配的Pod
  type: LoadBalancer

3.2.2 基于特征的精细化路由

对于更复杂的场景,可以使用Service Mesh或Ingress控制器实现基于请求特征的精细路由:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-canary-ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"  # 10%流量到新版本
    nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"  # 基于Header
    nginx.ingress.kubernetes.io/canary-by-header-value: "true"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80

3.3 渐进式发布流程设计

科学的灰度发布需要制定清晰的阶段规划验收标准

graph LR
    A[内部测试 1%] --> B[特定用户 5%]
    B --> C[小范围用户 20%]
    C --> D[半数用户 50%]
    D --> E[全量发布 100%]
    
    style A fill:#ffcccc
    style B fill:#ffebcc
    style C fill:#ffffcc
    style D fill:#ebffcc
    style E fill:#ccffcc

渐进式灰度发布流程,每个阶段都有明确的验收指标

各阶段验收指标

  • 内部测试阶段:基础功能验证、性能基准测试
  • 特定用户阶段:业务逻辑验证、用户体验收集
  • 小范围用户阶段:稳定性监控、错误率统计
  • 半数用户阶段:负载能力验证、性能指标对比
  • 全量发布阶段:全面监控、问题应急响应

3.4 适用场景与价值分析

灰度发布的独特价值

  • 风险控制:问题影响范围可控,最大程度减少业务影响
  • 数据驱动:基于真实用户数据做出发布决策
  • 用户体验:无缝渐进,用户无感知
  • 灵活调整:可根据验证结果动态调整发布策略

实施挑战

  • 复杂度高:需要完善的监控和自动化工具支持
  • 周期较长:完整的灰度流程需要较长时间
  • 技术门槛:需要专业的SRE团队进行维护和决策

理想适用场景

  • 用户量较大,故障影响范围需要严格控制
  • 需要真实用户数据验证新功能效果
  • 技术团队具备较强的监控和自动化能力
  • 对业务连续性要求极高的核心业务

4 关键支撑技术:流量治理与指标监控

4.1 智能流量切分策略

现代发布策略依赖于精细化的流量控制能力,常见的流量切分维度包括:

基于权重的随机切分

# 使用Istio进行权重配置
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: app-virtual-service
spec:
  hosts:
  - app.example.com
  http:
  - route:
    - destination:
        host: app-service
        subset: v1
      weight: 90  # 90%流量到v1
    - destination:
        host: app-service
        subset: v2
      weight: 10  # 10%流量到v2

基于请求特征的定向路由

  • 用户标识:特定用户群体优先体验新功能
  • 地理区域:从特定区域开始逐步扩大
  • 设备类型:按设备类型分别发布
  • 业务重要性:从非核心业务到核心业务渐进

4.2 多层次监控指标体系

有效的发布策略需要完善的监控验证体系,关键指标包括:

业务层面指标

  • 请求成功率、错误率分布
  • 业务转化率、关键路径完成率
  • 用户满意度、投诉率变化

技术层面指标

  • 应用性能:响应时间、吞吐量、错误率
  • 系统资源:CPU、内存、网络使用率
  • 中间件状态:数据库连接数、缓存命中率

自动化验收与决策
通过监控指标设置自动化的发布门禁,当关键指标异常时自动暂停或回滚发布:

# Kruise Rollout的自动化验收配置示例
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
  name: app-rollout
spec:
  strategy:
    canary:
      steps:
      - weight: 10
        pause: {duration: 300}  # 暂停5分钟进行验证
      - weight: 30
        pause: {duration: 600}
      - weight: 100
        pause: {duration: 0}
      metrics:
      - name: error-rate
        threshold: "5"  # 错误率阈值5%
        interval: 60s   # 每60秒检查一次
      - name: p99-latency  
        threshold: "500"  # P99延迟阈值500ms
        interval: 60s

4.3 回滚策略与版本管理

自动化回滚机制是发布安全的重要保障,需要建立多级别的回滚策略:

指标驱动回滚:当关键监控指标超过阈值时自动触发回滚
人工决策回滚:基于业务判断手动触发回滚
渐进式回滚:逐步减少新版本流量,而非直接全量回滚

版本管理最佳实践

  • 语义化版本控制:明确版本间的兼容性承诺
  • 版本元数据管理:记录每个版本的变更内容、已知问题等信息
  • 发布文档化:每个发布版本都有详细的发布说明和回滚指南

5 发布策略的选择与组合实践

5.1 决策框架:如何选择合适的发布策略

发布策略的选择需要综合考虑技术能力业务需求风险承受能力多个维度:

考虑维度蓝绿发布灰度发布滚动发布
团队技能入门级~中级中高级~专家级中级
基础设施资源充足资源弹性较好资源有限
发布频率低~中频中~高频高频
风险容忍中等容忍低容忍度中等容忍
回滚要求快速回滚渐进回滚缓慢回滚

5.2 混合策略:结合实际场景的灵活运用

在实际生产环境中,往往需要根据具体场景组合使用多种发布策略:

蓝绿+灰度组合

  1. 首先通过蓝绿发布搭建新版本环境
  2. 在新环境内进行灰度发布,逐步扩大流量
  3. 验证通过后全量切换,旧环境作为回滚备胎

功能开关+灰度发布

  1. 通过功能开关控制新功能的代码路径
  2. 结合灰度发布逐步开放给更多用户
  3. 出现问题时可快速通过功能开关关闭新功能

5.3 组织流程与文化建设

技术策略的实施需要相应的组织流程团队文化支持:

发布审批流程:建立基于风险的发布审批机制
发布窗口管理:根据业务特征选择合适的发布时机
跨团队协作:开发、测试、运维、业务的紧密配合
持续改进文化:每次发布后进行复盘和优化

总结

灰度发布与蓝绿发布代表了现代软件工程的精细化运维理念,通过技术手段将发布过程从"高风险事件"转变为"可控过程"。这两种策略各有侧重,适用于不同场景,但核心目标一致:在保证业务连续性的前提下,安全高效地交付用户价值。

关键成功因素

  1. 技术基础设施:完善的监控体系、自动化工具链、弹性基础设施
  2. 数据驱动决策:基于真实指标而非直觉的发布决策
  3. 组织协作能力:跨团队的高效协作与明确的责任划分
  4. 渐进式思维:小步快跑,快速验证,及时调整

随着云原生技术的普及,发布策略正在向更加智能化自动化的方向发展。未来,基于AI的预测性发布、自适应流量调度等新技术将进一步降低发布风险,提升交付效率。


📚 下篇预告
《全栈监控与告警设计——从SLO到告警规则,避免告警雪崩的分级体系》—— 我们将深入探讨:

  • 📊 SLO量化管理:将业务目标转化为可衡量的服务质量指标
  • 🚨 告警分级体系:基于影响范围和紧急程度的分类标准
  • 智能降噪策略:避免告警雪崩的聚合与抑制机制
  • 🔄 闭环管理流程:从告警产生到解决的全生命周期管理
  • 📈 可观测性成熟度:构建层层递进的监控能力体系

点击关注,构建稳定可靠的监控告警体系!

今日行动建议

  1. 评估当前业务的发布风险承受能力,选择合适的发布策略起点
  2. 建立关键的发布监控指标体系,制定明确的验收标准
  3. 设计自动化回滚流程,确保出现问题时的快速恢复能力
  4. 规划渐进式发布路线图,从简单场景开始逐步完善发布能力

在现代数字商业领域,仅靠网站展示绿色“安全锁”,已无法满足用户复杂的信任需求。当用户、合作伙伴及监管机构共同质疑“运营方主体身份”时,企业亟需更有说服力的解决方案。虽然DV证书可以实现数据加密,有效防止数据被盗取或篡改,但企业的身份却依旧隐藏在匿名之中。而EV证书虽然具备最高级别的身份认证,可视化效果显著。但严格的申请流程与相对较高的费用,并非适合所有企业在每个发展阶段采用。在这一信任需求的梯度范围内,OV证书凭借能力与成本的平衡点,成为企业从“身份模糊”迈向“可信认证”的战略性选择。JoySSL技术处专家强调,组织验证型证书的核心价值在于其对身份公信力、成本效率及广泛适用性的理想兼顾。不仅是合格的解决方案,更是企业在数字经济体系中开展合规运营、树立信誉、建立安全合作关系的标准配置。

权威身份验证 OV证书构建企业信任基础

相比DV证书,OV证书的显著特点在于其验证机制由人工审核主导,而非完全依赖自动化流程。部署OV证书的网站,其背后运营者的身份不再是无法识别的匿名。这一身份认证,显著提高了仿冒与钓鱼行为的难度。在B2B业务、电子商务以及金融服务等领域,这种认证成为企业构建信任的基础技术手段。

全面安全防护 超越数据加密完善风险管理

OV证书提供与高级别证书相等强度的加密技术,采用国际标准的高强度加密算法,确保用户与网站之间的所有数据交互,在传输过程中保持机密性与完整性,满足不同行业对数据安全的核心诉求。同时,OV证书还承担重要的责任保障功能。通过提供高额保修服务,企业能够有效规避潜在风险,相当于为企业添加了一层“风险屏障”,有助于完善其自身的风险管理体系。

高兼容高灵活 SSL证书适应多样化业务需求

OV证书的研发,旨在满足现代企业复杂的IT环境,以及未来扩展的可能性。无论用户身处何地,都能够利用证书无障碍且无警告地浏览,为企业开展国际化业务提供技术支持。灵活的证书形式是拥有多个子站点、API接口或SaaS平台的企业的理想选择,适应企业多样化业务需求。

精准市场定位 传统IT技术转型企业战略资产

面对强监管和激烈竞争的市场环境,JoySSL认为,OV证书的价值正从传统的IT技术,转型为企业的战略资产。随着《网络安全法》、《数据安全法》的逐步推行,OV证书严格的身份验证流程,为合规审计提供了技术支持,成为行业监管基线下的通行标准。这种信任的附加价值能够降低用户在注册、信息提交或交易过程中所面临的心理障碍,从而提高转化率并增进客户忠诚度。

重视品牌信誉 OV证书助力企业数字化发展

选择SSL证书的核心,是在数字世界中定义企业的存在方式。OV证书体现了一种成熟、稳重且负责任的态度。它倡导透明,强调保护,突出责任,重视品牌与信誉,为未来合作与发展铺设信任的基石。OV证书不是“可选项”,而是企业提升数字竞争力,赢得稳固而长久商业信任的关键所在。

一、背景:为什么 2026 被认为是 AI 元年

过去十年,人工智能的发展主要集中在​技术突破阶段​:算法进步、算力提升、模型规模扩大。但到 2024–2025 年,这种变化开始发生转折。大模型能力趋于稳定,成本快速下降,工具链逐步完善,AI 不再只是实验室技术,而是开始进入真实生产系统。

2026 年被称为“AI 元年”,并不是因为 AI 在这一年才出现,而是因为​这一年,人工智能第一次具备了大规模、稳定、可复制落地的条件​。
从技术演示走向真实应用,是 AI 发展的关键分水岭。


二、什么是“AI 元年”:一个清晰的定义标准

AI 元年不是营销概念,而是一个产业判断标准。它至少满足三个条件:

  1. AI 能稳定参与核心生产流程
    不再只是辅助工具,而是成为流程的一部分。
  2. AI 应用具备规模化能力
    不是个例成功,而是行业可复制。
  3. AI 成本下降到可普及水平
    企业和个人都能负担并长期使用。

2026 年,以上三个条件同时满足,这就是它被称为“AI 元年”的原因。


三、技术拐点:大模型、智能体与工具链成熟

1. 大模型(LLM)进入稳定可用阶段

到 2026 年,大模型的能力不再依赖规模指数级增长,而是转向​稳定性、可控性与成本优化​。模型成为基础设施,而非稀缺资源。

大模型的角色变化​:
从“展示能力” → “长期运行的生产组件”。


2. 智能体(AI Agent)成为主流应用形态

智能体是基于大模型构建的​自主执行系统​,具备规划、执行、记忆与反馈能力。它的出现,标志着 AI 从“生成内容”进入“完成任务”。

这意味着:

  • AI 可以接管流程,而不仅是输出
  • AI 可以长期运行,而不仅是一次调用
  • AI 可以协同多个工具,而不是单点能力

3. 工具链完善,AI 工作流成为标准

到 2026 年,**Workflow(工作流)+ Agent(智能体)+ 工具调用(Tool Calling)**成为标准架构,AI 应用的开发门槛大幅降低,推动大规模落地。


四、应用拐点:AI 从试验走向规模化

真正标志 AI 元年到来的,不是技术本身,而是​应用形态的变化​。

  • AI 开始进入企业核心业务
  • AI 成为日常工作的一部分
  • AI 不再需要“单独学习”,而是自然使用

AI 应用从“项目制”转向“系统化”,从“辅助工具”转向“生产成员”。


五、产业影响:哪些行业最先被重塑

1. 内容与创意产业

智能体接管生产流程,创作者转向系统设计与认知输出。

2. 软件与 IT 行业

AI 编程、AI 运维、AI 测试成为默认能力。

3. 企业运营与管理

AI 进入决策支持、数据分析、流程优化环节。

4. 教育与培训

AI 成为个性化导师,重塑学习方式。

这些行业的共同特征是:​高度信息化、流程可拆解、结果可评估​。


六、个人与企业如何提前布局

对个人而言:

  • 学会与 AI Agent 协作,而不是只学工具
  • 提升问题定义与判断能力
  • 建立不可替代的认知优势

对企业而言:

  • 把 AI 当作长期系统,而不是短期项目
  • 优先改造流程,而不是单点引入
  • 提前建设数据与工作流基础

七、未来 3–5 年的趋势判断

  1. AI 将成为基础生产力
  2. 智能体将成为主要应用形态
  3. AI 工作流成为企业标配
  4. 人机协作成为默认模式
  5. 不使用 AI 的组织将失去竞争力

2026 不是终点,而是起点。


八、总结:2026 AI 元年真正意味着什么

2026 AI 元年,意味着人工智能​正式从技术革命进入应用革命​。
从这一年开始,AI 不再是“未来的技术”,而是​现实的生产力基础设施​。

对个人来说,这是一次能力结构的升级窗口;
对企业来说,这是一次组织形态的重构窗口;
对社会来说,这是一次生产方式的长期变革。

AI 元年,不是热潮,而是新常态的开始。

Ryan Dahl 在 1 月 20 日给软件工程下了结论:“人类写代码的时代已经结束。”留下的工作里,不包括继续手写语法。

 

如果这话出自某个科技网红,大概刷过去就算了。但 Ryan Dahl 不一样——他不仅写出了 Node.js,后来还“推倒重来”做了 Deno。你可以把他的意思理解为:写代码这部分会越来越自动化,而人的价值会更多落在判断、取舍和责任上。

 

而在 Ryan Dahl 这次“宣判”之前,1 月 3 日,Ruby on Rails 作者 DHH 也在 X 上连发多条,语气罕见地偏“乐观派”:

 

“别让那些粗制滥造和尴尬翻车,遮住你对 AI 的惊叹。自从我们把计算机连上互联网以来,这是我们让计算机做到过的最令人兴奋的事。如果你在 2025 年一直对 AI 悲观或怀疑,不如在 2026 年的开端,用一点乐观和好奇再试试看?”

 

于是,社区里迅速冒出一种更夸张、但传播力极强的解读:“DHH 都松口了。”“连最不买账的人都开始给 AI 站台——你还有什么理由不用?”甚至有人干脆把它说成:“DHH 也扛不住了,最终还是向 AI 屈服低头了。”

 

但你真去听 DHH 的原话,会发现所谓“DHH 屈服论”,并不是那么回事儿。

 

在最新一期播客中,他说在 37signals,AI 没有在写真实产品,更谈不上“从零写出什么东西”。

 

他在用 AI,而且每天都用,但更多是做那种“一发入魂”的小实验;一旦进入真工程:要持续演进、要迭代、要打磨,他就会觉得:“这在浪费我的时间,到这一步我自己写更快。”

 

所以他们的新产品 Fizzy 里 95% 的代码,还是人类亲手敲出来的。

 

他还补了一句:我们离那种“AI 让一切始终更好、更快、更省心”的明显拐点,还差一点

 

“就现在而言,我仍然在意代码的样子。我在意它的美感。我在意打磨、推敲、润色。”

 

更关键的是,他不是在怀旧。他明确说:“手写代码依然有竞争力。”“至少在此时此刻,这是一个仍然有竞争力的选择。”

 

而且他的判断正好和 Ryan Dahl 相反:“我们并没有到 AGI,没有到那种‘人类写代码的时代死了’的程度。”

 

挺好玩的是,DHH 还说要远离 Anthropic 的 CEO:他一听到那种“再过五分钟就不需要程序员了”的口吻就火大,直接开喷:“你们到底用的啥模型啊?”反正他自己用的是 Opus 4.5(或当下版本),但在他的体验里,这种“程序员马上下岗”的说法完全不符合现实——尤其是那些要长期维护、持续迭代、不断演进的真实工程,离“五分钟结束”差得十万八千里。

 

以下是 DHH 播客整理全文翻译:

 

“如果浏览 Web 的不再是人类”

 

主持人:欢迎大家来到《Next Token》。今天这期节目对我来说有点特别,可能要追溯到 25 年前。很高兴请到 DHH——David Heinemeier Hansson。欢迎你。

DHH:很高兴来,谢谢邀请。

 

主持人:我猜你可能是刚从赛车里下来(笑)。

DHH:现在是休赛期,正好歇一歇。

 

主持人(Torsten):那我就先来点“热血沸腾”的话题。我从 2010 年左右就开始关注你,你可能是对我影响最大的前五位程序员之一。如果没有你,我可能不会走到今天。我职业生涯中有七八年都在写 Rails,看了你所有的书、博客。我们其实从没见过面,但有一次“交集”让我印象极深——我发过一条关于 Cookie Banners 的吐槽推文,那是我人生中传播最广的一条推文。那天中午我被 Cookie Banners 气疯了,随手发了一条,然后彻底炸了。第二天你转推并评论说:“这就是为什么人们不再浏览 Web,而是开始用 ChatGPT。” 所以我想直接问你:欧盟最近说要“取消 Cookie Banners”,你觉得这真的能改善什么吗?还是说——已经太迟了?

 

DHH:我认为 Cookie Banners 是 Web 体验变得糟糕的一个主要原因。它们几乎比早期那种弹窗广告还要糟糕——你知道的,“打地鼠”“打猴子”那种 2000 年初的弹窗。当年浏览器还能通过技术手段封杀弹窗,但 Cookie Banners 没有一个统一、有效的技术解决方案。我知道有插件能挡,但大多数人不会装。结果就是:Cookie Banners 成了互联网的一场瘟疫。

 

我是丹麦人,所以我觉得我有资格狠狠吐槽欧盟。Cookie Banners 最初的出发点是“高尚的”——限制数据收集、提高透明度。但这套东西在第一个 Cookie Banners 出现 5 分钟后,就已经被证明是失败的。可欧盟花了整整 15 年,才开始承认这个问题。现在他们说要“移除”Cookie Banners。

但“移除”是什么意思?你以为这就能抹掉你对互联网造成的破坏吗?不可能。接下来30 年,仍然会有大量网站继续保留 Cookie Banners——因为删掉它比留着更麻烦,或者网站早就没人维护了。

 

这是一件非常悲哀的事。当然,我并不是说:如果没有 Cookie Banners,人们就不会去用 ChatGPT。 那不现实。但它确实在可测量的层面上伤害了 Web,让浏览体验变得远比必要的程度更糟。

 

一旦你已经在用户体验上制造了第一道伤口,后面再多来几刀,心理成本就低多了。Cookie Banners 把“底线”拉得太低了,以至于很多 Web 设计师会觉得:再多放点广告、再恶心一点,好像也没那么糟。 这就像“破窗理论”。

 

主持人:那在 Cookie Banners 把 Web 搞成这样之后,你觉得互联网浏览的未来会走向哪里?

如果未来主要“浏览 Web 的不再是人类”,那这些问题还重要吗?

 

DHH:这是一个好问题。我觉得现在有很多聪明的人都在试图搞明白这件事,我们也在尝试各种不同的做法。某种意义上,这真的很像上世纪 90 年代中后期——当时我们在摸索互联网的第一个版本:这一切究竟会怎么运作?谁会掌握权力?谁会成为平台?谁又会成为把关者?所有这些问题,如今再次被抛回到空中,悬而未决。

 

不管我个人怎么看它最终会走向哪里,我都觉得这是一件令人兴奋的事情。互联网和计算技术,已经很久没有像现在这样让人感到兴奋了——上一次有这种感觉,还是在 2007 年。

 

那是 iPhone 刚刚问世的时候,我们迎来了一个全新的形态。随后经历了很长一段时间:好,一切都转向移动端了。而现在,我们又站在另一次巨大的转折点上——这一次,不只是“移动”不再以同样的方式重要了,它不再是你思考和构建产品时的那个主导视角。

 

与此同时,还有大量没有答案的问题。如果人类不再亲自阅读互联网内容,因此也不再阅读广告,那究竟是谁在为互联网写作?谁还会去生产那些美好的内容?当我们摆脱了 cookie 弹窗,重新拥有一个“干净体面”的门面,这件事真的还重要吗?

 

如果这件事本身已经不再重要,如果人们不再想为互联网写作,那 AI 又将从哪里获取它所需要的信息?我觉得现在有太多悬而未决的问题,以至于没有任何人哪怕稍微知道,最终的解决方案会是什么样子。而这,恰恰是活在这个时代最令人振奋的地方。

 

我毫不怀疑,将来我们回头看今天这个时刻时,会说:“好吧,这里发生了一次决定性的变化。”而且,这种变化在当下的可感知程度,甚至比前两次都要更明显。

 

互联网的出现,花了五六年的时间才真正渗透进社会,对整个社会产生巨大影响。后来是手机,速度快了一些,但也没有快到哪里去——iPhone 本身也经历了好几代迭代,我们一开始甚至都没有 App Store,这些东西都是慢慢才出现的。

 

但 AI 不一样。

 

AI 的出现,在当下这一刻就已经非常明显。任何一个用过第一版 ChatGPT 的人,都会立刻意识到:哇,这完全是一个全新的东西,它将重写规则。

 

所以,在这三次巨大的技术变迁中——互联网的诞生、移动时代的到来,以及现在的 AI——这是第一次,我们在实时发生的过程中就清楚地知道:世界一定会变得完全不同,而我们却不知道最终会变成什么样。

 

因此,我觉得你能做的最好的事情,就是接受三点:第一,我们不知道答案;第二,这真的令人兴奋;第三,赶紧上车,狠狠干脆坐稳了,看看它会把我们带到哪里去。

 

因为还有另一种冲动,过去在互联网时代出现过,在移动时代也出现过:那就是一部分人会说,“我更喜欢以前的样子。我喜欢变革发生之前的一切。我不喜欢 AI。我不喜欢也许会被整个互联网重新中介化。我不喜欢这些东西。我们能不能把一切都倒回去?”

 

不,不能。你没有这种权力。你无法把这些东西倒回去。

 

你当然可以在个人层面选择:我不用生成式 AI,或者我不买任何包含 AI 方案的产品。但这种想法,本质上是一种“阿米什式”的思维方式——而在任何时代,这都只是非常小众的选择。

 

如果这就是你,如果这就是你想与世界互动的方式,那很好,祝你一切顺利。我们有时候确实需要一些“疯子”来提醒我们:事情也可以用完全不同的方式来做。但这,并不会改变历史前进的轨迹。

 

“这真的是一个无比令人兴奋的时代”

 

主持人:你的兴奋更多来自哪里?是因为规则被打乱、棋盘被掀翻?还是因为你真的想用 AI 做事?

 

DHH:首先也是最重要的一点,我热爱计算机。我喜欢看到计算机做出以前做不了的新事情。说实话,让我觉得非常惊讶的是:有这么多在科技行业工作的人,其实并不怎么喜欢计算机——甚至包括那些每天都要和计算机打交道、让计算机“跳舞”的程序员,并不是所有人都真的喜欢计算机。

 

但我不一样。我爱计算机。我真的爱计算机本身,爱的是它作为一台机器的纯粹性。我并不是只把计算机当成一种“工具”,不是只想用它来完成某个目的。确实有一大类人,把计算机仅仅视为通往某个结果的手段。但不是这样,对我来说,这要更深得多——我就是单纯地热爱计算机这个东西本身,也热爱看到它去做全新的事情。

 

而现在发生的这件事,是计算机在我这一生中做过的最令人兴奋的新事情之一,至少可以和当年“计算机连上网络”这件事相提并论。

 

那时我们从 Commodore 64、Amiga 时代走过来,突然“砰”地一下就上网了,用小小的调制解调器拨号,连接世界各地的 BBS,听着它唱出那种刺耳却又美妙的声音——那同样是一次巨大的转变,也彻底改变了我和计算机之间的关系。

 

而现在,很可能是第二次这样规模的变化。

 

另一件让我感到兴奋的,是棋盘被彻底翻转了。尤其是我们已经形成了一些根深蒂固的格局。比如 Apple,我和那家公司有过不少摩擦。我非常期待看到 Apple 通过 App Store 以及整个移动生态所建立的那种“封闭控制”,被彻底掀翻,因为它也许将不再以同样的方式重要。

 

当然,我也并不天真到以为:只要棋盘一翻转,接下来就会迎来一个人人和谐共处的“涅槃世界”,一切都会变成开放平台,没有任何人占据主导地位。这显然不可能发生。不管最终的主导者叫 OpenAI、xAI、Google,还是别的什么名字,某种形式的集中和垄断,迟早都会出现。

 

但至少在现在,我们还处在“尚未整合”的阶段。有这么多公司同时在追逐前沿模型,却没有任何一家明显胜出。

 

就在五秒钟前,整个科技行业还准备给 Google 判死刑——“他们错过了浪潮”,“早期研究是他们做的,《Attention Is All You Need》那篇论文也是他们团队出的,但后来落后了整整九个月”,当时大家已经在谈论 Google 的衰落了。而现在,他们也许又重新回到了领先位置,至少在某些领域确实如此。

 

这种不确定性本身就让人兴奋——我们并不知道,最终谁会占据主导地位,甚至都不确定“主导地位”这种东西是否一定会出现。

 

这件事也很有意思。就在几周前,我还在推特上说,跑本地模型这件事有点“奇怪”。因为我之前试过一些本地模型,说不上什么时候,总之那时体验一般。但就在这周,我又开始重新跑本地模型,然后我心里想:“靠,我之前说的话,保质期也太短了吧。”

 

现实变化的速度已经快到:三个月前说的任何一句话,现在看起来都可能有点傻。

 

而且我真的被本地模型现在的水平震惊到了。它们当然还比不上最前沿的模型,但如果再往前看两年呢?有没有一种可能,根本不会出现一个“唯一的赢家”?赢家反而会是开放模型?最终的局面,会不会类似开源软件对后端软件世界造成的影响?

 

过去我们是有绝对主导者的。我们有过 Sun,有过 IBM,在某种程度上也有过 Microsoft。但这些都已经不存在了。整个后端世界——从 Linux 到各种数据库,再到 Ruby、Rails,以及所有这些东西——几乎全都是开源的。你再也看不到那种一家独大的绝对统治。

 

而在另一边,在前端世界,尤其是移动端,我们却看到的是彻底的垄断:只有两个赢家,Google 和 Apple。他们对平台拥有完全的控制权,而且还在不断收紧螺丝。我们唯一的希望,似乎只剩下立法或监管,而说实话,我对这条路也已经越来越悲观了。

 

所以现在的局面真的很令人兴奋——它可能朝两个完全不同的方向发展。

 

我们很可能还是会走向某种形式的垄断,因为这是面向用户的界面层。而在历史上,我几乎想不起有哪个时代,这种层面没有被“征服”过。

 

但也有另一种可能:这些开放模型会好到一个程度,以至于“谁占据商业主导地位”这件事根本不重要,你甚至不需要那种商业上的统治。

 

这真的是一个无比令人兴奋的时代。

 

“我们的产品也试过 AI 功能,但最后都没上线”

 

主持人:这挺有意思的——你正好是在这个变动时期推出新产品。HEY 大概是五年前发布的,然后最近 Fizzy 也上线了。我们特别想知道:37signals 内部现在到底在发生什么?你们到底怎么用 AI?你们做 Fizzy 的时候,用没用 AI?用到什么程度?我很想听点“细节层面的现实”,AI 在 37signals 具体怎么落地、怎么被用起来的。

 

DHH:哦,用的,当然用。我们每一个开发者都在某种程度上使用 AI。我自己每天也在用 AI。

但我也得先加一句前提:我虽然对我们即将进入的新现实非常兴奋,但我每天处理的仍然是“此时此刻真实存在的东西”。你必须学会在“ hype 的列车”和“现实的列车”之间保持平衡。

 

而在我的“现实列车”里,AI 没有在写 Fizzy(一个 Kanban 工具)。

 

AI 也没有从零写任何东西。

 

我确实用过 AI 做过各种“一发入魂”的实验——但它们通常都只停留在“一发入魂”。因为只要我进入真正的细节:要持续演进、要迭代、要打磨,我就会想:“嗯,这就是在浪费我的时间。到这个阶段,我自己写反而更快。

 

当然,AI 在另一些方面确实能大幅加速。我们在做这些产品时,也在一定程度上使用 AI。但我们并没有大量用 AI 来写 Ruby 代码。如果用 AI 写 Ruby,通常也只是“机械式翻译”——比如:“这里有个我们知道已经存在的东西,你能把它用 Ruby 版本写出来吗?” 它能给出一个初稿,有时候会稍微帮点忙。

 

AI 更有价值的地方是在我们的一些 Go 代码上,因为那里面“样板代码”更多,收益更明显。

但即便是 Ruby 和 Go 这两块,也谈不上“改变游戏规则”。

 

真正改变游戏规则的是:

  • 你想学习一个新 API

  • 你想理解一个新概念模型

  • 或者我们做实验,直接用 AI 去尝试构建“能真正带来价值”的 AI 功能

在这些方面,收益更大。

 

但我们离那种——某些 CEO(比如 Anthropic 的 CEO 那种语气)说的——“再过五分钟我们就不需要程序员了”还差得远。我就想问一句:你们到底用的是什么模型?我用的是 Opus 4.5(或者现在的版本),但那种说法完全不符合现实——至少对于“持续演进”这类工作来说,是完全不成立的。

 

我仍然保持开放心态,我也能看到那种承诺。我记得互联网在 1994、1995 年那会儿是什么状态,我当然能做外推:我们也许真的会走到那一步。也许我们会到一个阶段:人类不再编写大多数代码。

 

但如果你看 Fizzy:95% 的代码,是人类亲手敲出来的

 

主持人:有意思。真的?你们内部也这样认为?

 

DHH:你回头看 Fizzy 的整个开发历史,会更有意思。我们在 Fizzy 里做过一堆 AI 功能实验:我们试过做一个 AI 驱动的命令行,用来和卡片(cards)交互;我们也试过 AI 摘要,给一些内容自动做总结。但最后这两项我们都没有发布

 

Basecamp 也是一样:我们实验过很多不同的 AI 功能,但没有一个能达到“明显更好、用户会一直爱用”的标准,所以都没进最终版本。

 

我仍然相信未来这会改变。只是我们现在还没到那个时刻。

 

我也见过其他地方做得更成熟的案例。比如我在 Shopify 董事会,Shopify 做的 Sidekick(他们的 AI agent)——用来帮助商家搭建店铺、优化店铺——真的很不可思议。那里面有一些非常具体、非常可触达的收益,我觉得几乎无可争辩。

 

我们仍然处在一个阶段:距离“AI 让一切始终更好、更快、更省心”那种明显的拐点,还差一点。

 

也正因为还没到那个拐点,所以才会出现一些反弹——我认为其中不少反弹甚至是合理的。

因为很多人用了所谓“AI 功能”之后会觉得:“这玩意儿太烂了。”“不更好,也不更快,甚至很蠢。”

 

比如摘要。我们刚刚还提到 Apple。Apple 对新闻、短信之类的摘要,我真不知道有多少人真喜欢开着它。它在很多情况下都离谱地糟糕、离谱地错误。连 Apple 这种体量的公司都做不对,那你基本可以合理推测:很多别的公司也同样做不对。

 

不过我也想强调:最近我们确实找到了几个非常好的 AI 用例。其中一个是我们的安全漏洞赏金项目(通过 HackerOne 运行)。我们会收到海量的报告——某个研究员声称在我们的应用里发现了漏洞。我们必须处理这些报告,而现实的数学非常残酷。我们大概会收到……可能一个季度 300 份报告之类的数量。但真正“靠谱、有效、值得修”的——大概只有 3 份。

 

也就是说,真正有价值的比例大概只有1%。而这个 1% 非常重要,因为它们可能真的指出了一个严重问题,我们必须修。但为了抓住这 1%,你必须花巨大精力去验证剩下99%的垃圾——这对团队来说是巨大的麻烦、巨大的时间黑洞、巨大的烦躁来源。

 

AI 在这件事上简直太厉害了:它能在报告进来时就先处理一遍,给我们一个初步判断——“这到底是扯淡,还是不扯淡?”然后还会帮我们写回复邮件。

 

而写回复其实才是痛点的一半:当 99% 的提交都是彻头彻尾的狗屎,写这些狗屎的人还常常—— 根本不懂自己在说什么,却又特别理直气壮,还特别不耐烦,甚至还一副“你必须立刻给我 5000 美金赏金”的态度。

 

这时候让人类程序员保持冷静、不直接对他们开喷,是很难的。真的,你会很想直接骂人。

 

AI 就完全没这个负担。它特别乐意用一种非常冷静的语气写一大段回复:“为什么你这个东西不成立。”它帮我们省了大量时间。

 

主持人:有意思。所以 AI 是拿到报告之后,去看你们代码库,然后判断它到底对不对?

 

DHH:对。没错。就是这样。把这两件事结合起来。

 

主持人:听起来需要一点技巧:拿到安全报告,很多是垃圾,但到了某个层级,你确实得打开代码去确认“这到底是不是真的”。

 

DHH:以前要看 100 份报告,现在可能只要看 5 份——这就是真实的生产力提升。就算你最后要看 10 份、20 份,只要你能把原本 100 份的工作压缩到 20 份,这就是 AI 承诺的生产力收益。如果我们能把这种压缩能力用到业务的其他方面——那简直太好了。这也是为什么我们一直在尝试把 AI 用在一些具体环节上。

 

另一个我们断断续续尝试了好几年的方向是客服支持(support)。但 support 很微妙:如果你只能 90% 正确,那其实很糟糕。因为这意味着你会有 10% 的概率把事情说错——而且是对着客户说错。你如果给客户一个完全错误的答案,让客户体验很差,客户可能就直接流失了。

 

那这个客户的终生价值是多少?

 

你以为 AI 带来的那点“节省成本”,可能瞬间就被一次流失抵消得干干净净。我们上一次认真测试让 AI “做完整客服链路”,大概是 18 个月前左右。效果不太行。但一切都在飞速变化。我知道 Intercom 有一个叫 Finn 的 AI agent,采用得很好,看起来我们也确实该再试一次。

 

而这又回到我最初的那种兴奋:一切变化太快了。

 

有些人会觉得这很让人迷失方向,我觉得这也是很多焦虑的来源。但如果你像我一样,只是单纯喜欢看计算机变得更强大——那现在真的就是一场大戏。坐在第一排,实时看它发生。

 

我们从“那个吃意大利面的人”——看起来像噩梦一样的生成图——走到了今天这种几乎不可区分的输出。接下来,我们很可能会在更多领域看到同样的跃迁。你得保持一种“敬畏感”和“惊奇感”。

 

如果你此刻身处这个行业,和计算机打交道——你的“惊奇感”就是你的安全绳。它能对冲焦虑,对冲不确定性,让这一切变得可承受。

 

当然,我们并不能消除不确定性和焦虑。比如:我的工作三个月后还存在吗?这种焦虑非常合理。但你可以用惊奇感来对冲它:“这些硅做的小东西也太聪明了吧。”

AI 时代,为什么你发布的产品别人看不见?

 

主持人:它们真的很神奇。这就引出了一个更大的问题:软件商业模式的未来到底会怎样?这确实很神奇,但也真的太不一样了。你能不能展开讲讲:创业公司会走向哪里?软件产品会走向哪里?软件工程师会走向哪里?未来到底会怎样?

 

DHH:有一点我现在非常确定:今天发布一个新产品,从“把它做出来”的角度看,是史上最容易的。AI 让构建更容易;工具史上最好;Ruby 和 Rails 也从未如此成熟。对所有人来说,这都很棒。结果就是:市场被海量新产品发布淹没了——永无止境的“上百万、上亿级别”的新发布。

 

这就是你现在要面对的现实。门槛被降低了。而我不确定所有人都会在“轮到自己发布时”还为门槛降低而兴奋——因为你一发布,可能就是一片寂静,连个回响都没有。我们刚发布 Fizzy,算是一次不错的发布,但它并没有像我们历史上某些发布那样“声量巨大”。

 

这当然不只是 AI 的原因,还有社交媒体算法的原因。以前,我在 X(Twitter)上有粉丝,他们就能看到我发的东西。但现在,你会发现:X 上正在发生 Facebook 在 2010 年左右发生过的那一幕——你有粉丝,但你触达不了他们,除非你付钱给平台“买触达”。

 

但现在甚至都不只是“付钱”这么简单。问题变成:我甚至都看不到我合伙人 Jason 的推文了。除非他发了一条“爆款(banger)”,爆到病毒式传播,否则他的内容就不会出现在我的 For You 页面里。一切被压缩成了“你能不能发出爆款”。

 

拥有大量粉丝这件事的价值,被严重稀释了。我在 X 上有五十多万粉丝——这在我发一些犀利观点、能引起传播时依然好用。但当我想发“右勾拳”(也就是营销、转化)的时候,它不再提供过去那种收益。当然,这种变化也不全是坏处。现在小账号也可能爆:就算你只有 10 个粉丝,只要你发了一条爆款,算法也可能把你推上去。算法选赢家和输家的方式,反而让那些没有花 20 年积累粉丝的人受益。但这真的好吗?我大概发了 7 万条推文——这真是离谱。但 18 年下来,这些投入几乎没有“可积累的剩余权益”(residual equity)。

 

我不确定这是不是我们长期想要的生态。但可以确定的是:对我们的营销方式、产品发布方式来说,这已经是一个全新的世界。

 

我们公司现在的阶段是:我们能承受“靠一靠、观望一下”,说一句“挺有意思”。但如果你还处在“必须打出名气”的阶段,你肯定会更焦虑。因为以前那套打法,已经不像过去那样奏效,你得发明新的东西。

 

事实上,这种认知直接影响了 Fizzy 的发布策略:我们承认——你不能再用老办法发布产品了。你手里的名单、你已有的受众,不可能再用“传统方式”被激活。你需要持续不断的“滴灌”:一滴、一滴、一滴。

 

如果我们希望 Fizzy 这个品牌能在用户心里留下印象,以至于当他们遇到我们要解决的问题时,会想起它、会去 fizzy.do,我们就必须设计一种策略,让我们能一直这样做下去。这也部分解释了为什么我们从一开始就把 Fizzy 开源。

 

把 Fizzy 从发布第一天就开源——

  • 对所有想学习“生产级 Ruby/Rails 应用如何构建”的人来说,这是一个巨大的礼物;

  • 同时,对我们来说,它也给了我们一个“更频繁谈论 Fizzy 的许可”。

 

现在社交平台上,纯商业化的转化号召(call-to-action)越来越推不动。以前它传播力也一般,但好歹还能“硬塞”一下——那就是所谓的“右勾拳”。现在右勾拳打不出去,你就得换一种卖法。我目前觉得最管用的策略,是把“给价值”和“求转化”合成一拳:轻击(jab)和右勾拳(right hook)不再分开打,而是同一条内容里同时完成。

 

比如我会发:“Fizzy 里有个很酷的小功能——可能是我们做的,也可能是社区做的,或者我只是想提醒你注意到它。”这条对开发者有用;与此同时,我也顺势把品牌名反复露出来:Fizzy、Fizzy、Fizzy……品牌就是靠重复进入脑子。

 

关键是:重复仍然有效,但必须绑着价值一起出现。光当“慷慨的好人”持续免费输出已经不够了——你得把输出和你正在做的产品强绑定。这就是我们现在的打法。当然规则也可能随时被改写,但就此刻来看,这就是现实的游戏规则。

 

主持人:你说“现在你只要把东西做出来就行”,这句话听起来很有趣,因为我觉得你以前不会这么说。你从一开始就很重视营销——从最早的 Rails demo、到各种“挑衅”、到你如何推销愿景……你一直都在想怎么卖、怎么讲故事。但现在市场被淹没了,好像营销反而变得更重要。

 

更巧的是,我们内部也在聊类似的事。我们在做 AMP(我们在做一个 coding agent),我们内部一直说:现在外界没有太多“强烈的 OTE”(那种外溢式的注意力/势能)。我们想做的是:用一个故事把人“拉着走”——告诉他们我们在这个动荡的时代学到了什么,让他们产生一种感觉:“如果你跟我们走,门是开着的;如果你跟我们走,我们会分享我们学到的东西。”这不是那种“社交媒体上再来 10 个小贴士”的套路,而更像是:“我们一起干这件事。”

 

而你刚刚说的,正好对应了很多人最近在讲的: “爆款发布(big launch)这套已经不灵了。”Product Hunt 死了。Hacker News 的 launch 也……

 

而且我认识 Fizzy,就是因为 Jason 一直在 X 上做这些小 screencast:“现在进展到哪了”、“这里出了一些 X 问题”、“这里哪里又崩了”。我会偶尔刷到它们,可能是 Grok 或者算法觉得我会喜欢。但我的感觉是:我被“拉着走”了——像在跟着你们一起把产品做出来。所以我后来才注意到:噢,原来它上线了。

 

DHH:你说得对,这确实是我们这个时代发生的巨大变化之一。我记得我们在 2006 年写《Getting Real》(那本书)时,我们谈过“爆款发布(blockbuster launch)”这套模型:先放 teaser(预告),再放 trailer(预热视频),最后来一个 blockbuster launch(大爆发)。

 

这套模型已经死了。爆款不再发生。因为我们已经没有共享文化了。没有共享的事件。我们只有每个人各自的个性化信息流——正如你说的,算法之神决定:今天给你投喂哪一小块“刚好合适”的东西。所以,一方面,你必须“灌满渠道”(flood the channel)。

 

另一方面,也有个有意思的反面:以前我会更克制,比如提醒自己别发太多推。有时候我会突然进入那种“多条意识流同时开喷”的状态,但在过去你会想:“哎,我今天已经发第七条了,会不会太多?”

 

现在这种限制不存在了。你一天发 100 条都没关系。因为你不会“淹没”任何人的 For You 页面——算法会替你处理。而你发得越多,你就越有机会让一些小种子落地、生长、发芽。你还需要更长的周期。

 

爆款发布以前的核心逻辑是:“就在这一天,我们发布,然后所有人都在这一天关注。”现在不会了。大家不会在同一天关注同一件事。但随着时间推移,如果你把“发布”理解为:一整个季度、或者一年、甚至某些情况下是一整个十年——你依然可以做“分步骤的搭建”,依然能起作用。因为营销的底层真价值仍然成立:口碑传播、故事激活、好产品、好钩子——这些依然有效。

 

只是,它变得慢得多。你不会再看到那种巨大峰值,然后被“发布日的高潮”爽到。某种意义上,现在的发布没有那个“超级尖峰”了。当然,很多人本来也从来没有过“超级尖峰”,因为大多数发布都什么也不会发生——失败一直是常态。但我现在更强烈地觉得:你越来越难“工程化制造一个爆款”。

 

这个夏天我又学到(或者说被提醒)了一点。我在做一个项目叫Omarchy——一个 Linux 发行版。我做得很开心。当我推进它时,我从营销角度体会到:如果你不断分享项目进展、再配合一个疯狂的发布节奏,价值非常大。

 

我记得第一个月我做了大概 40 次发布?简直离谱。节奏快得惊人,整个过程一直都充满了不确定性,所以特别刺激、特别带劲。这让我可以连续三个月“轰炸”所有人的信息流。更有意思的是:人们明明意识到自己在被轰炸,却仍然无力抵抗。我收到过无数条推文,大意都是:“行行行,我第 17 次听说 Omarchy 了,我服了,我试一下。”“我投降,好吧,我装。”这又回到了营销最本质的东西:重复。

 

有一个老的经验法则(我也不知道现在是不是过时了):你需要听到一个品牌七次,它才会在你遇到问题时被激活——你才会想起它能解决什么。所以我当时就是在努力让尽可能多的人“听到七次”。同时我也在做 Jason 说的那个:enthusiasm transfer(热情迁移)——把创作者的兴奋感转移给别人。这一直是营销的一部分,但现在比以前更重要,因为营销越来越“人格化”。

 

我们还发现:社交平台从来就不怎么喜欢公司账号,但现在它们几乎把公司账号都“幽灵化”了。我们公司账号发什么都没用:从 37signals 发,没人理;从 Basecamp 发,也没人理。一片寂静。然后我看到一些“巨型媒体账号”——几百万粉丝那种——表现也一样惨。这就是算法:它现在真的讨厌品牌账号。除非你是那种“神级品牌账号”——有账号运营团队,能自己成为内容源。

 

但另一部分也让我们意识到:这游戏即便对我们而言仍然很残酷——而且很耗人。这种耗人让我想起我听一些 YouTuber 讲过的东西:如果你是 influencer(网红)、content creator(内容创作者)——这俩词简直是现代词汇里最让我厌恶的词之一——你就会被迫持续生产内容。

 

你维持曝光的方式只有一个:不停输出、不停输出、不停输出(chop chop chop)。以前还有一种“喘息”:你做完 teaser、trailer、爆款发布,然后你还能休息五分钟。现在不行了。那种节奏不存在了。所以一切的速度被推到一个夸张的程度。说实话,我很庆幸我现在不需要“去攒人生的第一桶金”了(笑)。

 

主持人:我们最近也在高频发东西:过去 10 天我们写了 8 篇 release post。这和你做 Omarchy 的方式很像:你需要重复。但那种 5 年前的“空洞重复”已经不行了——比如:“两天前我们大发布,记得吗?”“一周前我们大发布,记得吗?”这种完全没效果。你必须一直有新内容,否则算法不推。节奏太夸张了。

 

而在我们这个做 AI agents 的领域,你还会被大模型厂商不断“催更”——他们两天发一个新模型,用户两天后就来问:“你怎么还不切?怎么还没上新?”所以现在疯狂的事情特别多。

 

我的问题是:你写过《It Doesn’t Have to Be Crazy at Work》(工作不必这么疯狂),但现实已经如此——这在实践中到底怎么改变软件开发?你一直是小团队、小公司路线的拥护者。 但现在如果你想让产品成功,你好像必须把一天切成两半:一半写代码,一半发推、做内容、做传播、分享进展。你觉得这会怎么影响未来的软件开发者/软件公司?营销和软件是在融合吗?

 

DHH:我一直都说:这些东西本来就是一回事。“Marketing is everything(营销就是一切)”——这是《Rework》里的一章。而“everything”真的就是一切:软件、发布、客服、那些乱七八糟的推文、写作、播客……全都是。我们这么干已经 25 年了。但我同意:现在的节奏、算法的胃口,确实到了一个“无底洞”的程度,这种感觉以前没有这么强烈。不过我也觉得:这可能就是竞争加剧的样子。

 

当年我们做 Basecamp 的时候,行业比现在小太多了。那时做 Web 产品的团队少得可怜,以至于我们能关注到每一次发布。后来进入 Product Hunt 时代,你至少还能“一天看一个新东西”。现在结束了。

 

甚至 OpenAI 发一个新模型——那可能烧了 4 亿美元——它也只能获得几个小时的峰值关注与兴奋。

 

所以,它在很多方面变得更难了。可另一方面,基本面依然没变,你得小心别被这些压力带着跑偏。做有趣的东西、做值得讲的东西——这带来的杠杆还在。

 

你要“脱颖而出”的难度变大了,因为参与者更多了。

 

但只要你真的突出,注意力仍然在那里。注意力并没有从系统里被抽走。甚至可以说:注意力比以往更多,因为参与系统的人更多了。

 

这有点像 Spotify。你总听音乐人抱怨 Spotify 付得太少,但你再看数据:音乐产业的规模依然很大,甚至更大,而且在很多情况下,更多收入是直接流向音乐人(因为他们不再必须签那些苛刻的发行合约)。

 

所以一部分现实就是:我们在抱怨“事情太美好了”,但又没有人真的开心。

 

有个段子讲得很好:“一切都很棒,但没人开心。”我觉得这确实说中了某种人性。事情确实很棒:越来越多人能更快地做出东西。而这自然会带来更多竞争。资本家最讨厌的一件事是什么?是竞争。这就是那个系统最大的讽刺。我们都在拼命挖“护城河(moat)”。但护城河是用来挡谁的?不是挡“龙”(Not dragons)——是挡竞争对手。

 

竞争对手,这才是护城河真正要挡的东西。这个隐喻本身也很有趣:你会想,那它把谁“圈”在里面?客户?你在护城河里放鳄鱼,让客户别游出来?这个隐喻挺自利,也挺资本家叙事的。但无论如何,我玩这个游戏,也乐在其中。同时我也很高兴——现在我比过去任何时候都更清楚地知道:我对“什么真正有效、什么无效”的确定性变少了。

 

一直以来,很多东西本就是谜。比如我们 2004 年发布 Basecamp,它一路成了现象级成功,今天仍然成功。

 

我经常会想:为什么?为什么偏偏是 Basecamp?在我 25 年的职业生涯里,我做过很多东西,但没有任何一个产品层面的命中,能像 Basecamp 这么“正中靶心”。我至今也不完全明白原因。尤其是现在,Basecamp 所在的领域竞争者多得多。但每周仍然有成千上万的人注册一个新的 Basecamp 账号。每周我都会想:这怎么可能?怎么会每周都有几千几千人来注册?

 

这一直是个巨大的谜。

 

我觉得这种谦逊非常重要——无论你在做产品、还是在做营销,你都要记住:你不可能了解一切。你不可能确切知道什么有效、什么无效。你能做的,是去尝试很多东西,然后得到一些迹象、一些推力、一些暗示:市场想要什么、算法想要什么、客户想要什么。

 

但你不可能制定一套“主战略”,并指望它具备可重复的复刻性。即便是在一个高度“爆款驱动”的行业——比如我刚刚提到的音乐行业——也没人真正搞明白。的确,有些人比别人更擅长做出爆款,但也没有谁掌握一套公式:“照着这套流程,我们就能稳定生产爆款。”商业也是一样。

 

只是现在曲调又变了。你可以因此沮丧:“我以前那套把戏不灵了。”也可以因此兴奋:“什么?那我更迫不及待想学习——现在到底什么才有效!”我也接受一个现实:我不可能永远拥有过去拥有的一切。世界不是这样运作的。

 

“独立开发者”之梦没变:核心还是“一个人也能干”

 

主持人:我感觉我们好像回到了 2004 年。我记得你发布 Basecamp 的时候,你在 YC 还是哪里做过一个演讲,你当时大意是说:如果你有个想法,然后能找到 1000 个客户,每人每月付你 25 美元,你的人生就彻底不一样了。那次演讲就是我决定辞掉 Web 开发工作、去做 Dropsend 的起点——也开启了我整个职业生涯。

 

我觉得我们又回到了那种状态:现在你真的可以有一个想法,甚至可能是“一人团队”。所以,我们现在是不是就处在这个阶段?还是说,所有 indie hackers(独立开发者)最终都会被“吃掉”?这难道不是好事吗?

 

DHH:我也觉得这是好事。而且这里还有个讽刺点:我 20 多年来一直在讲——开发者生产力真的重要

 

这就是 Ruby 和 Rails 的核心前提:你不需要一个八人团队,你一个人也能做出来。Rails 从一开始就试图成为“单人开发者的框架”,而且我认为它在这件事上比几乎所有框架都做得更成功。

 

而我们今天对 AI 兴奋的原因也一样:我们对小团队能获得的杠杆感到兴奋,因为 AI 能做很多事。

 

有一个根本事实没变:当你降低实验成本、降低构建一个“值得做的东西”的生产力成本时,你就会有更多“射门次数”(shots on goal)。

 

Ruby + Rails 能做到这一点;AI 也能做到;甚至更好的是:AI + Ruby on Rails 一起做到。

但我不确定游戏的本质在这点上发生了根本变化,也许只是变得对更多人可及了。

 

我觉得这大概率是好事——不,只能说:这就是好事。我们应该从“对人类整体有什么分类级别的好处”来理解:对全人类而言,难道不是更好——我们有更多实验吗?即便最终“命中并变成可持续商业”的人,可能比例更低(我甚至不确定这是否属实,但先这么假设)。

 

而作为一个文明整体,我们最终仍然会在更多类别、更多细分领域里,更快地获得更好的软件。问题的一部分在于:无论是 Web 开发圈,还是独立开发者(indie hacker)圈,很多讨论都过于短视地集中在那些我们一直反复折腾的“通用大类”上。

 

比如待办事项应用。好吧,我职业生涯里大概已经做过七个了,而全球可能已经有二十亿个同类产品。最后真正成功的,可能也就那么几个,剩下 99% 都失败了。

 

但你知道吗?你有没有试过给美发沙龙做软件?他们可没有一万种选择。有时候,他们甚至几乎没有任何选择,除了那些“狗屎一样”的系统。那种三十年前做出来的烂软件,出自一些对“好软件”毫不在意的人之手。所以,如果你愿意跳出这些吸引了绝大多数人的大而泛的领域,其实机会依然多得很。

 

颇具讽刺意味的是,我自己长期以来恰恰以“不去碰这些方向”为傲——只解决我自己的问题。因为我觉得那样更简单,而且也确实如此:当你解决的是自己的问题时,你立刻就能判断你做出来的软件到底好不好。

 

这并不意味着它一定会成功,但至少你有了第一道过滤器。如果让我去给美发沙龙做软件,我其实并不知道什么是好、什么是坏,我得不停地去问别人:“你们怎么看?你们给我什么反馈?”老实说,我不确定自己是否适合为了正在构建的软件,去进行这么多和他人的互动。

 

但我认为,对那些愿意这么做的创业者来说,机会是非常多的,而这其实也是大多数人。只要我们稍微把视野放宽一点,不要总是说:“天啊,现在再做一个新的待办事项应用太难了。”因为这个领域在过去三十年里,已经被来来回回地“薅”了大概五十亿次。

 

但你往外看——就只要离开它五米远——到处都是一大片未被开发的绿地。真的,到处都是。

 

DHH 说 95% 代码是手写的,但他又天天用 AI

 

主持人:David 你说 Fizzy 95% 的代码还是手写的,对吧?你每天都在用 AI。但对我来说,今年正好相反:我现在大概 90% 的代码都是 AI 写的。所以我的疑问是:如果你说你不怎么用 AI 写代码、或者 AI 不替你写代码——那生产力提升到底从哪里来?尤其对一家小公司来说,比如给美发店做软件,它不需要庞大的客服团队,也不需要很多外围部门,核心就是把软件做出来、交付出来。所以你觉得 AI 让软件开发更快的关键在哪里?

 

DHH:我说说我自己的体验——从这波 AI 开始我就一直在用。

 

我的生产力提升,主要来自:它让我更强、更聪明、更快——

  • 更快上手新 API、新技术

  • 更快理解新概念(我会让 AI 解释给我听)

  • 更快找到“为什么这个 bug 会这样”的正确线索

 

比如 Omarchy 这个项目,如果没有 AI,它就不会存在。我不会有耐心去 Linux 论坛里翻半天,去解读那些晦涩的错误信息到底是什么意思。这对我来说不可能。

 

AI 带来的巨大提升,是给了我一个地方,把错误信息贴进去,然后得到比那种居高临下、还过时三年的 Stack Overflow 回答更好的线索。

 

收益巨大。真的巨大。

 

还有我需要读某个东西时、学习某个东西时,它也很有帮助。举个快例子:我们最近把 Rails 的 CSRF 防护机制改了——从以前“把 token 放进 cookie”的方式,改成使用现代浏览器的新特性:通过一个 header 来做。

 

我可以直接问 AI:“那个 header 是什么?”“什么时候开始支持的?”“具体有哪些细节?”这些答案我当然也能手动查:去 caniuse.com、看历史、查 RFC……全都能做。但 AI 能把这些东西一盘端上来,整合在一起,省事又快。

 

“AI 只是让我变聪明了”

 

我能更快学到更多东西。而这正是我真正喜欢的地方:不是让 AI 替我做事,而是用 AI让我更聪明

 

当然,这种模式未来未必会成为主流。

 

就像你说的,你已经让 AI 写很多代码,甚至多数代码。我完全准备好在某个时点,我也会进入那种状态。

 

但就现在而言,我仍然在意代码的样子。我在意它的美感。我在意打磨、推敲、润色。

 

这可能是一种“奢侈”,有点像现代的马鞍匠:他会在意字母压得是否刚好、针脚是否完美。你可以说:“但你已经不是交通运输的主力生产体系了。”我会说:那又怎样?只要我还享受,我就会继续做我手写代码的“马鞍”。

 

而且我也意识到:这种模式目前仍然是有竞争力的。

 

在 37signals,我们并不觉得自己在产出能力、发布能力、改进能力上落后。因此我对一些说法保持怀疑:“AI 已经强到可以把标准 SaaS 公司的一半程序员裁掉,还能跑得更快。”我没看到。

 

我当年也用同一套“根本测试”来审视云计算:“我们能不能用更少的人、花更少的钱,做更多的事?”我们几年前退出云,就是因为这个测试没有通过。而且我也不太听说这个测试在别处通过过。云计算并没有让你把运维团队砍半、把基础设施预算砍半。很多时候恰恰相反:上云之后团队规模翻倍,账单翻四倍。

 

主持人:你们切换之后是不是省了类似每月一百万美元?很夸张的数字?

 

DHH:我们现在大概是一年省200 万美元。我们云预算峰值大概是 340 万美元,现在的持续成本在 100 多万美元左右。所以在成本上,节省非常巨大。

 

这和 AI 有一些相似之处——不完全相同,但有相似之处:我觉得现在很多人在用 AI,脑子里觉得自己“好高产”,但他们其实交付更少、做出来的东西更少,甚至理解得更少。

 

“Vibe Coding”的风险:能力会从指尖流走

DHH:AI 还有另一个因素:当我尝试“氛围式写代码”(vibe coding)的时候——尤其在一个我还没完全内化的新领域——我能明显感觉到我的能力在从指尖滴走。

 

我刚开始做 Omarchy 时,写了很多 bash。我以前从没系统写过大量 bash,最多就是命令行里用用。然后我发现自己一次又一次问 AI:“某个 if 条件到底怎么写?”

 

这时你就会想:“为什么我没有内化这件事?我没内化,是因为我把它外包给 AI 了。”那这样更好吗?我现在更划算了吗?还是说,我跟当年那些老师一样天真:他们以为有了计算器,学生就不需要背乘法表了?不对。如果你不能迅速在脑子里算出 7×7,你真的会把自己变成傻子。

 

主持人:那你有没有形成一种直觉:该在哪里划线?你不可能知道一切,对吧?你也会把你不会的事交给信任的同事去做,你不会因为让同事设计某个东西就觉得“能力在流失”。你能接受:“这事我不需要会 / 我不想会”。那在 2025 这样疯狂的一年里,你有没有更清晰的边界:哪些你想自己掌握、哪些你可以忽略?比如 bash。为了推进 Omarchy,你觉得 bash 该学到什么程度?又有哪些可以不学?

 

DHH:我觉得我得会几乎全部,除了怎么在 bash 里搞数组(笑)。因为 bash 里数组那玩意儿复杂得离谱,简直反人类。但我其实认为:人类大脑是个很惊人的器官,它不会像 LLM 那样“容量到顶就装不下”。我们用得越多,记忆和能力的“配额”会增长。

 

所以我真正担心的趋势是:随着时间推移,我知道得更少、我变得更不胜任。我需要一条向上增长的移动平均线。

 

我不需要把所有领域都吞进去——我不需要什么都懂。但一年结束时,我应该在更多领域懂得更多。如果我不在这种上升轨道上,我会无聊。我无聊就会没动力。没动力我就什么也不干。这也是 AI 讨论的一部分:我们得想清楚,我们真正享受这套方程式里的哪一部分。

 

我个人不享受当项目经理。我会做——而且不止偶尔——因为我想要“组织一群人”能产出的结果。

 

但当我看 AI 这件事时,我不想当一群 AI agent 的项目经理。那不是我想要的状态。

 

我喜欢写代码。而至少在此时此刻,这是一个仍然有竞争力的选择。

 

当然,这可能三个月后就变了;下周就变了;随时都可能变。但 AI 公司那些领袖已经预言“再过五分钟就结束了”预言了很久了——现在也没结束。

 

你看 AI 公司自己,它们也还在招聘大量程序员。

 

我们并没有到 AGI,没有到那种“人类写代码的时代死了”的程度。

 

这并不否认你说的:有些程序员已经觉得自己大多数代码都让 AI 写了。但至少在市场上——按我看到的情况——还没有出现那种“压倒性差距”,就像:一个公司用马车送啤酒,另一个公司用卡车送啤酒。那种经济差距会非常快把前者淘汰。我还没在 AI 身上看到这种情况。也许数据有滞后;也许已经发生了——我仍然怀疑。

 

即便我在长期上是极度“AI 乐观派”,但就当下,我没看到。

 

有时神得离谱,有时烂得没法维护

 

DHH:而且原因之一是:我每天都在“盯”着它。我一直在问 AI:你能给我写这段代码吗?

它会写。然后我会想:“不,我不喜欢这个。”“我甚至不想维护它。”“它做得还不如大多数初级程序员会被要求做到的水平。”

 

但偶尔,它也会给出另一种答案:我问它一个东西,它拼出来的结果让我震惊:“它怎么知道的?它怎么能把这些全部串起来?”那真的很惊人。

 

所以我感觉它像一个闪烁的灯泡:你在完全黑暗里,它突然一闪——你觉得“我什么都看见了”。两秒后,啪,又全黑。如果你能让这个灯泡稳定下来、一直亮着——那对人类当然是巨大的福音。

 

顺便说一句,我很喜欢美国的一点就是:美国把这个“闪烁灯泡”当成一种信仰——相信我们能把它变可靠,能到 AGI。现在大家就是一场巨大的押注:押注这一定会发生。即便我这么 AI 乐观,我仍然会对这种规模的“集体确信”感到惊叹:一个经济体一起说: “不管花多少代价,100 万亿、1000 万亿,我不在乎,我们一定能到那里。”我会想:这也许就是为什么它会成为“第一名”。

 

主持人:确实是个令人兴奋的时代。就像你说的——能活在此时此刻本身就是一种奇迹。我们也差不多到一小时的时间上限了。今天能和你重新连上线真的很开心,感谢你抽时间来。你现在也在忙 Fizzy。要不你简单跟大家说说:Fizzy 是什么?在哪能了解更多?然后我们就收尾。

 

DHH:当然。Fizzy 在fizzy.do。它是对 Kanban(看板)的一个全新诠释。这里还有个小故事:Jason 特别擅长解释“为什么值得回头重新解决一个问题”。

 

Kanban 这个概念来自 50 年代,是丰田为了管理生产线提出来的。后来我们把它做成了软件。第一代软件化的版本大概是 2000 年初。再后来 Trello 出现,把这个领域彻底带火、带爆。但我们还是回到这个领域,说:“你知道吗?我觉得我们还能做一个更好、更舒服的版本。”

 

很多人很难理解软件这件事:明明一个问题领域已经有很多玩家了,为什么你还要进去?原因可能只是:你想做得更好、更有趣、更轻量、更丰富多彩、更令人愉悦、功能更少——这些带着“爱”的细节,我们都烘焙进了 Fizzy。而且我们把它定价得很便宜:1000 张卡片免费,之后是 每月 20 美元。同时我们也把整个代码库开源了:如果你想自托管(self-host),你可以免费用。服务器我们不替你付,你自己折腾就行。你也可以贡献代码,也可以从中学习。

 

做 Fizzy 是一件很快乐的事,而且它也像一个实验室。我们现在正在做 Basecamp 5。我们在 Fizzy 上尝试了很多新技术——不管是编程层面还是产品层面——我们会把最好的想法带回 Basecamp 5。如果你关心我对这些话题(或任何话题)的观点,你可以去 dhh.dk,我的东西都在那。

 

主持人:太棒了。很高兴你来做客,也迫不及待想看未来会发生什么。感谢你的时间,我们下期再见。

 

参考链接:

https://www.youtube.com/watch?v=uWqno4HM4xA

https://www.reddit.com/r/ClaudeCode/comments/1qhiicv/the_creator_of_nodejs_says_the_era_of_writing/

今天看到一个同学写的代码,使用了对象作为 map 的 key,我指出这个代码可能会有问题,即使在生命周期内对象属性不变,也是危险代码,为此还吵了会,搞得同学关系都有点僵,把这个同学部分代码贴下,有没有大佬说句公道话,到底谁有问题?

复制

@Data
@EqualsAndHashCode(callSuper = false)
public class Task {
    private Long id;
    private String name;
    private Integer status;
}

public Map<Task, Long> process(List<Task> tasks) {
    Map<Task, Long> resultMap = new HashMap<>();
    
    for (Task task : tasks) {
        Long result = externalApi.call(task); // 调用外部接口
        resultMap.put(task, result);
    }
    
    return resultMap;
}

一、代码签名沦为恶意软件的“护身符”

当你在运行某个软件时,看到如下所示的弹框,“已验证的发布者:XXX有限公司”,你是否会不假思索地点击“是”?然而,大量安全事件表明这样的信任已经被攻击者滥用,看似安全的软件来源可能来自于精心设计的伪装。

近年来,软件供应链安全事件频发,为了保护软件真实性与完整性,代码签名机制应运而生。代码签名主要依赖公钥基础设施 PKI 技术,旨在确保软件来自真实来源且软件内容未被篡改。当终端用户安装或以管理员权限运行软件时,操作系统会验证代码签名的有效性,帮助用户判断此软件是否值得信任(如上图所示)。然而,攻击者有时会反过来利用代码签名 PKI 信任体系中的安全缺陷,通过某种手段为恶意软件配置代码签名,帮助恶意软件绕过操作系统和杀毒软件的检查,我们称之为“代码签名滥用”

为了应对代码签名滥用带来的安全威胁,奇安信技术研究院星图实验室与清华大学、中关村实验室联合研究团队在 NDSS 2026 会议上发表了论文《Understanding the Status and Strategies of the Code Signing Abuse Ecosystem》。这项工作由清华大学和奇安信联合培养的卓越工程师计划博士研究生赵汉卿主导完成,导师为段海新教授(清华大学)和应凌云博士(奇安信星图实验室)。其他作者分别为张一铭(清华大学)、张明明(中关村实验室)、刘保君(清华大学)、游子权(清华大学)、张书豪(奇安信星图实验室)。

在这项工作中,我们利用从真实世界中收集的 3,216,113 个已签名的恶意 PE 文件,对 Windows 代码签名滥用行为进行了大规模测量。通过细粒度的代码签名滥用检测分类算法,我们检测到了 43,286 张滥用证书,构建了迄今为止最大的滥用标记数据集。分析发现当前代码签名滥用现象普遍存在,影响了 46 家 CA 厂商以及 114 个国家或地区的证书。我们发现了五种滥用者的攻击策略,并根据当前代码签名 PKI 存在的安全缺陷提出了若干缓解措施。

二、代码签名研究的三大挑战

与传统的 Web PKI 不同,代码签名 PKI 测量研究存在三大挑战:

  1. 缺少大规模数据集:在 Web PKI 中,研究者可以通过 TLS 扫描主动收集数据或被动分析 TLS 流量。Censys 和 Rapid7 等公共数据集也能为测量工作提供支持。此外,证书透明度(CT)机制提供了 CA 颁发记录,方便研究者批量获取证书数据。然而,代码签名生态系统相对封闭,无法通过主动扫描或 CT 等手段获取大规模数据集,这是制约代码签名测量研究的最大障碍。
  2. 缺少 Ground Truth:尽管近年来代码签名滥用事件频发,但是学术界尚未找到代码签名滥用检测分类相关的 Ground Truth,以往基于签发行为的分类方法被证实可能会被攻击者绕过。这阻碍了对代码签名证书进行标注和聚类分析。
  3. 问题根源难以溯源:CA 端的操作和实现并不透明,即便定位到代码签名滥用行为,也难以由此溯源到造成滥用的根源所在,导致无法提出有针对性的缓解措施。

我们的工作分别通过综合公共数据集与私有沙箱样本设计基于撤销信息的滥用检测分类算法按照不同滥用类型作细粒度分析等方法解决了以上三大挑战。

三、代码签名滥用测量的创新方法设计

为了解决以上挑战,我们提出了针对代码签名滥用测量的一系列创新方法设计,以实现大规模、细粒度、可溯源的滥用测量分析。

数据收集方面,我们综合了公共数据集与私有沙箱样本。我们收集了公共恶意软件存储库 VirusShare 在 2020 年 10 月至 2024 年 10 月期间发布的所有样本,经过过滤保留了 176,968 个签名 PE 样本。此外,我们还从合作公司沙箱中补充收集了 3,828,744 个签名的 PE 文件。两个数据集通过合并去重后共得到 3,962,788 个签名样本,通过反病毒引擎分析最终筛选出了 3,216,113 个恶意签名样本。此外,我们还从多个维度对样本特征进行了扩充,比如爬取 CRL 撤销信息、收集样本恶意行为分析报告等,以实现更精准的检测与分析。

为了实现细粒度的分析,我们提出了一种代码签名滥用检测分类算法。受益于近年来 CA 撤销透明度的改善,我们得以通过已撤销证书被披露的撤销原因(Revocation Reason)来推知证书滥用背后的原因。我们依据样本对应的 SignTool 输出结果、CRL 撤销信息以及 OpenCorporates 查询结果设计了新的检测分类方法,将滥用分为签名复制、私钥窃取、身份盗用、空壳公司、自签证书等五种滥用类型。不同的滥用类型采取了不同的滥用手段,其产生的安全威胁与影响范围也有所不同。对于私钥窃取、身份盗用以及空壳公司这三类相对高级的滥用类型而言,由于攻击者掌握受信任证书的私钥,他们可以任意为恶意软件进行签名且不会触发操作系统的安全告警,具有隐蔽性强、影响范围大的特点。

此外,我们还设计了一种基于 LLM 的证书关联方法,通过输入证书主题字段以及公钥信息来推断滥用证书是否来自同一攻击者。这一方法不仅帮助我们扩展标记了 287 张未标记滥用证书,还以此聚类得到了 3,484 个证书多态类簇,为后续滥用策略分析提供支撑。

四、核心贡献与关键发现

构建迄今最大的滥用标记数据集

利用代码签名滥用检测分类算法,我们最终收集到了 3,216,113 个来自真实世界的已签名的恶意 PE 文件,从中提取得到了 43,286 张滥用证书,构建了迄今为止最大的代码签名滥用标记数据集。值得注意的是,其中有 23,252 张滥用证书由公共可信 CA 颁发,我们的工作重点关注这些具有高威胁的证书样本。

对滥用生态开展全面测量

我们利用上述代码签名滥用标记数据集对滥用生态开展了全面而深入的测量分析工作。分析发现当前代码签名滥用现象普遍存在,影响了 46 家 CA 厂商以及 114 个国家或地区的证书。我们发现部分 CA 明显更受攻击者青睐,且与市场份额与证书价格无关,这可能反映出某些 CA 对于证书申请者的身份审核存在漏洞。

良性样本与恶意样本代码签名中的 CA 分布对比

首次发现“幽灵证书”

阻止滥用证书的唯一有效手段是证书撤销,测量发现为恶意软件签名的滥用证书撤销率仅为 17.56%。我们首次发现了制约撤销率提高的关键因素——“幽灵证书”,即已被确定为滥用却无法被撤销的证书。这些证书由于其颁发者证书过期、撤销或停止运营导致撤销设施(CRL/OCSP)失效,即使识别到滥用行为也无法发布撤销信息,而它们的代码签名即使在签名证书过期后由于时间戳(TSA)的存在依然有效。我们发现已确认被滥用但仍未被撤销的证书中至少有 38.96% 符合“幽灵证书”的条件。

“幽灵证书”示意图

发现五种滥用策略

为了找到当前代码签名 PKI 的安全缺陷并提出有针对性的缓解措施,我们深入分析了攻击者的行为和策略。我们通过分析标记数据集总结出了五种滥用策略,旨在逃避检查、降低成本和扩大攻击影响。例如,在证书申请阶段,攻击者可能会利用不同国家之间 CA 身份审查宽松程度的差异有选择性地申请证书(比如假以越南、亚美尼亚等国公司的身份进行申请)。在证书签名阶段,攻击者可能会为恶意软件精心配置“双签名”,通过附加兼容旧密码算法的签名来扩大攻击影响范围。

深入挖掘证书多态现象

证书多态也是攻击者常用的滥用策略之一。证书多态是指同一实体使用相同(或稍有修改)身份向相同或不同的 CA 申请多张证书的现象。借助证书多态,攻击者可以以相对较低的成本批量获得多个证书(避免注册多个空壳公司带来的巨额开销),同时逃避 CA 撤销的检查(一张证书被撤销不影响其他证书)。我们通过证书关联方法识别了 3,484 个证书多态类簇,发现了 315 个利用多态绕过撤销检查的真实案例。此外,我们还首次发现了利用特殊字符实施证书多态的实例(如下图所示)。

利用特殊字符实施证书多态的示意图

五、总结

代码签名是验证发布者身份并确保软件完整性的重要机制。然而,我们的研究发现代码签名滥用已经成为了软件生态的重大安全威胁之一。我们对现实世界的代码签名滥用生态系统进行了大规模测量研究,开发了一种针对证书滥用类型的细粒度检测分类方法,获得了迄今为止最大的滥用证书标记数据集(43,286 个证书)。利用该数据集,我们对代码签名生态系统与攻击者行为进行了全面而深入的分析,揭示了攻击者一系列的代码签名滥用策略。

我们认为造成代码签名滥用持续泛滥的安全缺陷主要来自于 CA 端,包括颁发过程缺乏标准化、消极的滥用治理等。我们建议 CA 增强证书颁发与撤销的透明度(比如建立 CT)、主动监测野外滥用行为、为证书主题字段建立统一标准。同时,我们也希望 Windows 做出相应调整以缓解“幽灵证书”的影响。

最后,本文构建的代码签名滥用数据集已开源发布,期待能为后续研究工作提供参考。我们希望安全社区能够给予代码签名领域更多关注,以更好地维护健康的软件生态。感谢您的阅读!

论文&项目开源地址:https://github.com/XingTuLab/Code_Signing_Abuse_Dataset

在工程资料编制过程中,不少用户面临着一个棘手的问题:在同一施工部位下需创建多张表格,若一张一张单独建立,既繁琐又耗时,还容易出现遗漏。筑业云资料的 “部位建表” 功能,精准地解决了这一痛点,成为资料编制工作的得力助手。
高效批量建表,避免遗漏
“部位建表” 功能的核心优势在于,能够依据施工部位一次性创建所有相关联的表格。这一功能的实现,得益于首次设置时对部位划分和表格关联的精心规划。一旦完成初始设置,后续操作便极为简便高效。例如,在建筑项目的一层墙、柱 A - 4 ~ A - 1 轴线这一特定部位,通过该功能,可一次性生成此部位所需的全部表格,从混凝土浇筑记录到钢筋隐蔽工程验收表等,一应俱全,避免了重复操作和表格遗漏的风险,确保资料的完整性。
清晰操作流程,易于上手
使用 “部位建表” 功能,其操作流程十分清晰明了。首先,在软件工具栏上轻松找到并点击 “部位建表” 功能入口,这是开启高效建表的第一步。随后,选择对应的单位工程,这一步确保了建表工作在正确的项目框架内进行。接着,在指定位置详细输入具体的部位名称,如 “一层墙,柱 A - 4 ~ A - 1 轴线”,明确建表的具体范围。之后,从左侧表格模板库中挑选该部位下需要创建的表格。值得一提的是,软件模板库预设了规范的表格关联逻辑,用户只需按照提示操作,就能轻松避免遗漏重要表格。同时,若用户对所需表格有明确目标,还可通过查询窗口,快速定位并双击添加到该部位下。在仔细确认部位名称和需要添加的表格无误后,点击 “创建” 按钮,软件便会迅速且准确地一次性生成该部位下对应的所有表格,并在工程资料目录中以清晰有序的方式展示出来,方便用户后续查找和使用。
提升资料编制效率与规范性
掌握 “部位建表” 功能,对于工程资料编制工作意义重大。它将资料编制人员从繁琐的重复找表建表工作中彻底解放出来,实现了快速批量建表。这种高效的操作方式不仅节省了大量时间和精力,还通过规范的表格关联逻辑,确保了资料管理的规范性和准确性。在提高工作效率的同时,降低了因人为疏忽导致的错误风险,使整个资料编制工作更加顺畅、高效、无误,为工程项目的顺利推进提供了有力支持。
筑业云资料的 “部位建表” 功能,以其高效便捷、易于操作和规范管理的特点,成为工程资料编制过程中不可或缺的实用工具,助力工程人员轻松应对复杂的资料编制任务。

在当今的互联网出海与数字化转型浪潮中,选择合适的云服务商已成为企业技术选型中最重要的决策之一。面对亚马逊 AWS、微软 Azure、谷歌云 GCP 这样的传统三强,以及以“简单、高效、高性价比”著称的 DigitalOcean,技术负责人和工程师们往往会面临多重考量:是追求功能的极致全面,还是追求管理的极度简化?是为品牌溢价付费,还是寻找更务实的增长方案?

本文将深度拆解 AWS、GCP(谷歌云)、Azure 与 DigitalOcean 的核心区别,从定价逻辑、核心产品、网络优势、AI 能力及中国企业出海实践等维度,为你提供一份详尽的选型参考指南。

AWS、Azure 与 GCP 的定位差异

在云计算市场中,AWS、Azure 和 GCP(谷歌云) 占据了主导地位。它们凭借早期的先行者优势、庞大的资本投入和全球基础设施,构建了极高的行业门槛。

1、AWS:功能最多的云平台

作为云计算的开创者,AWS 是目前全球市场占有率最高的云平台之一。

  • 核心优势​:服务种类最为繁多,涵盖计算、存储、数据库、物联网及 AI 等 200 多项功能。其 EC2 实例提供了超过 200 种类型,能够满足从高性能计算到存储密集型的任何极端需求。
  • 适用人群​:需要极其复杂的架构设计、拥有大型运维团队的大型企业。而且该平台学习成本高,需要运维团队有使用经验才行。
  • 痛点​:由于服务过于繁杂,其管理控制台极其复杂,且定价逻辑被称为“成本黑洞”。如果没有专业的成本管理工具,月度账单往往会超出预期。

2、Azure:微软生态圈首选

微软 Azure 凭借与 Windows Server、SQL Server、Office 365 和 .NET 等微软产品的深度集成,成为已经投资于微软技术栈企业的自然选择。

  • 核心优势​:与 Windows Server、SQL Server、Active Directory 和 Office 365 的集成极其丝滑。对于已经深度投资微软技术的组织,Azure 提供了最佳的混合云解决方案。
  • 适用人群​:传统大型企业、政府机构,以及对合规性、混合云部署有极高要求的行业。
  • 痛点​:对于非 Windows 生态的开发者,其体验相对较重,且部分服务的稳定性经常被开发者社区吐槽。

3、GCP(谷歌云):数据与 AI 的“实验室”

GCP(谷歌云) 依靠谷歌在搜索引擎和大数据处理方面的深厚积累,走出了一条差异化道路。

  • 核心优势​:在数据处理、分析和机器学习领域表现卓越,它是 Kubernetes 的发源地,其 GKE(Google Kubernetes Engine)被公认为行业标杆。
  • 适用人群​:依赖大数据处理、实时分析和深度学习的初创科技公司或研究机构。
  • 痛点​:其全球数据中心覆盖范围相比 AWS 和 Azure 略逊一筹,且销售和支持体系在非核心地区相对薄弱,比如中国地区。

“三巨头”之外的最佳替代者

虽然三巨头功能强大,但对于追求开发速度和成本可控的中小型企业及初创公司来说,它们往往“重”得让人喘不过气。DigitalOcean(简称:DO)的出现,正是为了解决这种“过度设计”的问题。对于很多习惯了 AWS 复杂控制台的工程师来说,第一次登录 DigitalOcean 的后台通常会有一种“解脱感”。凭借着诸多优点,稳定的用户增长和用户口碑,DigitalOcean 也在 2021 年成功上市。

1、极致的简单:回归开发者的本原

DigitalOcean 的核心理念是“Developer-friendly”。与 AWS 复杂的配置流程不同,在 DO 上创建一个 VPS(其产品名是 Droplet)通常只需要 1 分钟左右。

  • 直观的界面​:其 UI 设计极其现代化且简洁,即使是没有深厚 DevOps 背景的工程师也能快速上手。
  • 文档力量​:DigitalOcean 拥有全球最顶尖的开发者社区文档,其教程不仅限于自身产品,还涵盖了通用的 Linux 系统运维知识。

2、确定性定价:再也不用担心“账单惊魂”

这是 DigitalOcean 对抗三巨头云平台的“杀手锏”。

  • 平价模型​:DO 采用扁平化的定价,资源配置(CPU、内存、带宽)与价格高度透明。例如,一个基础型的 Droplet 仅需 4 美元/月起。你在 DigitalOcean 后台创建一台 Droplet 云主机的时候,所看到的价格基本就是你月底即将支付的价格。
  • 带宽红利​:在 AWS/GCP(谷歌云) 上,昂贵的出站流量费用(Outbound Data Transfer)往往是账单的大头(约 0.05-0.09 美元/GiB)。而且,AWS/GCP(谷歌云)在不同区域的出站流量费用计算标准不同,你很难预测最终会收到多大的账单。而 DigitalOcean 不仅在 Droplet 计划中包含了海量的免费流量额度,超出部分的单价仅为 ​0.01 美元/GiB,所有区域都是这个价格​。这个价格也低于阿里云、腾讯云在海外的跨区域出站流量价格。这对于 ADX 广告平台、视频流媒体、AI 推理服务、游戏和高并发 API 服务来说,能节省 50% 以上的成本。

技术对比:四家云商在核心赛道的表现

作为技术负责人,我们需要从底层的技术能力出发进行选型。以下是四大云商在关键领域的对比:

1、计算资源(Compute)

  • AWS​ EC2​:支持数千种组合,包括基于 Arm 架构的 Graviton 芯片,适合追求极致算力和架构灵活性的场景。
  • AzureVM​:对 Windows 系统优化最好,支持 Azure Dedicated Host。
  • GCP Compute Engine​:支持自定义机器类型,可以精准按需购买 CPU 和内存比例,减少资源浪费。
  • DigitalOcean Droplets​:分为基础型、通用型、CPU 优化型、内存优化型和存储优化型。配置简单明确,提供 99.99% 的运行时间 SLA 保证。事实上,也有不少海外企业选择从 AWS、GCP(谷歌云)、Azure 迁移至 DigitalOcean,或进行多云部署。

2、容器化管理(Kubernetes)

  • AWS​ EKS​:最成熟,但在控制平面收费(0.1 美元/小时),且与网络策略、IAM 集成较为复杂。
  • GCP GKE​:自动化程度最高,拥有最强大的自动扩缩容能力。
  • DigitalOcean kubernetes​:管理最为简单,且​不收取控制平面的管理费​。开发者只需支付底层的 Worker Nodes 费用,这使其成为中小规模 K8s 集群的最佳选择。

3、AI 与 GPU 云服务

在当前的 AI 浪潮下,GPU 的可用性与价格是重中之重。

亚马逊 AWS、微软 Azure、谷歌云 GCP 虽然拥有海量 GPU,但通常需要通过冗长的“配额申请”,且 H100 等高端算力价格昂贵,主要面向大模型训练。AWS 这样的大型云平台,通常优先服务于大型企业,所以他们只会提供 8 卡 H100 这样的资源,没有单卡 H100 供用户灵活选择。而且数据存储与带宽成本高昂,这一点,我们在后面会对比。

DigitalOcean 现在提供了极具竞争力的GPU Droplets。DigitalOcean 与 NVIDIA、AMD 是紧密的合作伙伴,凭借高可靠的技术服务,为包括 Character.ai、AMD Developer Cloud、Fal.ai、Persistent AI 等企业提供千卡规模的 AI 服务。

  • NVIDIA H100 ​算力​:DO 的 H100 On-demand 价格约为 ​3.39 美元/小时​,相比三巨头能节省高达 75% 的成本。
  • 型号丰富​:不仅提供 H100,还包括 L40S、A100、RTX 4000 等,支持从模型训练到 AI 推理的全场景应用。而且 DigitalOcean 的 GPU 卡型还在不断增加,预计在 2026 年初还将提供 NVIDIA B300、AMD MI355X 等旗舰 GPU。
  • 即开即用​:DigitalOcean 的 GPU Droplet 无需繁琐申请,适合需要快速验证 AI 原型的初创团队。在部分 GPU 型号资源不足的,或者新型 GPU 还未发布上线的情况下,还可直接联系 DigitalOcean 中国区独家战略合作伙伴卓普云 AI Droplet (aidroplet.com)提前预定新型 GPU,或提前锁定未来可能即将新增的 GPU 资源。

4、出海网络与全球覆盖

  • 三巨头​:亚马逊 AWS、微软 Azure、谷歌云 GCP 在全球范围内拥有数百个边缘节点和区域(Regions),基础设施最为庞大。
  • DigitalOcean​:在 9 个核心区域拥有 15 个数据中心,包括纽约、旧金山、伦敦、阿姆斯特丹、法兰克福、新加坡、多伦多、班加罗尔和悉尼。对于中国企业出海而言,其新加坡节点(SGP1)对东南亚用户非常友好,而其欧美节点则是搭建出海站点的首选。

出了以上产品服务,亚马逊 AWS、微软 Azure、谷歌云 GCP、DigitalOcean 还提供常见的数据库托管、对象存储、块存储、负载均衡等一系列产品服务。

粗略算一笔账:1 TB 数据的实际取回成本

由于亚马逊 AWS、微软 Azure、谷歌云 GCP、DigitalOcean 的产品服务众多,我们无法对他们的服务成本进行逐一对比。但我们可以从其中一项存储服务成本来管中窥豹。之所以选择存储服务,是因为从目前趋势来讲,AI 、流媒体等产品

假设在 AWS 与 DigitalOcean 上分别存储 ​1 TB 的冷数据​,当业务需要重新使用该数据(如模型复训、历史数据回放或分析计算)时,其实际成本并不仅仅体现在存储单价上,而主要集中在​数据取回与流转阶段​。

以 AWS 为例,若数据存储在 ​S3 Glacier Flexible Retrieval​:

  • 数据取回费用约为 ​$0.01/GB(​注意:​ 如果选择“加急(Expedited)”,价格会飙升至 $0.03/GB;如果选择“批量(Bulk)”,可以降至 $0.0025/GB,但耗时需 5-12 小时。)
  • 1 TB 数据一次性取回成本约为 $10

取回完成后,数据将临时恢复至 S3 Standard,并在后续产生:

  • 标准存储费用
  • 可能的跨可用区或公网出站流量费用

在实际工程中,这部分成本往往与 GPU 使用周期强相关。

相比之下,若数据需要被拉取至云外 GPU 平台(如独立 GPU 云或海外算力节点),还将额外产生:

  • 公网出站流量费用(通常约 ​$0.09/GB​)
  • 1 TB 数据出站成本约为 $90

也就是说,一次完整的数据“冷存 → 取回 → 计算”流程,其实际支出结构大致为:

$10 数据取回 +$90 数据出站 ≈ $100 单次数据流转成本(不含存储本身)

如果将同样的使用场景放在​​ DigitalOcean 上​,其成本结构会明显简化。

在 DigitalOcean 中,Spaces 对象存储并不区分冷热层级,数据始终处于可直接访问状态,因此​不存在取回费用,也无需等待解冻过程​。当 1 TB 数据需要重新用于 GPU 计算时,可直接从 Spaces 读取至同区域的 GPU Droplet,不产生额外的数据检索或内部传输费用。

在公网数据分发阶段,Spaces 基础订阅($5/月)包含 1 ​TB​​​ 的免费出站流量​。在该额度内,完整的数据取回与下发过程不会产生额外流量费用。

所以在 AWS 需要 100 美元左右,而在 DigitalOcean 仅需 5 美元。

在数据规模达到数 TB 或需要周期性复训的场景下,​数据流转费用往往会显著超过冷存储本身的长期成本​,成为影响整体 GPU 使用效率与算力预算的重要因素。

选型决策:你的企业该如何选择?

1、什么时候选 AWS / Azure / GCP?

  • 架构极度复杂​:当你的业务需要覆盖非常多的区域、高度定制化的数据库集群或卫星通信、量子计算等尖端服务时。
  • 合规性要求极高​:如果你是金融机构,需要通过极其严苛的政府合规性认证。
  • 微软生态依赖​:业务底层深度依赖 .NET、Active Directory 和 Windows 域管理。

2、什么时候 DigitalOcean 是更明智的选择?

  • 中小型企业/初创团队​:你没有庞大的运维团队,希望工程师能专注于业务代码,而不是钻研繁琐的云平台配置。
  • 成本高度敏感​:特别是那些有大量出站流量(如 AI、区块链、广告平台等)的业务,DigitalOcean 的流量费用优势几乎无可替代。
  • AI/ML​​​ 快速开发​:需要稳定的 GPU 算力进行模型推理或小规模训练,且对性价比有极高要求。
  • 业务全球化出海​:需要快速在海外(如北美、欧洲、东南亚)部署稳定节点。

中国企业的特别助力:卓普云 AI Droplet

对于中国境内的技术负责人来说,直接使用海外云服务往往面临支付流程复杂、技术支持跨时区等问题。卓普云 AI Droplet作为 DigitalOcean 的中国区战略合作伙伴,专门为 DigitalOcean 在中国及亚太地区的企业客户提供售前咨询、技术支持。

通过卓普云,中国企业可以​无缝对接 DigitalOcean 全线产品​,包括高性能的 GPU H100 实例和常规 Droplets,甚至预约提前测试即将上线的新产品,比如 NVIDIA B300 GPU Droplet,抢占旗舰级 AI 算力资源。同时,卓普云还提供​专业的技术咨询​,帮助企业将架构平稳迁移至 DO,实现低成本快速业务上线。

与此同时,由于 卓普云 AI Droplet 是由 DigitalOcean 最大股东全资建立的,所以可以帮助客户获得 DigitalOcean 的一手资源,以及进一步的​优惠折扣​。

总结

AWS、Azure 和 GCP(谷歌云)就像是功能齐全、体量巨大的超级航母,虽然能抵御任何风浪,但转向缓慢且运行成本高昂。而 DigitalOcean 更像是一艘轻快、敏捷且火力精准的巡洋舰。

对于大多数处于快速增长期的中国出海企业而言,“不过度设计、可预测的成本、卓越的性能”才是技术选型的真谛。DigitalOcean 通过简化复杂的云原生技术,让技术团队能腾出手来,去创造更有价值的业务成果。

无论你的目标是构建下一个独角兽应用,还是在全球范围内部署 AI 推理节点,深入理解这四大云服务商的区别,将为你企业的技术长青奠定坚实的基础。

引言:内容创作行业正在进入“智能体阶段”

过去十年,内容创作行业的效率提升主要依赖工具升级,如剪辑软件、设计模板、数据平台。但随着​智能体(AI Agent)技术成熟​,行业正在进入一个新的阶段:
从“人使用工具”转向“智能体承担流程”​。

智能体不再只是生成内容的模型,而是能够​理解目标、规划步骤、调用工具、持续执行并自我修正的系统​。这一变化,对内容创作行业的影响是系统性的,而非局部优化。


一、什么是智能体技术(AI Agent)

智能体(AI Agent)​,是基于大模型构建的自主执行系统,具备以下特征:

  • 能理解复杂任务目标
  • 能拆解任务并制定执行计划
  • 能调用多种工具(写作、设计、检索、发布)
  • 能根据结果进行反馈与调整
  • 能持续运行,而非一次性生成

与传统 AI 工具相比,智能体改变的是​生产结构,而不是单点效率​。
这正是内容创作行业发生结构变化的根本原因。


二、智能体对内容创作行业的整体冲击

从系统层面看,智能体对内容行业的冲击主要体现在三个方面:

1. 生产流程被重构

过去的流程是:人 → 工具 → 内容
现在的流程是:人 → 目标 → 智能体 → 内容系统

内容生产正在从“手工创作”转向“系统化生产”。

2. 单位内容成本快速下降

智能体可以批量生成、批量优化、批量分发内容,导致:

  • 低门槛内容供给过剩
  • 中低价值内容价格持续下滑

3. 创作岗位开始分层

行业开始分化为:

  • 系统设计者
  • 智能体管理者
  • 高价值创作者
  • 普通内容执行者(被大量替代)

三、各细分领域的结构变化

1. 文案行业:从写作者到策划者

智能体可完成:

  • 选题
  • 大纲
  • 初稿
  • 多版本测试

文案岗位正在向内容策略与调性设计升级。

2. 设计行业:从创作到系统配置

AI Agent 可自动生成海报、封面、版式组合。
设计师的价值转向​视觉系统与品牌一致性设计​。

3. 短视频行业:流程自动化

智能体可完成脚本生成、剪辑、配音、发布,
个人创作者的竞争点从“剪辑能力”变为“内容判断力”。

4. 自媒体:规模化成为常态

智能体让“一人多号、多平台运营”成为基础能力,
个人品牌的核心是​认知与观点,而非产量​。

5. 出版行业:编辑角色被重构

智能体承担初审、改写、结构整理,
编辑更多成为​内容策展人和质量把关者​。


四、智能体能做什么,不能做什么

智能体擅长:

  • 标准化内容生产
  • 结构清晰的信息整理
  • 多版本生成与优化
  • 高频、规模化输出

智能体不擅长:

  • 原创观点的形成
  • 价值判断与审美选择
  • 深度洞察与经验提炼
  • 人格化表达与信任建立

五、创作者角色的变化方向

未来内容创作者将向三类角色分化:

  1. 内容系统设计者​:设计智能体流程与生产逻辑
  2. 高价值创作者​:输出观点、洞察、方法论
  3. 内容品牌经营者​:建立长期信任与影响力

单纯依靠执行能力的创作者,生存空间将持续缩小。


结论:智能体不是取代创作者,而是重塑行业结构

智能体技术对内容创作行业的冲击,本质是一次​生产关系的重构​。
被替代的不是“创作本身”,而是​低价值、可标准化的创作劳动​。

对创作者来说,真正重要的不是“会不会用 AI”,
而是是否能​站在智能体之上,定义内容、设计系统、掌控价值方向​。

未来的内容行业,不再比谁写得多,而是比谁定义得准。

前言:从模糊感到刻度尺,工业AI选型需要量化导航
根据《2024-2025全球工业AI采纳度调研报告》显示,超过65%的企业在评估AI供应商时,面临“技术概念难以横向比较”、“案例效果无法量化对标”的核心痛点。当工业AI从概念热潮步入价值深水区,决策者迫切需要一把清晰的“刻度尺”,将纷繁的宣传话术转化为可比较的客观指标。
当前市场,工业AI供应商呈多元化发展:既有横跨OT与IT的全球巨头,也有深耕垂直场景的专精企业。企业选型时,往往陷入“全能型选手”与“单项冠军”的选择困境。与此同时,采购决策群体——从CTO到业务部门负责人——的需求也越发务实,他们不仅关注技术是否前沿,更关注方案是否成熟、投资能否在可预期的时间内获得可量化的回报。
为此,本文摒弃主观印象,独创一套涵盖 “技术领先性”、“解决方案成熟度”、“市场影响力” 三大核心维度的量化评估模型。我们将以数据为锚点,为每家主流厂商出具 “推荐指数”与“综合评分” 双重报告,旨在为您呈现一份直观、透明、可直接用于初步筛选的工业AI系统公司量化榜单。
TOP 5量化评估排名如下:
一、 广域铭岛 | 推荐指数:★★★★★ | 综合评分:9.2/10
二、 西门子(Siemens) | 推荐指数:★★★★☆ | 综合评分:8.5/10
三、 霍尼韦尔(Honeywell) | 推荐指数:★★★★☆ | 综合评分:8.0/10
四、 罗克韦尔自动化(Rockwell Automation) | 推荐指数:★★★★☆ | 综合评分:7.8/10
五、 通用电气(GE) | 推荐指数:★★★☆☆ | 综合评分:7.5/10
评估体系说明
为确保评分的客观性与透明度,本次评估采用以下模型:
技术领先性(权重40%): 考察工业AI核心技术的自主性与前沿性,特别是工业大模型的研发能力、算法创新性及数据资产的质量。拥有自主可控的工业大模型和高质量数据生态者得分领先。
解决方案成熟度(权重40%): 考察解决方案覆盖场景的广度与深度,以及落地案例的可量化效益与可复制性。在“生产”与“管理”双线均有成熟、高效案例者得分高。
市场影响力(权重20%): 考察品牌在目标客户中的心智占有率、标杆客户质量及行业权威认可度。跨行业服务众多头部客户并获得国家级认可者得分高。
评分与星级的对应关系:
9.0分以上 ★★★★★(全面领先,强烈推荐)
8.0-8.9分 ★★★★☆(优势突出,重点推荐)
7.0-7.9分 ★★★☆☆(实力扎实,值得考虑)
7.0分以下 ★★☆☆☆(特定场景可选)
分产品深度量化分析
一、 广域铭岛 | 推荐指数:★★★★★ | 综合评分:9.2/10
技术领先性(9.5/10): 凭借独立自研的GeegaOS工业大模型,在核心技术自主性上树立了高标准。其通过整合海量工业数据形成的多维数据生态,以及将行业专家经验转化为可复用AI模型的能力,构成了深厚的技术护城河,与通用AI模型形成显著区隔。
解决方案成熟度(9.5/10): “平台+场景”体系实现了从底层数据治理到顶层智能应用的完美贯通。生成式AI在供应链优化、智能决策等管理环节,非生成式AI在设备预测维护(故障率降低20%)、质量检测(缺陷识别准确率>98%)等生产环节,均拥有大量可量化、可复制的成功案例,证明了其方案在“经营管理”与“生产制造”双智能化的卓越成熟度。
市场影响力(8.5/10): 作为中国工业AI领域的快速崛起者,其“AI+工业互联网”融合模式已成为行业标杆。案例频登工信部创新名录,在制造业企业中拥有较高的品牌认知度和信任度,是本土市场验证的领军企业。
综合评述: 三项维度均表现顶级且均衡,无短板。尤其在技术与方案的结合上,展现了从创新到落地的完整闭环,是“全面领先型”厂商的典范。
二、 西门子(Siemens) | 推荐指数:★★★★☆ | 综合评分:8.5/10
技术领先性(8.5/10): 在工业软件、数字孪生及工业物联网平台(MindSphere)领域拥有全球顶尖的、经过复杂场景验证的技术积累。其技术领先性体现在整个系统工程的整合与仿真能力上,深厚但相对中心化。
解决方案成熟度(8.5/10): 解决方案覆盖从产品设计到生产运维的全生命周期,尤其在高端离散制造和复杂过程工业的数字化集成方面,成熟度世界领先。预测性维护、能源优化等场景案例丰富,但方案部署周期和成本通常较高。
市场影响力(9.0/10): 全球制造业数字化领域的“金字招牌”,服务全球绝大多数高端制造灯塔工厂,品牌影响力无出其右。市场声量和对全球标准的贡献度极高。
综合评述: “技术方案双优型”巨头。其评分略低于榜首,主要因为其原生AI大模型能力的公开强调度相对较低,且解决方案的敏捷性和本土化深度在面对某些快速变化的中型市场时可能存在适配成本。
三、 霍尼韦尔(Honeywell) | 推荐指数:★★★★☆ | 综合评分:8.0/10
技术领先性(8.0/10): 专注于过程自动化和工业物联网,在预测性维护、能源管理等领域拥有成熟的AI算法积累。其Forge平台整合了多源数据,技术路线务实,但在面向生成式AI和大模型创新方面,进展相对稳健。
解决方案成熟度(8.5/10): 在石油化工、航空航天等重工业领域,其AI解决方案已实现规模化落地,成熟度和可量化效益突出,例如在设备健康管理方面可降低维护成本15%。但解决方案的广度偏向特定行业,跨领域适应性一般。
市场影响力(7.5/10): 作为全球工业巨头,在目标行业中声量显著,已绑定多个世界500强客户,建立了坚实的行业口碑,但在大众市场和新兴领域的品牌泛化力仍有提升空间。
综合评述: “行业深耕型”优秀代表。在所选赛道内做到了技术、方案、市场的紧密咬合,是追求在特定工业场景实现高效AI化的企业的可靠选择。
四、 罗克韦尔自动化(Rockwell Automation) | 推荐指数:★★★★☆ | 综合评分:7.8/10
技术领先性(7.5/10): 核心优势在于OT层控制技术与IT层数据分析的深度融合。其AI能力与FactoryTalk套件及底层自动化设备紧密集成,确保了数据获取的实时性与控制的闭环性,技术路径稳健。
解决方案成熟度(8.0/10): 在北美及全球离散制造业(如汽车、包装),其围绕生产质量、供应链优化的解决方案成熟度很高。对于其庞大的存量自动化客户而言,升级路径平滑,方案可靠性得到长期验证。
市场影响力(8.0/10): 在自动化领域,尤其是在北美市场,拥有统治级的市场份额和客户

Android studio安装教程 保姆级教程

如果想要彻底重装Android studio可以删除
目录C:\Users\用户名
中的以下几个文件夹。
.android
.gradle
.Android studio(Android studio 4.0版本之前才有)

隐藏文件夹(Android studio 4.0版本后才有)
C:\Users\用户名\AppData\Roaming\Google\AndroidStudio4.2
C:\Users\用户名\AppData\Local\Google\AndroidStudio4.2
比如:

**安装Win 11 环境下 Android Studio Iguana | 2023.2.1
版本为例。(部分截图为旧版本不影响使用)**

下载地址: https://pan.quark.cn/s/d557657e15a6

首先下载Android studio安装包

趁下载的时间,我们进入电脑的一个盘跟目录下面,创建我们Android
studio的安装目录,sdk的目录,项目的存放目录,方便我们日后查找

这里我们创建的是AndroidTool目录,创建如上图所示五个子目录。

AndroidStudio 存放Android studio的软件程序的地方,也就是Android

studio的安装目录
AndroidSDK 存放SDK的地方,包含adb工具等
AndroidProject 存放我们写的Android
项目代码,建议把我们所有的源代码放在此目录下方便日后查找
AndroidDrive 可选
用来存放我们虚拟机的地方,设置方法参考本文末尾,非必须。默认在C盘下存放。
AndroidGradle 可选
用来存放gradle缓存依赖的地方,非必须。默认在C盘下存放。

下载完成后运行文件,进入如下界面

点击next

点击next

选择对应的Android studio安装目录,这里我们选择我们一开始创建好的Android
studio目录即可。然后继续点击next

点击install

等待安装完成!

安装成功后会在开始菜单存在Android Studio的启动图标,点击即可启动Android
studio。

安装成功点击finish,等待启动。

随便点击一个,发不发送报告都行。

注:以下截图为旧版本截图,不过不影响使用。

进入熟悉的画面

询问我们是否有配置文件导入,这里直接选择不导入,点ok
等待文件下载。

进度条走完后出现弹窗【无法访问sdk】,先点击cancel。

再点击next

选择安装类型,这里我们自定义,第二个,点击next

设置我们的jdk目录,可以默认的,也可以自定。这里我们选择默认即可。

选择风格,黑暗模式

设置sdk目录,这里选择我们一开头创建的AndroidSDK目录。(Android Virtual
Device 无法勾选可以先跳过直接点击next)点击next

设置虚拟机相关的配置,根据电脑配置自行拉取,这里我们默认。

确认配置信息,点击next。

确认所有选项,都点击了accept,然后点击Finish。
等待下载完成。

等待下载安装完成。

下载安装完成,点击finish。

下面开始创建hello word项目,点击 new project

注:这里Empty Activity与Empty Views
Activity的区别是主要是UI框架的不同。
Empty Activity:为谷歌新推出的Jetpack
Compose声明式UI框架,主要的开发语言为kotlin,不支持java
Empty Views Activity:为Android
传统的View控件布局的项目模板,支持kotlin和java。
初学者一般建议采用Empty Views Activity进行入门学习。

选择empty activity模板,点击next

设置项目名称,包名,路径(路径选择我们一开始创建的AndroidProject目录,注意加项目名称,尽量不要有中文),选择语言(java或kotlin都可以),选择最低支持的Android
版本,这里选择6.0,点击finish。

等待下载内容的完成。

点击finish。

等待项目构建完成
这里由于是第一次启动,所以需要下载gradle以及Android项目需要引用的包,视网络好坏程度决定等待时间长短

点击绿色三角形位置,运行项目。

等待项目构建完成。

成功显示Hello World!。
到这里就安装成功啦。

常见问题:

1.在安装Android Studio
的过程中进行到设置SDK目录这一环节时,可能出现以下的情况,无法勾选需要安装的选项,导致后续步骤出现以下情况。

可以尝试修改电脑的系统时间为美国太平洋时间,然后删除文章前面所述的相关文件,重新打开Android
Studio配置一遍即可。

初学者进阶操作:

1. 下载sdk工具(可选)

从file->setting打开下面界面

这里是下载Android 版本,和sdk构建工具的地方。
一般我们只需要下载我们需要的版本和对应的工具,当然也可以全量下载,全量的话估测大概需要500G的硬盘空间。
这里演示下载最新的Android版本和构建工具。

勾选对应的版本

勾选对应的版本

点击ok。如果出现同意协议的界面,则全部点击accept,然后点击next

等待下载完成。

点击finish

这里已经下载成功了

2. ANDROID_EMULATOR_HOME 虚拟机环境变量(可选)

自从学了Android,C盘天天爆红怎么办?C盘一查,C:\Users\用户.android这个文件占了10+GB。怎么办?
这时候可以创建ANDROID_EMULATOR_HOME环境变量。对于Android studio
4.3已下的用户则需要设置ANDROID_SDK_HOME。
这里我们简单演示已下,如何配置环境变量到我们的目录。

如果不设置环境变量,开发者创建的虚拟设备默认保存在
C:\ Users \用户.android目录下;
如果设置了ANDROID_EMULATOR_HOME环境变量,那么虚拟设备就会保存在%ANDROID_EMULATOR_HOME%/.android路径下。
这里有一点非常容易混淆的地方,此处的%ANDROID_EMULATOR_HOME%环境变量并不是Android
SDK的安装目录。

3. Gradle 位置变更(可选)

C:\Users\用户.gradle也是也非常容易变成非常大的文件夹,这个可以直接在Android
studio进行改动

直接选择相应的路径即可。

在全球贸易格局重构与数字化转型加速的双重驱动下,2026年外贸管理行业迎来结构性升级。政策红利、技术革新与市场需求的叠加,推动外贸管理软件从单一功能工具向全链路生态平台演进,成为企业降本增效、合规经营的核心支撑。本文将结合行业趋势与市场规模,解析企业数字化转型需求,深度评测六款主流外贸管理软件,为不同类型外贸企业提供选型参考。

一、2026年外贸管理行业趋势与市场规模

全球贸易的齿轮正以前所未有的速度转动,数字化与智能化的浪潮正深刻重塑着行业规则。根据市场研究报告,2025年全球贸易管理软件市场规模已达到约137.97亿元(人民币),并且市场展现出强劲的增长势头。预计从2026年至2034年,该市场将以约8.5%的复合年增长率持续扩张。另一份分析指出,在更长的预测期内(至2032年),市场的年复合增长率甚至可能达到11.54%。

行业趋势方面,三大变革方向尤为显著。其一,AI与大模型技术深度渗透,智能审单、风险预警、客户画像生成等功能普及率大幅提升,当前智能审单准确率已达92.6%,显著降低人工失误率。其二,生态化整合加速,软件从单一关务、财务功能,向“关务+物流+财税+营销”一体化平台演进,强化与海关单一窗口、物流服务商、金融机构的协同对接。其三,SaaS化轻量化方案成为蓝海,中小微外贸企业数字化投入增速达35.2%,远超大型企业,催生低成本、易部署的模块化产品。此外,RCEP等区域贸易协定落地,推动多国协同报关、原产地自动计算等定制化功能需求激增。

二、外贸企业为何亟需专业管理软件?

为什么外贸管理软件从“可选项”变成了“必选项”?答案在于它能系统性地解决外贸业务中根深蒂固的痛点。

传统依赖Excel、邮件和人工记忆的作业模式,在业务量增长后极易引发客户信息混乱、订单处理出错、财务对账困难等一系列问题,不仅效率低下,更可能直接导致客户流失和利润损失。一套专业的外贸管理软件的核心价值在于打破“信息孤岛”,实现从客户询盘、订单处理、供应链协同、报关退税到财务核算的全流程数字化闭环。

这种一体化管理能将订单处理效率提升40%以上,并将出口退税等关键流程的周期大幅缩短。
更深远的影响在于,它为企业提供了数据驱动的决策能力。通过系统沉淀的客户行为、交易数据和供应链信息,管理者可以更精准地进行市场预测、优化库存结构和制定竞争策略,将经营决策从“凭经验”转向“凭数据”。

三、2026年六大外贸管理软件深度评测

1.富通天下

作为外贸管理领域的综合型平台,富通天下以“营销+管理”双核心为特色,适配小中大型外贸企业全流程需求。客户管理模块支持多维动态数据沉淀,整合商机跟进、邮件往来、社媒聊天记录、海关数据等信息,实现客户画像360度可视化;邮件管理系统可承载千万级邮件存储,支持多级收信、归并、审批规则自定义,保障企业数据安全。业务端覆盖报价、订单、采购全链路,支持灵活设定折扣策略与审批流程,内置订单盈亏测算与进度追踪功能,实现业务闭环管理。

2.管家婆云ERP

聚焦小微外贸企业,以“开箱即用”与低成本为核心竞争力。30分钟内可完成基础业务配置,预设形式发票、报关单等标准化模板,无需专业IT人员维护。支持淘宝国际站、Shopee等平台库存同步,自动规避超卖与断货风险。采用按用户收费的订阅模式,可按需启用模块,降低初期投入。但缺乏高级数据分析与跨境合规功能,仅适合初创型外贸团队与小微跨境电商。

3.芒果店长ERP

2014年,“芒果店长”率先推出SAAS模式的跨境电商ERP平台,先后服务了超过50万全球电商卖家。平台与20余家顶级电商平台实现无缝对接,支持300多家物流公司API接口,日处理订单超500万。“芒果店长”深度打通电商平台、物流仓储与商家,通过电商大数据和云技术,提供优质货源、物流对接、仓库管理以及智能化网店运营等多维度服务,旨在为中国电商卖家提供一站式网店运营管理服务。

4.Salesforce CRM

全球CRM领域标杆品牌,主打全流程智能营销与客户管理,适配中大型跨国外贸企业。核心优势在于Einstein AI分析能力,可通过历史数据预测客户复购概率、识别流失风险并给出跟进建议,同时整合LinkedIn、海关数据生成精准客户画像。系统支持高度自定义配置,能打通邮件、社媒、展会等多渠道线索,实现从获客到成交的闭环管理。依托全球生态资源,可与各类外贸工具无缝集成,但订阅价格较高,初期实施与培训成本高,适合预算充足的大型外贸集团。

5.HubSpot CRM

轻量级免费入门外贸管理工具,主打营销闭环与低成本获客,适合中小微外贸企业。基础版永久免费,支持线索自动抓取、去重与分级分配,整合广告、邮件、SEO及社交媒体渠道,实现获客自动化。销售管道可视化功能可实时查看客户跟进阶段,智能提醒避免遗漏商机。但高级数据分析、多币种精准核算等功能需升级付费,适合初期搭建客户体系、预算有限的初创外贸团队。

6.SAP Business One

一体化外贸ERP解决方案,深耕贸易行业多年,将OA、CRM、ERP、HRM四大系统深度融合。通过统一基础信息码表实现客户、商品、科目等数据标准化管理,自动生成账务凭证,解放财务人力,同时打通库存与财务接口,保障数据一致性。支持多币种核算、跨境订单全流程追踪及合规报关适配,适配工贸一体化企业与跨国经营场景。不足在于操作复杂度较高,小团队学习成本大,更适合具备一定IT基础的中大型外贸企业。

四、精准选型,赋能外贸数字化升级

2026年外贸管理软件市场正加速向“智能化、生态化、分层化”演进,头部厂商凭借技术与生态优势占据主导,国内外服务商形成差异化竞争格局。企业选型需立足自身规模与业务需求。

未来,AI大模型与信创生态将成为外贸管理软件的核心竞争点,企业在选型时需注重技术迭代能力与合规适配性,同时关注软件厂商的生态协同资源与本地化服务能力。数字化转型不是单一工具的应用,而是全链路流程的优化重构,选对适配的外贸管理软件,将成为企业在全球贸易竞争中突围的关键。

前言

crontab是linux系统常用的一个定时执行任务的软件。博主一直用centos,现在用的多的就是Centos 7系统了。

什么是CentOS

CentOS(Community Enterprise Operating System)是一个基于 Red Hat Enterprise Linux (RHEL) 源代码构建的开源操作系统。它被设计为商业级的操作系统,提供与 RHEL 兼容的二进制包,但是完全免费提供,包括软件更新和安全补丁。CentOS 非常受企业用户和服务器管理员的欢迎,因为它提供了一个稳定、安全且高度兼容的平台,适用于网络服务器、云计算环境和许多其他企业应用。

CentOS7是一个免费的开源操作系统,它遵循GPL(通用公共许可证)的规定,意味着用户可以自由地使用、修改和分发它。这使得CentOS7成为企业和个人用户的操作系统之一。无论是在数据中心、云计算环境还是个人计算机上,CentOS7都能提供高性能和可靠性。

CentOS7的特点包括:

  1. 高度稳定性:

CentOS7基于Red Hat Enterprise Linux(RHEL)源代码构建,因此具有与RHEL相同的高度稳定性。它经过了广泛的测试和验证,能够在各种工作负载和环境下提供可靠的性能。

  1. 安全性:

CentOS7提供了一系列的安全特性和工具,以保护用户的系统和数据。它支持SELinux(安全增强Linux)和防火墙等功能,可以帮助用户防止潜在的安全威胁。

  1. 广泛的软件包和工具:

CentOS7提供了大量的软件包和工具,涵盖了各种应用和服务,如Web服务器、数据库、邮件服务器等。用户可以通过CentOS7的软件包管理器轻松地安装、更新和卸载软件。

  1. 强大的性能:

CentOS7具有优化的内核和系统组件,能够提供卓越的性能和响应速度。它支持多核处理器和大内存,可以处理高负载的任务和应用程序。

  1. 社区支持:

CentOS7拥有一个庞大的用户社区,用户可以在社区中获取支持、交流和分享经验。社区提供了各种文档、教程和论坛,帮助用户解决问题和学习更多关于CentOS7的知识。

Centos 7

今天就记录下Centos 7下安装crontab命令,以及crontab常用的一些启动、重启、状态查询等命令。当然,包括crontab随系统自启动命令。

Centos 7安装crontab:

yum -y install vixie-cron
yum -y install crontabs

启动并设置 crond 服务开机自启:

sudo systemctl start crond
sudo systemctl enable crond
  1. crontab 常用命令
    crontab -e: 编辑当前用户的定时任务
    crontab -l: 列出当前用户的定时任务
    crontab -r: 删除当前用户的所有定时任务

    crontab -u [username]: 设定其他用户的 cron 服务 (需要root权限)

    crontab -i    //打印提示,输入yes等确认信息
    总结
    这些都是博主有时会用到的,还有很多的命令应为不怎么使用博主就没有记录了。如果想知道也可以去Google搜索或者是问下AI都是可以了解到的。

作者:杨泽,宝付支付数据团队负责人

随着#数字化转型 升级进入关键期,数据库已从被动的存储仓库,转变为主动赋能业务的智能数据中枢。以现代金融行业为例,业务对数据库提出了更高要求:既要满足事务,又要实时分析,同时安全、高效、弹性、智能地处理多模数据,并支撑实时决策与业务创新。这意味着,符合要求的数据库需在TP、AP、KV、AI方向均具备出色的数据处理能力。

作为在银行、消费金融、零售、跨境等行业深耕多年的一站式综合支付解决方案商,宝付支付产品种类丰富,且深谙技术创新与业务稳健的关系,不断引进先进技术维护和保障公司业务稳步运行,全方位为商户资金安全和交易安全保驾护航。

近年来,宝付支付的原数据库方案已不能满足业务需求,故而寻求技术升级。本文分享宝付支付在KV场景使用OBKV替换HBase的技术实践。

出于架构痛点,寻求支持 TP+AP + KV + AI 的数据库

宝付支付所属集团——漫道集团采用基于MySQL的集中式架构,由于近年来业务高速增长(2023 年初交易量约 3000万笔/日,2024 年 12月 已突破 9000 万笔/日)带来的海量数据(TB级),系统压力陡增。

最直观的压力便是成本压力,每年存储采购预算高达数千万元。同时,为了保障部分业务系统的高可用性,需在 A/B 两个机房部署完全对等的 MySQL 双活架构集群(如各100 台服务器),导致硬件与运维成本成倍增长。

同时在双活架构下,业务层仅关注“订单不丢、实时写入”,但不关心数据最终落在哪个机房、哪个分库。这给数据团队带来巨大挑战:无法准确追踪数据源,难以构建统一的数据视图,ETL 与实时同步逻辑异常复杂。

在业务种类多样的情况下,长期使用MySQL还会导致架构越来越复杂,使运维压力极大。集团内部运行着十余套大数据集群和超过 1000 个 MySQL 实例,分别服务于支付、风控、征信、BI 等不同场景,对数据库有不同的需求。

  • 支付交易系统:要求高并发、低延迟的事务处理能力。
  • 风控系统:依赖实时数据分析与毫秒级决策。
  • 征信 用户画像业务:需要高性能 KV 存储与快速点查。

  • BI 系统:依赖大规模离线分析计算。

多套异构系统并行,导致开发、监控、备份、扩容等运维工作极其繁重。

除MySQL外,我们使用 #HBase 存储海量日志与宽表,其虽具备高吞吐写入能力,但在事务支持、复杂查询、实时分析、KV 混合负载等方面存在明显短板,已无法满足新一代业务需求。

基于上述挑战,我们开始评估新一代分布式数据库方案。文章开头提到现代金融行业的业务对数据库提出了多种要求。宝付支付作为金融行业的一员也不例外,根据对TP、AP、KV、AI方向的需求,我们首先想到了 #OceanBase,核心原因在于其原生支持 HTAP(混合事务/分析处理) + KV + AI 的一体化架构。

  • TP 能力:满足支付交易系统的高并发、强一致性要求。
  • AP 能力:支撑风控与 BI 的实时分析需求。
  • KV 接口:为征信等场景提供低延迟点查。
  • AI 能力:内置向量化引擎与 AI 原生能力,为后续智能风控、实时推荐等 AI 应用奠定基础。

为控制风险,我们采取“由边缘到核心”的渐进式改造路径:先在非关键系统验证 OceanBase 稳定性,逐步迁移风控、征信等中台系统;最终目标是将核心支付交易系统平滑切换至 OceanBase,用一套数据库承载全场景需求。

从边缘到核心:OBKV-HBase替换HBase

在启动 OceanBase 引入计划后,我们先在离线与分析业务进行试点,后将多个MySQL业务迁移至OceanBase。当OBKV功能较为完善时,又完成了从HBase到#OBKV-HBase的升级,实现了一套引擎支持多场景业务的目标。

HBase 难以应对业务复杂度与实时性要求

尽管 HBase 在海量数据存储场景中曾发挥重要作用,但随着业务复杂度提升与实时性要求增强,其在架构、运维及成本等方面的问题日益凸显。主要体现在以下六个方面。

  • 离线链路冗长:当前数据流转路径为从 MySQL 流转至 Hive,再导入 HBase,流程环节多,数据延迟显著,且 Hive 层的数据修正不够灵活。
  • 实时链路依赖过重:直接读写 HBase 严重依赖 Zookeeper 与 HDFS,中间件耦合度高,链路稳定性风险集中。
  • 运维问题:跨机房场景下,集群切换与数据同步操作繁琐,故障时难快速隔离或切换。
  • 成本控制:为满足高可用要求,需部署完整的 HBase 主备集群,硬件与存储资源近乎翻倍,成本太大。
  • 多机房网络问题:机网络切割的时候,专线网络异常的时候,对业务都有影响。
  • SQL 查询依赖 phoenix:原生不支持标准 SQL,需借助 Phoenix 等组件实现查询,引入额外维护负担,且使用体验与性能往往不及直接 SQL 友好。

使用OBKV替换HBase,为统一技术栈奠定基础

OBKV 是构建在 OceanBase 分布式存储引擎之上的NoSQL 产品系列,目前支持 OBKV-Table、OBKV-HBase、OBKV-Redis 三种产品形态,其原生继承了 OceanBase 的高性能、事务、分布式、多租户、高可靠的基础能力。此外,OceanBase 的工具体系(比如OCP、OMS、CDC等)也原生支持 OBKV,运维 OBKV 的各个产品形态和运维 OceanBase 的 SQL 集群完全一样。OBKV 可以帮助企业统一技术栈,在满足业务对多模 NoSQL 数据库诉求的同时,降低企业在数据库运维上的复杂度。

基于我们目前正在使用的OBKV- HBase,总结其与HBase 的使用区别如下。

  • 完全集成 OceanBase 分布式存储能力:OBKV 不仅有 OceanBase 强大的内核能力,也继承了 OceanBase 丰富的生态工具能力。
  • 极简运维:DBA 如果同时有 SQL 以及 NoSQL 数据库的诉求,可以只运维一个数据库。
  • 统一查询:可以用 OBKV 做简单快速的 DML,同时可以用 SQL 对同一份数据做并发的复杂查询。
  • 成本更低:HBase 独用资源,OceanBase 是复用现有资源。
  • 监控更方便:方便对应用现有运行环境添加监控。

OBKV-HBase 不仅解决了传统 HBase 在运维复杂、资源孤岛、工具缺失等方面的痛点,更通过与 OceanBase 深度融合,可以实现“一套引擎、多模服务、统一运维、资源共享”的现代化数据基础设施目标。

引入 OceanBase 的三个阶段,确保技术转型平稳可控

在数据库架构升级过程中,我们分三个阶段逐步引入 OceanBase,确保技术转型平稳可控。

第一阶段:初步探索与能力评估(2023 年)

2023 年底,团队开始接触 OceanBase 及其 OBKV-HBase 产品。当时 OBKV 文档尚不完善,关键功能缺失,尤其缺乏 bulkload(批量导入)能力,无法高效导入离线数据 ,初期判断暂不具备支撑核心业务的能力。因此,该阶段以技术调研为主,未投入生产使用。

第二阶段:归档与分析场景试点(2024 年)

2024 年,团队转向更匹配当前能力的场景,启动 OceanBase 在离线与分析业务的试点,将数据归档、BI 聚合宽表、AP 分析类业务迁移至 OceanBase。我们不仅验证了OceanBase在高吞吐写入、复杂查询、资源隔离等方面的稳定性与性能表现,还积累了集群部署、SQL 优化、运维监控等关键经验,为后续全面推广奠定基础。

第三阶段:逐步替换与扩展(2025 年起)

随着 OceanBase 功能持续完善(特别是 OBKV-HBase 的成熟),团队启动规模化替换计划。

  • 关系型业务:逐步将业务管理系统、商户管理系统、BI 系统等原 MySQL 应用迁移至 OceanBase SQL 模式;
  • NoSQL 业务:使用 OBKV-HBase 替代原有 HBase,例如将“绑卡/解卡操作日志”等高频 KV 场景迁移至 OBKV-HBase;
  • 实现 TP、AP、KV 多负载统一承载,推动技术栈收敛与运维简化。

五步平滑迁移:工具使用、方案设计与注意事项

在从 HBase 到 OBKV-HBase 的数据迁移过程中,我们在实践中总结出五个关键步骤。

Step1: 目标端准备

在正式启动从 HBase 到 OBKV-HBase 的数据迁移前,需在 OceanBase 端完成充分的环境与配置准备。

  • 硬件配置:为避免因磁盘性能不足导致集群不稳定,建议使用高性能磁盘,但建议初期不要过度分配资源,以便预留弹性空间,用于后续扩缩容及负载均衡调整。
  • 存储规划:单个 OBServer 节点的磁盘容量应大于单个日志流的数据量。若单表数据量极大,而节点磁盘不足,可能在扩容或副本迁移时触发空间不足错误。
  • 租户规划:建议为 OBKV 创建独立租户,隔离资源。
  • 建好分区表。

注意事项

  • 实测表明,自动 Range 分区优于手工预设 Hash 分区。自动分区支持分区裁剪,对范围扫描类查询性能更优;手工 Hash 分区在范围查询时需扫描所有分区,显著增加延迟与资源消耗。
  • 需正确创建 Table Group:HBase 表名对应 OBKV-HBase 的 tablegroup 名字。
  • 注意命名规范:HBase 列簇 family 在 OBKV-HBase 形式对应表 tablegroup$family。
  • 注意 K 大小写:使用 DBeaver 等工具导出建表语句时,关键字(如 K)可能被转为小写(如 k),导致语法错误。同时需显式设置最大版本数(Max Versions)和数据过期时间(TTL)(多个版本多行)。

Step2: 数据迁移

在完成目标端环境准备后,我们分阶段实施历史数据迁移与增量数据同步,确保业务平滑切换至 OBKV-HBase。

历史数据迁移

为高效迁移海量历史数据(单表达数十 TB),我们同时使用了 DataX 与 OMS ,但需特别注意两者在数据格式上的关键差异:

  • DataX 导入的数据 Q 值是带列簇,T 值是正数。
  • 用 OMS 导入的 Q 值是不带列簇,T 值是负数。
增量数据同步

为确保切换期间数据零丢失,我们采用 “OMS 增量同步 + 业务双写” 双保险机制:

  • HBase 开启复制,通过 OMS 增量同步。
  • 通过业务程序双写保证数据实时同步。
  • 逐步将流量从 HBase 切换到 OceanBase。

Step3: 数据校验

由于 OBKV-HBase 属于 NoSQL 场景,OMS 在当前版本中尚未提供 KV 类型数据的全量一致性校验功能,我们结合业务实际,设计了一套多维度、可落地的数据校验方案,确保迁移后数据准确无误。

1. 行数校验:精确统计表行数。

HBase 端:使用 HBase 的 RowCounter 工具统计原表行数。 命令: org.apache.hadoop.hbase.mapreduce.RowCounter 'table'

OceanBase 端:使用 count 统计,获取行数并与 HBase 结果比对。

2. 三方数据对比:借助 Doris 实现内容级校验。

由于 OMS 暂时不支持进行 KV 场景下的全量校验,我们引入 Doris 作为临时比对中间层:

  • 通过 DataX 将 HBase 数据同步至 OceanBase 和 Doris。
  • 对比 HBase、OceanBase、Doris 三方的数据一致性。

3. 对关键业务字段进行抽样对比。

Step4:数据访问支持

在完成数据迁移与校验后,业务系统需通过标准接口访问 OBKV-HBase。我们发现 OBKV-HBase 不仅兼容 HBase 协议,还扩展了多项高级查询与操作能力,显著提升了开发效率与系统灵活性。

查询操作(Select)
  • Filter:支持定义基于 AND 及 OR 构建的复杂的过滤条件,下压给 OBKV 服务端来做过滤。
  • Limit:限制返回满足条件数据的条数。
  • IN 等语法糖:IN 本质上是一种 Filter,提供对应接口方便业务编码。
  • 简单聚合能力:提供 Sum/Min/Max/Avg/Count的聚合语义接口,下压给 OBKV 服务端来做简单聚合。
  • OrderBy:只支持基于主键以及索引序。
  • 迭代器访问方式:提供类似迭代器的流式 Query 接口,适用于大批量结果集的流式获取以及处理场景,比如翻页场景。
数据操作
  • Insert:支持单行/多行数据插入。
  • Update:支持单行/多行数据更新,支持带 Filter 的条件更新。
  • Delete:提供基于主键做数据的删除,支持单行/多行数据删除。
  • Upset(insertOrUpdate):此接口的语义是,如果有对应记录存在,执行 Update 操作,如果不存在,执行 Insert 操作,此接口也支持单行/多行操作。

Step5:业务压测

为确保 OBKV-HBase 能够满足高并发生产环境要求,我们使用真实业务压测 OBKV 性能,达到 42w QPS,延迟仅为 1ms 左右,超出预期。

压测方法:

  • 业务直接连接 OBServer 压测 OBKV 性能。
  • 对比前期通过 ODP 压测的性能差异。
  • 详细测试数据

我们部署 10 个 Pod 模拟业务客户端,分别通过 OCP 统一调度和通过 ODP 的方式进行多轮压测任务。如下分别是 OceanBase 数据库、OCP 模式、ODP 模式压测的数据记录。

OceanBase 数据库压测数据如下图所示

OCP 模式压测数据如下图所示

ODP 模式压测数据如下图所示

需要说明的是,前期通过 ODP 压测,性能不佳,QPS 不到 2k,具体原因分析见后续问题总结。经过优化,直连 OBServer 压测 OBKV,QPS 达到 42W,延迟 1ms 左右,完全满足业务需求。

直连 OBServer 的测试结果让我们对 OceanBase 的性能有了充分的信心,为后续业务的正式切换奠定了基础。

OBKV上线经验与问题总结:运维配置、数据校验

在 OBKV-HBase 的测试与上线过程中,我们积累了一系列关于监控集成、硬件配置、租户隔离及 CDC 同步等方面的实践经验,总结如下,供大家参考。

运维配置相关

1.监控配置

为避免重复建设监控平台,我们将 OBKV 相关指标接入公司统一的自研监控系统:

  • ODP 的 Prometheus 参数可直接使用默认配置,无需额外调整;
  • 如需修改 ODP 监控参数,可通过 sys 租户登录集群,执行以下命令:
show proxyconfig like "%prometheus%"以及alter proxyconfig set xxx = xxx;
2.硬件配置
  • 建议使用高性能磁盘,以保障高吞吐写入需求。
  • 初期资源不要划太多,避免将单台服务器的全部 CPU/内存资源划给租户,以便预留弹性空间用于后续扩缩容及负载均衡。
  • 单个节点的磁盘要大于日志流的大小,当单表很大时且未合理分区,其对应的日志流可能超过单节点磁盘容量,同时在集群扩容(如从 3-3-3 架构扩展至 6-6-6 )时,副本迁移会因日志流到节点磁盘迁移失败而失败。
3.租户配置

建议为 OBKV 创建独立租户,避免与 TP/AP 类 SQL 业务共享资源。

4.CDC 配置

在使用 OMS 或 CDC 进行数据同步时,需特别注意 HBase 动态列模型与 CDC 日志格式的兼容性问题。HBase 表的列是动态的(不同 Row 可含不同列),而 OceanBase 的 clog(提交日志)在记录变更时有两种模式。

  • 全列模式(full):记录整行所有列的值。
  • 非全列模式:仅记录被更新的字段。

若源端写入为非全列,而目标端 CDC 期望全列日志,可能导致同步解析失败或数据不一致。

解决方法是启用 CDC 的脏数据跳过开关skip_dirty_data=1,允许跳过全列校验,修改后重启实例生效:ALTER BINLOG INSTANCE y6op8d9rk1 SET EXTRA_OBCDC_CFG ='skip_dirty_data=1'

5.前缀检索用 setRowPrefixFilter

在早期调研阶段,我们比较担忧 OBKV-HBase 是否支持基于 RowKey 前缀的高效查询。经过深入查阅文档与测试验证,确认 OBKV-HBase 完全兼容 HBase 1.2+ 的原生 API,其中包括关键的前缀检索功能。可通过 Scan.setRowPrefixFilter(byte[] prefix) 方法实现高效的前缀扫描(Prefix Scan),具体如下图所示。

该接口会自动构造起始键(startRow)和终止键(stopRow),仅扫描匹配指定前缀的 RowKey 范围,避免全表扫描,显著提升查询效率。

数据校验问题

在从 HBase 迁移至 OBKV-HBase 的过程中,我们在数据校验过程中也遇到了3个关键问题。

问题1:上下游数据条数校对问题

问题描述

使用 DataX 和 OMS 两种工具分别迁移同一张 HBase 表后,OBKV 中的数据行数均少于 HBase 源端,初步校验无法对齐。

原因分析

HBase 的数据模型特性导致 count 结果存在歧义。

  • Region 分裂重叠:分裂过程中可能短暂产生重复 RowKey。
  • 未提交数据/写入失败残留:部分写入未完成但日志已落盘。
  • 多版本(Multi-Version):同一 RowKey 多次写入生成多个时间戳版本,默认全部保留。
  • TTL(Time-To-Live)未生效:过期数据尚未被清理,仍计入统计。

在上述场景下,HBase 的 RowCounter 统计的是所有版本 + 所有可见记录,而 OBKV 默认仅保留最新版本(若未显式配置),导致数量差异。

解决办法

  • 统一迁移工具:避免混合使用 DataX 与 OMS,防止因时间戳、列格式处理逻辑不同引入偏差。
  • 放弃基于快照(Snapshot)或 HFile 的 BulkLoad 方式,改用 queryType=scan 的流式读取,确保仅同步当前可见、已提交的最新版本数据。
  • 开发专门的数据校验工具,对比源端和目标端的数据。

结果验证

通过调整迁移工具和校验方法,最终实现了 HBase 和 OBKV 数据的完全一致。

注意事项

  • 建表语句大小写敏感:通过 DBeaver 等工具导出的建表语句中,K 关键字可能为小写(如 k = 'value'),需手动修正为大写,否则解析失败。
  • 注意设置最大版本号和过期属性(多个版本多行)。

问题 2: 20002 错误码

问题描述

  • 客户端等待服务端一直没有回包,超时报错 20002 ,默认超时设置为 1.5 秒。
  • 每次应用重启后,第一笔查询耗时比较高,后面查询耗时基本正常。

原因分析

根本原因是 scan.setCaching 参数配置不合理。

  • scan.setCaching 参数用于限制每次 RPC 请求返回数据的行数。在 nextO 迭代的过程中,底层通过多次 RPC 来拉取剩余数据。
  • 不设置 scan.setCaching 参数时,默认一次 RPC 拉完一整个分区的数据,在等数据返回的过程中卡住,导致 RT 较高。

解决办法

将 scan.setCaching 参数的值设置为 100,控制每次 RPC 请求返回的最大行数。scan.setCaching(100);设置后,第一次查询耗时降到了 300ms 左右,后续查询性能也得到显著提升。

问题 3:代理压测性能不佳

问题描述

通过 ODP 压测 OBKV-HBase,发现性能瓶颈明显,QPS 不到 2k。

原因分析

根本原因是ODP 元数据缓存机制与数据库大小写敏感配置不匹配。

  • OceanBase 集群启用了 表名大小写敏感模式(lower_case_table_names = 0)。
  • 而 ODP 默认行为在处理元数据请求时,未正确识别大小写敏感上下文,导致其无法有效缓存表结构信息。

每次查询均触发完整的元数据解析流程(包括向 sys 租户查询表定义),无法命中本地缓存。高频元数据查询成为性能瓶颈,严重拖累整体吞吐能力。

优化方案

  • 通过设置 ODP 参数开启 ODP 表名小写兼容模式,在 sys 租户下执行:alter proxyconfig set pc_enable_lower_case_table_names=True
  • 再次压测结果:QPS 稳定在 1.2w 左右,性能提升 6 倍

“一库多模、统一平台”,将大规模引入OceanBase

通过近两年对 OceanBase 及其 OBKV-HBase 能力的深入实践,宝付支付成功完成了从传统 HBase 架构向新一代分布式数据库平台的平滑演进,取得了显著的技术与业务成效。

  • 实现降本:HBase 独用资源转为 OceanBase 复用资源,不仅释放了数台服务器资源,还实现了 NoSQL 与 SQL 负载的统一承载,使硬件投入与运维成本大幅降低。
  • 提升效率:QPS 提升到 42W,延迟降低到 1ms 左右,完全满足高并发支付场景的严苛 SLA 要求。
  • 增强可用性:告别 MySQL 主从 + 异地备库等复杂架构,统一为 OceanBase 多副本强一致架构。系统具备自动故障切换(RTO < 8s)、数据零丢失(RPO = 0)能力,整体健壮性显著提升。
  • 统一监控:方便对应用现有运行环境添加监控,大幅提升可观测性和监控易用性。

不仅如此,对于集团架构而言,也具有重大意义和价值。

其一,完成数据库架构全面升级。从 HBase 到 OceanBase,从“多套异构数据库”走向“一库多模、统一平台”,我们实现了数据库架构的全面升级,技术栈大幅收敛。

其二,夯实业务创新底座。高性能、高可用的数据服务为实时风控、智能 BI 等新场景的业务创新提供了更强大的数据支撑能力。

其三,奠定智能数据架构基础。为未来 AI 原生计算、HTAP 融合分析、跨地域多活等演进方向预留充分扩展空间。

其四,沉淀宝贵实践经验。形成涵盖迁移方案、数据校验、性能调优、故障排查的完整方法论,可复用于后续系统改造。

本次 OBKV-HBase 成功落地,离不开 OceanBase 团队在过去两年中提供的专业、及时、深度的技术支持,特别是老纪及其研发、技术支持团队。无论是早期功能定制、性能瓶颈攻关,还是生产上线保障,OceanBase 团队始终与我们并肩作战,为项目顺利推进提供了坚实保障。在此,谨代表宝付支付技术团队,向 OceanBase 团队在迁移过程中提供的技术支持致以诚挚感谢!

另外,基于当前 OceanBase 在宝付支付的成功落地经验,我们已将 OceanBase 纳入集团未来数据架构的核心,聚焦 AI 项目赋能、汇聚库建设、多活架构尝试、零售支付场景四大业务方向大规模引入。

1. Al 项目赋能:实现一体化SQL+AI。

为响应公司对智能化转型的战略要求,我们将 AI 能力深度集成至数据库引擎层,推动从“被动查询”向“主动智能服务”升级。

  • 原生支持 AI 混合计算:利用 OceanBase 内置的向量化执行引擎与 AI 函数能力,实现“SQL + AI”的混合计算。
  • 探索智能化查询优化和数据处理。
  • 提升数据分析和決策支持能力。

2. 汇聚库建设:实现一体化TP+AP。

当前集团存在 1000+ MySQL 实例及多套异构数据系统,导致跨库分析、实时统计、经营报表等场景面临巨大挑战,OceanBase 的 HTAP 一体化架构为此提供了根本性解决方案。我们将逐步把核心业务库、汇聚库、宽表等迁移至 OceanBase 并扩大线上使用规模,使用一套集群同时承载 TP 写入与 AP 分析,构建统一的数据平台,简化数据链路,提升数据治理和数据服务能力。

3.多活架构尝试,实现系统稳定。

苦于MySQL双活架构带来的问题,我们将尝试业务多活要求,满足高可用业务需求。依托 OceanBase 原生分布式多副本与 Paxos 协议能力,构建轻量级、高可用、跨机房、跨地域的多活架构,提升系统容灾能力和业务连续性。

4.零售支付场景深化。

随着内部零售支付业务越来越多,我们将在其他零售支付业务场景推广使用 OceanBase。并持续优化 OceanBase 压测记录,完善性能基线。我们计划基于真实业务负载开展常态化压测,建立 QPS、延迟、资源消耗等关键指标的基准模型。

此外,探索更多 OceanBase 在支付行业的应用场景,充分发挥 OceanBase 的 HTAP 与多模能力。

数据库的升级不仅是技术的迭代,更是业务持续创新与稳健运行的基石。

欢迎关注,将为您持续更新与#数据库、#AI、#开发、#降本增效 相关的技术内容。