☰
图解AI应用架构设计:从Demo到生产的五层架构与Agent编排实战
2026/10/4 9:39:25 网站建设 项目流程

1. 从一张架构图说起:AI应用到底该怎么搭

很多人第一次接触AI应用开发,脑子里冒出来的第一个念头是“调个API不就完了”。我刚开始也这么想,直到真正把一个能用的AI应用从Demo推到线上,才发现事情远没有这么简单。一个能跑通的Demo和一个能扛住真实用户、能持续迭代、能控制成本的AI应用,中间隔着的就是架构设计这道坎。

“图解AI应用架构设计”这个题目,核心要解决的就是一件事:把AI应用从“能跑”变成“能扛”。它涉及的不只是模型调用,还包括Agent怎么编排、LLM怎么选型、MCP怎么接入、上下文怎么管理、并发怎么处理、安全怎么兜底。这套东西适合谁看?如果你是一个正在做AI应用开发的程序员,或者是一个想从传统后端转向AI方向的工程师,又或者是一个需要评估AI项目可行性的技术负责人,那这篇内容就是写给你的。

我见过太多团队在AI应用上踩坑:有人把LLM当成万能接口,结果token成本失控;有人把Agent设计得无比复杂,结果调试都调不动;有人接了一堆MCP工具,结果权限管理一团糟。这些问题的根源,几乎都能追溯到架构设计阶段没有想清楚。所以我想用“图解”的思路,把AI应用的架构一层一层拆开,让你看完之后能自己画出一张清晰的架构图,并且知道每一层为什么这么设计。

2. AI应用架构的整体分层与设计思路

2.1 为什么AI应用需要独立的分层架构

传统Web应用的架构已经很成熟了:接入层、业务层、数据层,三层走天下。但AI应用不一样,它多了一个“不确定性”的维度。LLM的输出是不确定的,Agent的行为是不确定的,工具调用的结果也是不确定的。这种不确定性意味着你不能用传统的“请求-处理-响应”模型来套,你需要额外的层来处理推理、编排、记忆和治理。

我习惯把AI应用架构分成五层:接入层、编排层、能力层、模型层、治理层。接入层负责和用户交互,编排层负责Agent的逻辑流转,能力层负责工具和外部服务的调用,模型层负责LLM的推理,治理层负责安全、成本、监控和评估。这五层不是简单的堆叠,而是有明确的职责边界和交互协议。

为什么这么分?因为AI应用的迭代速度太快了。今天用GPT-4,明天可能换Claude,后天可能上开源模型。如果模型层和编排层耦合在一起,换模型就是一场灾难。同样,MCP工具今天接三个,明天接十个,如果能力层没有统一的接口抽象,每接一个工具就要改一遍编排逻辑,维护成本会指数级上升。分层的目的就是让变化发生在局部,而不是牵一发动全身。

2.2 编排层:Agent的大脑该怎么设计

编排层是整个AI应用的核心,它决定了Agent怎么思考、怎么行动、怎么记忆。我见过很多Agent项目,编排逻辑写得像一团乱麻,if-else嵌套十几层,最后连作者自己都改不动。问题出在没有把编排逻辑抽象成可复用的模式。

目前主流的Agent编排模式有三种:ReAct、Plan-and-Execute、Multi-Agent。ReAct适合简单的工具调用场景,Agent先推理再行动,行动完再推理,循环直到任务完成。Plan-and-Execute适合复杂任务,Agent先制定计划,再逐步执行,执行过程中可以调整计划。Multi-Agent适合需要多角色协作的场景,比如一个Agent负责检索,一个Agent负责总结,一个Agent负责审核。

选哪种模式,取决于你的任务复杂度。我个人的经验是:能用ReAct解决的,不要上Plan-and-Execute;能用单Agent解决的,不要上Multi-Agent。每增加一层复杂度,调试难度和token消耗都会显著上升。我见过一个团队为了做一个简单的客服问答,设计了五个Agent互相协作,结果响应时间从2秒变成了15秒,token成本翻了八倍,最后不得不回退到单Agent方案。

编排层还有一个关键设计是记忆管理。Agent需要记住对话历史、工具调用结果、中间状态。但LLM的上下文窗口是有限的,你不能把所有东西都塞进去。我的做法是分三层记忆:短期记忆存最近几轮对话,中期记忆存关键的工具调用结果,长期记忆存用户偏好和领域知识。短期记忆直接拼进prompt,中期记忆做摘要后拼入,长期记忆通过检索按需注入。

2.3 能力层:MCP协议带来的标准化革命

MCP(Model Context Protocol)是最近AI应用开发领域最值得关注的变化之一。在MCP出现之前,每接一个工具都要写一套适配代码,工具的描述格式、参数格式、返回格式各不相同。MCP把这些标准化了:工具用统一的schema描述,调用用统一的协议,返回用统一的结构。这意味着你的Agent编排层只需要对接MCP协议,不需要关心具体工具的实现细节。

我实测下来,MCP最大的价值在于“即插即用”。以前接一个数据库查询工具,要写参数校验、错误处理、结果格式化,至少半天。现在只要工具实现了MCP Server,Agent这边配置一下就能用。而且MCP支持工具的动态发现,Agent可以在运行时查询有哪些工具可用,根据任务需要选择合适的工具。

但MCP也不是银弹。我踩过的坑是:MCP工具的质量参差不齐,有些工具的描述写得含糊不清,Agent根本不知道怎么用。还有些工具没有做好错误处理,调用失败后返回的信息对Agent毫无帮助。所以我的建议是:接入MCP工具之前,先自己测试一遍,确认工具的描述清晰、参数合理、错误信息可读。另外,MCP工具的权限控制也要在能力层做好,不能让Agent随意调用敏感工具。

2.4 模型层:LLM选型的三个关键维度

LLM选型是AI应用架构中最容易纠结的环节。市面上模型那么多,GPT、Claude、Gemini、开源模型,到底选哪个?我的经验是看三个维度:能力、成本、延迟。

能力维度要看你的任务需要什么。如果是复杂的推理任务,Claude和GPT-4系列表现更好;如果是简单的分类或抽取任务,小模型甚至开源模型就够用。我做过一个测试,同样的信息抽取任务,用大模型和小模型的准确率差距不到3%,但成本差了20倍。所以不要盲目上大模型,先评估任务的实际需求。

成本维度要算清楚token账。LLM的token计费分输入和输出,输出通常比输入贵。一个Agent任务如果涉及多轮推理和工具调用,token消耗会远超你的预期。我的做法是:在架构设计阶段就估算每个任务的token消耗,设置预算上限,超过上限就降级到小模型或简化流程。

延迟维度要看用户体验要求。如果是对响应时间敏感的场景,比如实时对话,就要选延迟低的模型,或者用流式输出让用户感知不到等待。如果是后台批处理任务,延迟要求可以放宽,优先考虑成本和能力。

还有一个容易被忽略的点是模型的稳定性。有些模型在高峰期会限流,有些模型会突然更新版本导致行为变化。所以架构上要做好模型切换的准备,把模型调用抽象成统一的接口,换模型时只改配置不改代码。

2.5 治理层:安全、成本、监控一个都不能少

治理层是AI应用架构中最容易被忽视,但出事时最致命的一层。我见过太多项目在Demo阶段跑得很好,一上生产就出问题:要么是token成本失控,要么是Agent被诱导执行了危险操作,要么是模型输出违规内容。

安全方面,核心是输入输出过滤和权限控制。输入过滤要防止prompt注入,输出过滤要防止违规内容。权限控制要确保Agent只能调用被授权的工具,不能越权访问数据。我建议在治理层做一个统一的策略引擎,所有输入输出都经过策略检查,策略可以动态配置。

成本方面,核心是token预算和用量监控。每个任务、每个用户、每天都要有token预算,超过预算就降级或拒绝。用量监控要实时,不能等到月底看账单才发现超了。我习惯在治理层做一个成本看板,实时显示token消耗和费用,设置告警阈值。

监控方面,核心是链路追踪和效果评估。AI应用的调用链路比传统应用长得多,一次请求可能涉及多次LLM调用和工具调用。没有链路追踪,出了问题根本不知道是哪一步出的错。效果评估要定期做,用LLM as Judge或者人工评估,确保Agent的输出质量没有下降。

3. 核心细节解析与实操要点

3.1 Agent架构设计的常见模式与选型对比

Agent架构设计没有银弹,不同的任务场景需要不同的模式。我把常见的Agent架构模式整理成了一张对比表,方便你根据实际需求选型。

模式适用场景优点缺点调试难度
ReAct简单工具调用、单步任务实现简单、延迟低复杂任务容易迷失低
Plan-and-Execute多步骤复杂任务全局规划、可调整计划可能不准确中
Multi-Agent多角色协作任务分工明确、可扩展通信开销大、调试难高
Reflexion需要自我修正的任务输出质量高token消耗大中
Toolformer工具调用密集型任务工具使用效率高依赖工具质量中

选型的时候,我建议从最简单的模式开始,遇到瓶颈再升级。不要一上来就上Multi-Agent,除非你的任务确实需要多角色协作。我见过一个团队做文档问答,本来ReAct就够了,非要上Multi-Agent,结果三个Agent互相等待,响应时间翻了五倍。

还有一个实操要点是Agent的终止条件。Agent不能无限循环下去,必须设置明确的终止条件:任务完成、达到最大步数、超过时间限制、或者遇到无法处理的错误。我通常设置最大步数为10步,超过就返回当前结果并提示用户任务未完成。这个数字可以根据任务复杂度调整,但一定要有。

3.2 LLM的Token机制:Key、Query、Value到底怎么理解

很多人对LLM的token机制理解停留在“按token计费”这个层面,但如果你要优化成本和性能,就必须理解token在模型内部是怎么工作的。我用一个类比来解释:LLM处理token的过程就像你在图书馆找书。

Key(我是谁):每个token都有一个Key向量,代表这个token的“身份”。就像图书馆里每本书都有标签,标签决定了这本书属于哪个类别。在注意力机制中,Key用来判断当前token和其他token的相关性。

Query(我在找什么):每个token还有一个Query向量,代表这个token“想要找什么信息”。就像你去图书馆找书,你心里有一个需求,这个需求决定了你会去哪个书架找。Query用来和Key做匹配,计算注意力权重。

Value(我能提供什么):每个token还有一个Value向量,代表这个token“能提供什么信息”。就像每本书的内容,当你找到匹配的书后,你真正获取的是书里的内容。Value就是注意力权重加权后的信息。

理解了这个机制,你就能明白为什么长上下文会导致性能下降:token越多,Key和Query的匹配计算量越大,注意力越分散。也能明白为什么prompt的写法会影响输出质量:清晰的Query能让模型更准确地找到相关的Key。实操中,我建议把最重要的信息放在prompt的开头和结尾,因为模型对这两个位置的注意力权重更高。

3.3 MCP协议接入的完整流程与避坑指南

MCP协议的接入流程可以分成四步:工具发现、工具描述、工具调用、结果处理。每一步都有坑,我逐一说明。

工具发现阶段,Agent需要知道有哪些MCP Server可用。MCP支持两种发现方式:静态配置和动态发现。静态配置就是在配置文件里写死MCP Server的地址,动态发现是通过MCP Registry查询。我建议生产环境用静态配置,因为动态发现会引入不确定性,而且Registry的可用性无法保证。

工具描述阶段,MCP Server会返回工具的schema,包括工具名称、描述、参数定义。这里最大的坑是描述质量。我见过一个MCP工具的描述只写了“查询数据”四个字,Agent根本不知道这个工具能查什么数据、参数怎么传。所以接入之前一定要检查工具描述,不清晰的要么自己补文档,要么换工具。

工具调用阶段,Agent根据schema生成调用参数,发送给MCP Server。这里的坑是参数校验。有些MCP Server不做参数校验,传错了也返回成功,但结果是错的。我建议在能力层做一层参数校验,确保参数类型、范围、必填项都符合schema定义。

结果处理阶段,MCP Server返回结果,Agent解析后继续推理。这里的坑是错误处理。有些MCP Server出错时返回的信息对Agent毫无帮助,比如只返回“Error”。我建议在能力层做错误包装,把错误信息转换成Agent能理解的格式,比如“查询失败,原因是数据库连接超时,建议稍后重试”。

3.4 上下文窗口管理:让Agent记住该记住的

上下文窗口管理是AI应用架构中最考验工程能力的部分。LLM的上下文窗口是有限的,但Agent需要记住的东西是无限的。怎么在有限的空间里装下最重要的信息,直接决定了Agent的表现。

我的做法是分层管理:系统提示词占10%,短期记忆占30%,中期记忆占30%,长期记忆占30%。系统提示词定义Agent的角色和能力边界,短期记忆存最近3-5轮对话,中期记忆存关键的工具调用结果和中间状态,长期记忆通过向量检索按需注入。

短期记忆的管理比较简单,就是滑动窗口,新的进来旧的出去。但要注意,不是所有旧对话都可以丢,有些关键信息需要保留。我的做法是给每轮对话打标签,标记为“关键”的对话会进入中期记忆,不会被滑动窗口淘汰。

中期记忆的管理需要做摘要。我通常用一个小模型对工具调用结果做摘要,保留关键信息,丢弃冗余内容。摘要的长度控制在200字以内,确保不会占用太多上下文空间。

长期记忆的管理需要做检索。用户偏好、领域知识、历史案例这些信息存在向量数据库里,每次请求时根据当前任务检索最相关的几条注入上下文。检索的top-k我通常设为3-5条,太多会稀释注意力,太少可能漏掉关键信息。

3.5 并发处理:AI Agent怎么扛住高并发

AI Agent的并发处理和传统Web应用完全不同。传统应用的瓶颈通常在数据库,AI应用的瓶颈在LLM调用。LLM调用是IO密集型的,而且延迟高、有速率限制。所以AI Agent的并发架构要围绕“异步”和“排队”来设计。

异步方面,所有LLM调用和工具调用都应该是异步的。Agent的推理循环用async/await实现,不要用同步阻塞。我见过一个项目用同步方式调LLM,并发量一上来线程池就满了,整个服务卡死。

排队方面,LLM调用要有队列和限流。每个模型有速率限制,超过限制会被拒绝。所以要在能力层做一个请求队列,控制并发数,超过限制的请求排队等待。队列要有优先级,重要任务优先处理,普通任务排队。

缓存方面,相同的请求可以缓存结果。比如用户问同样的问题,不需要每次都调LLM。我通常用语义缓存,把相似的问题映射到同一个缓存条目。缓存命中率能做到30%左右,能显著降低成本和延迟。

降级方面,高峰期要有降级策略。比如把大模型降级到小模型,把复杂Agent降级到简单Agent,把实时响应降级到异步响应。降级策略要提前配置好,不要等到系统扛不住了才临时想办法。

4. 实操过程与核心环节实现

4.1 从零搭建一个AI应用的最小可行架构

我以一个文档问答Agent为例,展示从零搭建AI应用的最小可行架构。这个Agent能回答用户关于内部文档的问题,支持多轮对话,能调用检索工具。

第一步是定义Agent的角色和能力。系统提示词这样写:

SYSTEM_PROMPT = """ 你是一个文档问答助手,负责回答用户关于内部文档的问题。 你可以调用以下工具: - search_docs: 根据关键词检索文档,参数为query(字符串) - get_doc_detail: 获取文档详情,参数为doc_id(字符串) 回答要求: 1. 先检索再回答,不要凭记忆回答 2. 引用文档时注明来源 3. 如果检索不到相关信息,如实告知用户 """

第二步是实现Agent的推理循环。用ReAct模式,推理-行动-观察循环:

async def agent_loop(user_input, max_steps=10): messages = [{"role": "system", "content": SYSTEM_PROMPT}] messages.append({"role": "user", "content": user_input}) for step in range(max_steps): response = await llm_call(messages) if response.has_tool_call: tool_result = await execute_tool(response.tool_call) messages.append({"role": "assistant", "content": response.content}) messages.append({"role": "tool", "content": tool_result}) else: return response.content return "任务未完成,请尝试简化问题"

第三步是接入MCP工具。配置MCP Server地址,发现工具,注册到能力层:

mcp_config = { "servers": [ {"name": "doc_server", "url": "http://localhost:8080/mcp"} ] } async def init_mcp_tools(): tools = [] for server in mcp_config["servers"]: server_tools = await mcp_discover(server["url"]) tools.extend(server_tools) return tools

第四步是加治理层。输入过滤、输出过滤、token预算、链路追踪:

async def safe_llm_call(messages, budget=10000): # 输入过滤 messages = filter_input(messages) # token预算检查 estimated_tokens = estimate_tokens(messages) if estimated_tokens > budget: raise BudgetExceededError() # 调用LLM response = await llm_call(messages) # 输出过滤 response = filter_output(response) # 记录用量 record_usage(estimated_tokens, response.tokens) return response

这套最小可行架构大概200行代码,能跑通文档问答的核心流程。但要注意,这是最小可行版本,生产环境还需要加缓存、队列、降级、监控等。

4.2 参数计算:Token预算怎么估才准

Token预算估算是AI应用成本控制的核心。估不准,要么浪费钱,要么任务跑不完。我总结了一个估算公式:

总token = 系统提示词token + 对话历史token + 工具描述token + 工具结果token + 输出token

系统提示词token:通常200-500 token,取决于角色定义的复杂度。

对话历史token:每轮对话约100-300 token,按平均200算,10轮就是2000 token。

工具描述token:每个工具约50-100 token,10个工具就是500-1000 token。

工具结果token:每次工具调用返回约200-500 token,按平均300算,5次调用就是1500 token。

输出token:每次LLM输出约100-500 token,按平均300算,10步就是3000 token。

总计:500 + 2000 + 1000 + 1500 + 3000 = 8000 token。这是单次任务的估算,实际会有波动,建议预留20%的buffer,即10000 token。

这个估算方法我实测下来比较准,误差在15%以内。但要注意,不同模型的token计算方式不同,中文和英文的token比例也不同。中文大约1个字等于1.5-2个token,英文大约1个单词等于1.3个token。估算时要根据实际语言调整。

4.3 实操现场:一次Agent调试的完整记录

我记录了一次真实的Agent调试过程,展示怎么定位和解决问题。

问题现象:Agent在回答“公司年假政策是什么”时,检索到了正确的文档,但回答时引用了错误的条款。

排查步骤:

第一步,检查检索结果。打印search_docs的返回,发现检索到了三篇文档,其中一篇是年假政策,另外两篇是请假流程和考勤制度。Agent选择了请假流程文档作为回答依据。

第二步,检查Agent的推理过程。打印LLM的中间输出,发现Agent在推理时把“年假”和“请假”混淆了,认为请假流程文档也包含年假信息。

第三步,检查系统提示词。发现提示词里没有明确要求Agent区分相似概念,导致Agent在检索结果有干扰时选错了文档。

解决方案:在系统提示词里加一条规则:“如果检索结果包含多个相关文档,优先选择标题与问题最匹配的文档。如果无法确定,向用户确认。”同时,在检索工具里加一个相关性排序,把标题匹配度高的文档排在前面。

修改后重新测试,Agent正确选择了年假政策文档,回答准确。

这次调试给我的经验是:Agent的错误往往不是模型能力问题,而是提示词和工具设计问题。排查时要先看输入(检索结果),再看推理(中间输出),最后看提示词。大部分问题都能通过优化提示词和工具设计解决。

4.4 性能优化:把响应时间从8秒降到2秒

AI应用的响应时间直接影响用户体验。我做过一个优化,把文档问答Agent的响应时间从8秒降到了2秒。优化手段主要有四个:

第一,并行化工具调用。原来Agent是串行调用工具,先检索再获取详情,两次调用加起来3秒。改成并行后,同时发起两个调用,耗时降到1.5秒。

第二,缓存检索结果。相同的查询直接返回缓存,命中率约30%,平均节省1秒。

第三,流式输出。LLM的输出改成流式,用户看到第一个字的时间从3秒降到0.5秒,感知延迟大幅降低。

第四,小模型预处理。用一个小模型做意图识别和查询改写,把大模型的调用次数从平均3次降到1.5次,节省2秒。

这四个手段叠加,响应时间从8秒降到了2秒。但要注意,优化是有代价的:并行化增加了系统复杂度,缓存需要处理一致性问题,流式输出需要前端配合,小模型预处理增加了维护成本。所以优化要循序渐进,先做收益高、成本低的,比如缓存和流式输出。

5. 常见问题与排查技巧实录

5.1 Agent不调用工具怎么办

这是最常见的问题之一。Agent明明有工具可用,但就是不用,直接凭记忆回答。原因通常有三个:工具描述不清晰、系统提示词没有强调工具使用、模型能力不足。

排查方法:先检查工具描述,确保描述清晰说明了工具的用途和参数。然后在系统提示词里明确要求“必须先调用工具再回答”。如果还不行,换一个能力更强的模型试试。我实测下来,Claude和GPT-4系列在工具调用上比小模型稳定得多。

还有一个技巧是在系统提示词里加示例,展示“用户问X,Agent调用Y工具,返回Z结果”的完整流程。Few-shot示例能显著提升Agent的工具调用率。

5.2 Token消耗失控怎么排查

Token消耗失控通常表现为成本突然上升,或者任务频繁超预算。排查思路是:先定位是哪个环节消耗大,再看是输入还是输出。

我通常用链路追踪工具,记录每次LLM调用的输入token和输出token。如果输入token大,检查是不是对话历史太长、工具描述太多、或者检索结果注入太多。如果输出token大,检查是不是Agent在循环推理、或者输出格式太啰嗦。

常见的优化手段:压缩对话历史、精简工具描述、限制检索结果数量、要求Agent输出简洁。我做过一个优化,把工具描述从500 token压缩到200 token,token消耗直接降了15%。

5.3 MCP工具调用失败怎么排查

MCP工具调用失败的原因很多,我整理了一个排查清单:

现象可能原因排查方法
工具发现失败MCP Server地址错误检查配置文件的URL
工具调用超时MCP Server响应慢检查Server日志和网络
参数校验失败参数格式不符合schema打印schema和实际参数对比
返回结果解析失败返回格式不符合预期打印原始返回内容
权限拒绝工具权限未配置检查MCP Server的权限配置

排查时建议从外到内:先确认MCP Server可达,再确认工具可发现,再确认参数正确,最后确认返回可解析。大部分问题出在参数和返回格式上。

5.4 Agent输出质量不稳定怎么优化

Agent输出质量不稳定是LLM应用的通病。同样的输入,有时候回答很好,有时候答非所问。原因通常是模型的不确定性、提示词不够明确、或者上下文有干扰。

优化手段:第一,降低temperature,从0.7降到0.3,输出更稳定。第二,优化提示词,把要求写得更具体,比如“回答控制在100字以内,分三点说明”。第三,清理上下文,去掉无关的对话历史和工具结果。第四,加输出校验,用规则或小模型检查输出是否符合要求,不符合就重试。

我实测下来,这四招组合使用,输出质量的稳定性能从70%提升到90%以上。但要注意,降低temperature会牺牲一些创造性,适合问答类任务,不适合创意类任务。

5.5 避坑技巧:我踩过的五个坑

第一个坑:把LLM当数据库用。LLM的知识是训练时固定的,不能实时更新。需要实时数据的场景,必须接检索工具。

第二个坑:Agent设计得太复杂。Multi-Agent看起来很酷,但调试成本极高。能用单Agent解决的,不要上Multi-Agent。

第三个坑:忽略token成本。Demo阶段token消耗少,感觉不到。上生产后用户量一上来,成本会吓你一跳。架构设计阶段就要做预算和监控。

第四个坑:不做错误处理。LLM调用会失败,工具调用会失败,MCP Server会挂。每个环节都要有错误处理和降级策略。

第五个坑:不做效果评估。Agent上线后不评估效果,不知道输出质量有没有下降。要定期用LLM as Judge或人工评估,确保质量稳定。

6. 架构设计的扩展方向与个人体会

这套架构不是终点,而是一个起点。随着业务发展,你可以从几个方向扩展。一是加评估层,用LLM as Judge自动评估Agent的输出质量,形成闭环优化。二是加学习层,把用户的反馈和修正记录下来,用于微调模型或优化提示词。三是加多模态能力,支持图片、音频、视频的输入输出,扩展应用场景。四是加边缘部署,把部分推理放到端侧,降低延迟和成本。

我个人在实际操作中的体会是:AI应用架构设计最难的从来不是技术选型,而是对业务需求的理解。你得先想清楚这个AI应用到底要解决什么问题,用户是谁,场景是什么,然后才能决定用什么模型、什么Agent模式、什么工具。技术是手段,不是目的。我见过太多团队为了用新技术而用新技术,最后做出来的东西没人用。

还有一个体会是:架构要留有余地。AI技术变化太快,今天的最佳实践明天可能就过时了。所以架构要模块化,每个层之间解耦,换模型、换工具、换Agent模式时,只改局部,不动全局。这样你才能跟上技术的变化,而不是被技术拖着走。

最后分享一个小技巧:画架构图的时候,不要只画组件,还要画数据流和控制流。组件图告诉你系统有什么,数据流图告诉你系统怎么运转。两张图结合起来,才能看清架构的全貌。我习惯用不同的颜色标注同步调用和异步调用,用不同的线型标注数据流和控制流,这样一眼就能看出系统的瓶颈在哪里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询