新闻详情

新闻详情

首页 / 资讯中心 / 详情

ax 编排实战:Kubernetes 上跑 agentic 工作负载

发布时间:2026/9/28 17:32:32来源:尧图网络
ax 编排实战:Kubernetes 上跑 agentic 工作负载
1. 从 ax 这个标题说起一个被低估的 agentic 编排入口第一次看到 ax 这个标题很多人会以为是某个命令行工具的缩写或者某个内部项目的代号。但把关键词摊开来看——ax、agentic、orchestration、kubernetes、cli——这几个词凑在一起指向的其实是一个非常具体的东西一个面向 agentic 工作负载的编排层用 CLI 作为主要交互入口底层跑在 Kubernetes 上。我接触这类项目大概是从去年开始当时团队里有一堆零散的 agent 脚本有的跑在本地、有的塞在 CI 里、有的挂在某个定时任务上状态完全不可观测。后来我们尝试把这些东西收敛到一个统一的编排框架里ax 就是在这个背景下进入视野的。它解决的问题很朴素当你的 agent 不再是一个 demo而是一堆需要调度、需要重试、需要观测、需要隔离的任务时你靠 shell 脚本是撑不住的。这篇文章适合三类人看。第一类是已经在写 agent、但还停留在一个 Python 文件跑到底阶段的开发者你会在这里看到为什么要引入编排层第二类是已经在用 Kubernetes、但还没想清楚怎么把 agent 工作负载塞进去的运维或平台工程师第三类是纯粹对 agentic orchestration 这个概念好奇、想找一个具体抓手的人。我会尽量把每一步的为什么讲清楚而不是只丢一堆命令让你抄。需要先说明一点ax 这类工具目前还在快速演进不同版本之间 CLI 参数、CRD 定义都可能有差异。我下面写的内容基于我实际跑通的版本如果你照着做发现对不上先ax --version确认一下再对照官方 changelog。这不是甩锅是这个领域的常态。2. 为什么 agentic 工作负载需要一层专门的编排2.1 普通任务编排和 agent 编排的本质区别很多人第一反应是我都有 Kubernetes 了为什么还要在它上面再套一层直接写个 Deployment 跑 agent 不就行了这个想法在 agent 是无状态、单次执行、秒级返回的时候是成立的。但真实的 agent 工作负载有几个很麻烦的特性执行时间长且不确定。一个 agentic RAG 流程可能要跑几分钟到几十分钟中间要多次调用模型、多次检索、多次工具调用你没法用普通的 liveness probe 去判断它是不是卡死了。有中间状态。agent 执行到一半可能已经产生了部分结果、已经调用了一些有副作用的工具这时候如果 Pod 被重启你是从头再来还是断点续传普通 Deployment 不帮你管这个。需要人机协同。很多 agent 流程在关键节点需要人工确认比如这个操作要不要执行这时候任务要挂起、要能被外部事件唤醒这不是一个长驻进程能优雅处理的。资源画像差异大。有的 agent 步骤是 CPU 密集的检索有的是纯 IO 等待模型返回混在一个 Pod 里会导致资源利用率极差。ax 这类编排层的价值就是把这些特性抽象成原语。它不是在 Kubernetes 之上又造了一个 Kubernetes而是在 Kubernetes 的调度能力之上补了一层面向 agent 生命周期的语义。2.2 编排层到底编排的是什么我用一个具体的例子来说明。假设你要做一个自动整理会议纪要并同步到知识库的 agent它大概有这么几步拉取会议录音转写用模型做摘要和要点提取检索知识库判断是否已有相关条目如果有走更新流程如果没有走创建流程把结果写回并通知相关人如果用传统方式你可能会写一个 Python 脚本里面串行调用这五步。问题在于第 1 步失败要重试第 2 步模型可能超时第 3 步检索可能返回空第 4 步的两个分支逻辑完全不同第 5 步的通知失败不应该导致整个任务回滚。ax 的编排模型会把每一步定义成一个节点节点之间有依赖关系和数据流。每个节点有自己的重试策略、超时策略、资源需求。整个流程是一个 DAG但和 Airflow 那种批处理 DAG 不同的是ax 的节点可以是长时间运行的、可中断的、可被外部事件驱动的。提示不要一上来就把所有逻辑都拆成节点。我踩过的坑是拆得太细会导致节点间数据传输开销巨大尤其是中间结果是大文本的时候。经验法则是一个节点内部的逻辑如果不需要独立重试、不需要独立观测就别拆。2.3 和 Karmada 这类多集群调度的关系热搜里出现了 Karmada 毕业的消息这其实和 ax 的定位有交集。Karmada 解决的是多集群之间的工作负载分发而 ax 解决的是单个 agent 流程内部的编排。两者不是竞争关系而是可以叠加的。我实际用下来的组合方式是ax 负责把一个 agentic 流程拆解成可调度的单元Karmada 负责把这些单元分发到不同的集群。比如你的检索节点需要 GPU 做向量计算可以调度到有 GPU 的集群你的通知节点只是个轻量 HTTP 调用调度到边缘集群就行。这种分层让每一层只关心自己的事比把所有逻辑塞进一个巨大的调度器要清晰得多。3. ax 的核心概念拆解从 CLI 到 Kubernetes 的映射3.1 CLI 是入口不是全部ax 的 CLI 设计思路很明确本地开发体验要顺滑生产部署要无感。你在本地用ax run跑一个流程和在生产用ax apply部署到 Kubernetes用的是同一套流程定义文件。这个设计的好处是你不需要维护两套逻辑。我见过太多项目本地用一套 mock、生产用一套真实实现结果本地跑通的东西上生产就炸。ax 的做法是让流程定义本身和环境解耦环境差异通过配置文件注入。这个思路和 12-factor app 是一致的但落地得更彻底。CLI 的主要命令大概分这么几类命令类别典型命令用途流程管理ax init/ax apply/ax delete创建、部署、删除流程执行控制ax run/ax stop/ax resume本地或远程执行流程状态观测ax status/ax logs/ax describe查看流程和节点状态调试辅助ax dry-run/ax validate校验流程定义这里我要重点说ax dry-run。很多人跳过这一步直接 apply结果在集群里报一堆错。dry-run 会在本地把流程定义解析一遍检查依赖关系、检查镜像是否存在、检查资源配额是否合理。我现在的习惯是任何流程定义改动后先 dry-run再 apply。3.2 流程定义文件的结构ax 的流程定义通常是一个 YAML 文件结构上借鉴了 Kubernetes 的资源定义风格。一个最小的例子大概长这样apiVersion: ax.io/v1 kind: Flow metadata: name: meeting-notes-agent spec: entrypoint: fetch-audio nodes: - name: fetch-audio type: task image: my-registry/audio-fetcher:1.2.0 next: transcribe - name: transcribe type: task image: my-registry/transcriber:0.9.1 retry: maxAttempts: 3 backoff: 30s next: summarize - name: summarize type: agent model: gpt-4-class tools: - knowledge-search next: decide-write - name: decide-write type: branch conditions: - when: {{ .summarize.hasExisting }} next: update-entry - when: {{ .summarize.hasExisting false }} next: create-entry这个结构里有几个关键点值得展开。entrypoint定义了流程的起点这比隐式推断起点要清晰得多。我见过一些编排工具靠没有入边的节点就是起点来推断结果流程一复杂就乱套。type字段区分了节点类型。task是普通任务agent是 agentic 节点会调用模型、可能调用工具branch是分支节点。这个类型系统让编排层知道该怎么对待每个节点——比如 agent 节点需要更长的超时、需要记录模型调用轨迹。next字段定义了控制流。这种显式声明的方式比隐式依赖更啰嗦但可读性更好。我个人的偏好是流程定义文件是给人看的多写几行换来清晰是值得的。3.3 节点间的数据传递数据传递是编排里最容易出问题的地方。ax 的做法是用一个流程级的状态存储每个节点执行完后把输出写进去下游节点通过模板语法引用。- name: summarize type: agent inputs: transcript: {{ .transcribe.output }} outputs: summary: {{ .result.summary }} hasExisting: {{ .result.knowledgeCheck.found }}这里有个细节inputs和outputs是显式声明的。这意味着编排层可以在节点执行前就知道它需要什么、会产生什么从而做依赖分析和并行调度。我实测下来显式声明比隐式传递要多写一些代码但在调试时省的时间是值得的——当流程出错时你能一眼看出是哪个节点的输出不符合预期。注意状态存储的大小是有限制的。如果你的中间结果是几百 MB 的文件不要直接塞进状态里应该存到对象存储状态里只放引用。我见过有人把整个向量库塞进状态结果流程直接 OOM。4. 在 Kubernetes 上跑 ax从零到可用的完整过程4.1 环境准备与前置检查在把 ax 部署到 Kubernetes 之前有几个前置条件必须确认。我列一个检查清单你可以照着过一遍Kubernetes 版本。我实测下来 v1.26.0 及以上比较稳低于这个版本可能缺少某些 CRD 特性。用kubectl version --short确认。集群有可用的默认 StorageClass。ax 的状态存储需要持久化没有默认 StorageClass 的话PVC 会一直 Pending。有权限创建 CRD 和 ClusterRole。ax 会注册自己的 CRD如果你的账号只有 namespace 级别的权限需要找集群管理员开权限。镜像仓库可访问。ax 的组件镜像和你的业务镜像都要能拉取内网环境要提前配好 imagePullSecrets。我踩过的一个坑是集群的 admission webhook 拦截了 ax 创建的某些资源导致部署卡住。排查方法是看kubectl get events -n ax-system如果有 webhook 相关的拒绝事件就要找管理员加白名单。4.2 安装 ax 控制面安装过程本身不复杂但有几个参数值得说明ax install \ --namespace ax-system \ --storage-class standard \ --state-size 20Gi \ --enable-metrics--storage-class指定状态存储用的 StorageClass。如果你的集群有多个 StorageClass选那个 IOPS 高的因为 agent 流程的状态读写很频繁。--state-size是状态存储的初始大小。这个值给太小会导致流程跑到一半存储满了给太大又浪费。我的经验值是按你最大的流程的中间结果总量乘以 3 来估。比如你的流程中间结果最多 5GB那就给 15Gi。--enable-metrics会暴露 Prometheus 格式的指标。这个强烈建议开后面做观测全靠它。安装完成后用ax status确认控制面组件都起来了。正常情况下你会看到 controller、scheduler、state-store 三个组件都是 Running。4.3 部署第一个流程我建议第一个流程不要用真实的业务逻辑而是用一个回声流程就是输入什么输出什么中间加几个 sleep。这样你可以验证整条链路是通的而不用被业务逻辑的 bug 干扰。apiVersion: ax.io/v1 kind: Flow metadata: name: echo-test spec: entrypoint: step1 nodes: - name: step1 type: task image: busybox:1.36 command: [sh, -c, echo hello from step1 sleep 5] next: step2 - name: step2 type: task image: busybox:1.36 command: [sh, -c, echo hello from step2]部署命令ax apply -f echo-test.yaml ax run echo-test --watch--watch会实时打印节点状态变化。你应该能看到 step1 从 Pending 到 Running 到 Succeeded然后 step2 开始执行。如果卡在 Pending多半是镜像拉取问题或者资源不足。4.4 资源配额与调度策略agent 工作负载的资源画像差异很大所以 ax 允许你给每个节点单独指定资源- name: vector-search type: task resources: requests: cpu: 2 memory: 4Gi limits: cpu: 4 memory: 8Gi nodeSelector: workload-type: compute-intensive这里有个经验requests 和 limits 不要设成一样。agent 任务的资源使用是波动的如果 requests 等于 limitsKubernetes 会把它当成 Guaranteed QoS调度灵活性会变差。我一般 requests 设成峰值的 60%limits 设成峰值的 120%。nodeSelector 用来把节点调度到特定类型的机器上。如果你的集群有 GPU 节点、有高内存节点用这个字段做隔离。我见过有人把向量检索和模型推理混在同一批节点上结果互相抢资源两边都慢。5. agentic RAG 在 ax 上的落地实践5.1 为什么 agentic RAG 特别适合用编排层传统的 RAG 是检索一次、生成一次流程是线性的。agentic RAG 不一样它会根据中间结果决定下一步做什么检索结果不够好就换个查询再检索发现需要外部数据就调用工具判断问题复杂就拆成子问题。这种动态性用普通脚本写会非常痛苦因为你要处理各种分支和循环。用编排层写就自然得多因为编排层本来就是为有依赖关系的多步骤流程设计的。我在 ax 上实现的一个 agentic RAG 流程大概是这样接收问题做初步分析生成检索查询执行检索评估检索结果的相关性如果相关性不够改写查询回到第 2 步最多循环 3 次如果相关性够生成答案对答案做事实性校验如果校验不通过回到第 5 步重新生成最多 2 次这个流程里有循环、有条件分支、有重试用编排层表达非常自然。5.2 循环和重试的边界控制循环是 agentic 流程里最容易失控的地方。如果不设边界agent 可能陷入无限循环烧掉大量 token 和时间。ax 里控制循环的方式有两种。一种是节点级重试适合这个操作失败了重试一下的场景retry: maxAttempts: 3 backoff: exponential initialInterval: 10s maxInterval: 120s另一种是流程级循环适合这个子流程要重复执行直到满足条件的场景。ax 用loop类型的节点来表达- name: retrieval-loop type: loop maxIterations: 3 condition: {{ .evaluate.relevanceScore 0.8 }} body: - name: rewrite-query type: agent # ... - name: retrieve type: task # ... - name: evaluate type: agent # ...maxIterations是硬性上限不管条件是否满足超过就退出。这个字段必须有我见过有人忘了设结果流程跑了一晚上。提示循环的退出条件要设计得保守一点。宁可多循环一次也不要因为条件太严格导致该循环的时候不循环。我一般会把阈值设得比理想值低一点比如理想相关性是 0.9退出条件设 0.8。5.3 工具调用的编排agentic RAG 里的工具调用是个麻烦事。工具可能是内部的 API、可能是数据库查询、可能是外部服务。每个工具的延迟、可靠性、副作用都不一样。ax 的做法是把工具调用也抽象成节点这样每个工具调用都有自己的重试策略和超时- name: call-knowledge-api type: tool tool: knowledge-search timeout: 30s retry: maxAttempts: 2 inputs: query: {{ .rewriteQuery.output }} outputs: results: {{ .result.items }}这样做的好处是工具调用的失败不会导致整个 agent 节点失败而是可以被单独重试。我实测下来这种细粒度的重试比在 agent 内部用 try-catch 处理要可靠得多因为编排层的重试是跨进程的不受 agent 进程状态影响。6. 观测与排查流程跑起来之后才是真正的开始6.1 必须关注的几个指标流程部署上去只是第一步能不能稳定运行才是关键。我建议至少关注这几个指标指标含义告警阈值建议flow_duration_seconds流程端到端耗时超过历史 P95 的 2 倍node_failure_total节点失败次数5 分钟内超过 3 次node_retry_total节点重试次数突增说明下游不稳定state_store_usage_bytes状态存储使用量超过容量的 80%agent_token_usageagent 节点 token 消耗突增可能意味着循环失控这些指标 ax 默认会暴露你只需要在 Prometheus 里配好抓取。我特别想强调的是agent_token_usage这个指标是 agentic 流程特有的普通任务编排不会关心。它能在循环失控的早期就发出信号比等到流程超时再发现要好得多。6.2 常见故障的排查路径我把实际遇到过的故障整理成一个速查表现象可能原因排查方法流程一直 Pending资源不足或调度约束太严kubectl describe pod看 Events节点反复重启镜像问题或 OOMkubectl logs --previous看上次日志流程卡在某个节点下游依赖未满足或死锁ax describe flow看节点依赖图状态存储写入失败存储满或权限问题检查 PVC 状态和 StorageClassagent 节点超时模型响应慢或循环失控看 token 消耗曲线和节点日志这里我要单独说流程卡在某个节点这个情况。它最隐蔽因为节点状态显示 Running但实际什么都没干。排查方法是ax describe看节点的依赖关系如果某个上游节点状态是 Succeeded 但下游一直不开始多半是数据传递出了问题——比如上游的输出格式和下游期望的不一致。6.3 日志的收集和检索ax 的日志分两层编排层日志节点调度、状态变化和业务层日志节点内部的实际输出。编排层日志 ax 自己收集业务层日志需要你的节点把日志输出到 stdout然后由集群的日志系统收集。我建议在流程定义里给每个节点加上结构化日志的配置- name: summarize type: agent env: - name: LOG_FORMAT value: json - name: LOG_LEVEL value: info结构化日志的好处是可以用字段检索。比如你想找所有 token 消耗超过 10000 的 agent 调用直接查token_usage 10000就行不用 grep 文本。7. 一些踩过的坑和实操心得7.1 不要过早优化节点粒度我一开始做编排的时候恨不得把每个函数调用都拆成节点觉得这样最灵活。结果流程定义文件有几百行节点间数据传输成了瓶颈调试的时候要在十几个节点之间跳来跳去。后来我调整了策略一个节点应该是一个有独立失败语义的单元。如果两个操作总是一起成功或一起失败它们就应该在同一个节点里。如果两个操作需要独立重试、独立观测、独立扩缩容才拆成两个节点。这个原则让我的流程定义文件从几百行降到了几十行可维护性大幅提升。7.2 状态存储的清理策略ax 的状态存储默认会保留所有流程的执行记录。这在开发阶段很有用但在生产环境会迅速膨胀。我见过一个流程每天跑几千次一个月后状态存储到了几百 GB。ax 支持配置保留策略spec: retention: successfulRuns: 7d failedRuns: 30d maxRuns: 1000successfulRuns是成功执行的保留时间failedRuns是失败执行的保留时间。失败的多留一段时间因为可能要回溯排查。maxRuns是硬性上限超过就删最老的。我的建议是开发环境保留 3 天生产环境成功保留 7 天、失败保留 30 天。这个配置要根据你的实际执行频率调整没有万能值。7.3 本地开发和远程执行的切换ax 的一个便利之处是本地和远程用同一套定义。但有个细节要注意本地执行时节点是在你的机器上跑的用的是你本地的环境变量和网络远程执行时节点是在集群里跑的用的是集群的环境。这意味着如果你的节点依赖某个本地服务比如本地起的数据库本地能跑通远程就会失败。我的做法是所有外部依赖都通过环境变量注入本地和远程用不同的值。这样切换环境时只需要改配置不用改流程定义。7.4 关于 CLI 工具的选择热搜里出现了 codex cli、claude cli 这些工具它们和 ax 的 CLI 定位不同。codex cli 和 claude cli 是模型交互工具让你在终端里和模型对话、生成代码。ax 的 CLI 是流程编排工具让你定义和执行多步骤的 agent 流程。两者可以配合使用。比如你可以用 codex cli 生成流程定义的骨架然后用 ax 的 CLI 去校验和部署。我实际用下来这种组合能省不少写样板代码的时间但生成的骨架一定要人工检查尤其是资源配额和重试策略这些容易出问题的地方。注意安装 codex cli 或 claude cli 时如果遇到 unable to locate the codex cli binary or required runtime components 这类错误通常是运行时依赖没装全。先确认 Node.js 或 Python 版本符合要求再检查 PATH 是否包含安装目录。这类问题在 Mac 上尤其常见因为 Homebrew 装的 Node 和系统自带的 Node 经常打架。8. 从单机脚本到编排层的迁移路径如果你现在有一堆散落的 agent 脚本想迁移到 ax 这类编排层我建议分三步走不要一次性全迁。第一步选一个最简单的脚本把它包装成一个单节点流程。这一步的目的是验证环境确认 ax 能在你的集群上跑起来确认你的镜像能拉取确认状态存储能写入。这个流程不需要有任何编排逻辑就是一个节点跑完结束。第二步选一个有两三步逻辑的脚本把它拆成多节点流程。这一步的目的是验证节点间的数据传递和依赖关系。你会遇到数据格式不匹配、状态存储大小超限这些问题在简单场景下解决它们比在复杂场景下解决要容易得多。第三步把剩下的脚本按优先级逐个迁移。优先迁那些失败率高、需要人工干预、或者执行时间长的。这些脚本从编排层获益最大。那些一次跑完、从不失败、几秒钟结束的脚本可以最后再迁甚至不迁也行。我自己的经验是迁移过程中最大的阻力不是技术而是习惯。写惯了脚本的人会觉得编排层的 YAML 太啰嗦。但当你遇到第一次需要断点续传、第一次需要人工确认、第一次需要跨节点观测的时候你就会明白这些啰嗦换来了什么。9. 关于 agentic cloud 的一点个人观察热搜里提到agentic cloud这个概念我理解它指的是为 agent 工作负载专门优化的云基础设施。传统的云是为 Web 服务、为批处理、为数据库优化的但 agent 工作负载的画像和它们都不一样。agent 工作负载的特点是突发性强可能几分钟没请求然后突然来一大批、状态复杂中间结果多、依赖外部服务多模型 API、工具 API、成本敏感token 是要花钱的。ax 这类编排层本质上是在现有的云基础设施之上补一层面向 agent 的抽象。它不改变底层的计算、存储、网络但它改变了你表达和调度 agent 工作负载的方式。这个改变的价值随着 agent 流程越来越复杂会越来越明显。我现在的一个判断是未来一两年内agentic orchestration 会像当年的容器编排一样从少数人的玩具变成基础设施的标配。现在开始接触和积累比等到所有人都用的时候再学要从容得多。最后分享一个我最近在用的调试技巧当流程行为不符合预期时先用ax dry-run把流程定义展开成完整的执行计划看看编排层理解的流程和你脑子里想的是不是一回事。我遇到过的 bug 里有相当一部分是流程定义写错了而不是运行时出了问题。把定义看一遍往往比看日志更快找到问题。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MAP文件查看工具怎么选?TaoToken统一Key接入VSC插件与MemMapExplorer的配置骨架 2026/9/28 18:19:50

MAP文件查看工具怎么选?TaoToken统一Key接入VSC插件与MemMapExplorer的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Sql Server 全文索引分词实战:用 TaoToken 统一 Key 打通字段关键词提取配置 2026/9/28 18:19:50

Sql Server 全文索引分词实战:用 TaoToken 统一 Key 打通字段关键词提取配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
用OpenClaw经营一人公司:内容创作到社群运营的TaoToken配置骨架 2026/9/28 18:19:44

用OpenClaw经营一人公司:内容创作到社群运营的TaoToken配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Claude Pro太贵?用TaoToken统一Key接入Claude Code的settings.json配置指南 2026/9/28 18:19:44

Claude Pro太贵?用TaoToken统一Key接入Claude Code的settings.json配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Codex 新手小白入门教程:从 CLI 到 App 的 TaoToken 配置实战 2026/9/28 18:19:44

Codex 新手小白入门教程:从 CLI 到 App 的 TaoToken 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
数据库高可用与容灾实战(3):半同步复制与无损切换:RPO=0 能不能做到 2026/9/28 18:19:44

数据库高可用与容灾实战(3):半同步复制与无损切换:RPO=0 能不能做到

本篇问题 上一篇用 GTID 把切换的账算清楚了:账能对上,最多是"知道丢了什么";要"根本不丢",就得改变复制的确认语义——让事务在对客户端宣告提交之前,先确保二进制日志在远端活了下来。这就是半同…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉