ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

架构设计入门:一文理清业务、数据、技术与微服务的关系

架构设计入门:一文理清业务、数据、技术与微服务的关系 把架构这件事讲清楚说实话不容易。我自己刚入行那几年参加技术会议最怕听到的词就是“架构”——业务架构、数据架构、技术架构、应用架构、微服务架构、云原生架构......每个词都认识串在一起就不知道在说什么。更尴尬的是老板让画一张架构图我画了三天画出来的东西自己都讲不明白。后来做过的项目多了才慢慢摸出点门道。所谓的架构本质上就回答一个问题一个系统应该由哪些部分组成这些部分之间怎么配合才能既满足现在的需求又扛得住未来的变化。这篇文章我想把业务架构、数据架构、技术架构这些概念放在一条线上去讲理清它们之间的关系和分工再结合最新的微服务、云原生这些热点聊一聊真正的架构设计是怎么一步步推导出来的。不管你是刚转行做开发的、被拉去写架构文档的、还是带团队要做技术选型的这篇文章应该能帮你把脑子里那团乱麻理顺。1. 一堆“架构”名词到底谁管谁先说一个我在各种场合反复遇到的现象你问一个程序员“你们系统是什么架构”他大概率会回答“微服务架构”你问一个产品经理同样的问题他大概率会说“我们的业务架构是按用户、订单、营销三条线走的”你再问运维他又会告诉你“我们部署在K8s上用的是云原生架构”。三个人说的都是“架构”但完全不在一个层面上。这就是架构这个词最让人头疼的地方——它描述的是系统的不同视角而不是不同系统。1.1 业务架构回答“我们做什么生意”业务架构是所有架构的起点。它描述的是一个组织怎么运转、提供什么价值、由哪些业务板块组成、每个板块之间是什么关系。举个例子一家电商公司业务架构至少要画清楚前端的用户运营、商品展示、下单交易后端的仓储管理、物流配送、售后服务以及支撑这一切的支付结算、风控审核。每个业务域下还有子域订单域里有下单、拆单、改价、退款每个子域都有自己明确的职责边界。这个层面不涉及任何技术纯粹是业务逻辑的梳理。但它的重要性在于后面所有的系统设计都要服务于这张业务地图。我见过不少公司在这块偷懒业务架构没想清楚就开始建系统结果做出来的东西业务部门不认技术部门反复返工根源都在于一开始的业务边界就划错了。1.2 应用架构回答“我们用哪些系统干活”业务梳理清楚了接下里要决定的是每个业务功能由哪个系统来实现。这就是应用架构的范畴。它描述的是一个组织有哪些应用系统每个系统承担什么职责系统之间怎么调用。还是拿电商举例。你可能有独立的商品中心系统、订单中心系统、库存系统、支付系统、风控系统、会员系统这些都是一个个可独立部署的应用。应用架构要解决的问题就是订单系统下单的时候要不要同步调用库存系统扣库存还是通过消息队列异步通知用户下单之后会员系统的积分是同步加还是异步加这里就引出了一个热门话题——微服务架构。微服务本质上是应用架构的一种具体风格它把传统的单体应用按照业务能力拆成一个个小而独立的服务。比如把原来的“大订单系统”拆成订单服务、支付服务、物流服务。但你需要清醒地认识到微服务不是应用架构的唯一解更不是默认解。业务规模没到那个量级拆微服务就是给自己找麻烦。1.3 数据架构回答“数据在系统里怎么流动和存储”数据架构描述的是数据在整个组织里怎么组织、怎么存储、怎么流转。它的核心是打破“每个系统自己管自己的数据”这种割裂状态。数据架构要做的事情包括定义统一的数据模型比如用户ID在全公司范围是什么样的数据结构、确定数据存储方案交易数据放MySQL还是分布式数据库、日志数据放ES还是ClickHouse、规划数据流向业务系统产生的数据怎么同步到数据仓库再从数据仓库流向BI报表或机器学习平台。这层架构最容易犯的错就是“先有系统后有数据规划”。很多公司系统上了好几个数据各存各的等要做数据分析的时候发现CRM里的客户叫“client_name”订单系统里的同一个字段叫“customer”两边的数据根本关联不起来。这就是数据架构缺位的典型症状。1.4 技术架构回答“用什么技术底座来支撑一切”技术架构是最底层、也最容易被误解的一层。很多人一说技术架构就想到用哪个框架、哪个中间件其实技术架构的关注点是支撑上面所有应用和数据层的通用技术平台与基础设施。包括网络怎么规划、服务器怎么部署、用什么容器编排平台、监控日志体系怎么做、消息队列选型、缓存选型、数据库选型以及安全性、可用性、灾备怎么保障。这一层的热点词是最密集的分布式架构、云原生、Kubernetes、容器化、Serverless、Service Mesh......它们的共同逻辑是让上层系统不用关心“跑在哪台机器上”这个问题把基础设施变成一种按需取用的能力。我遇到过一个很典型的案例。一家传统公司的系统要做升级业务架构梳理完之后技术负责人上来就说“我们要上K8s、要改微服务、要用分布式数据库”。我问他为什么他说“云原生了嘛大家都这么干”。这就是典型的跳过业务和应用架构直接谈技术架构——方向都还没定就讨论开什么车。2. 四层架构的协同关系从战略目标推导到技术落地把这四种架构放在一张图里看它们其实是自上而下的推导关系战略目标定义业务架构业务架构驱动应用架构和数据架构应用和数据架构共同决定技术架构。2.1 从战略到业务的映射所有架构工作的起点是企业的战略目标。比如一家零售企业定了一个战略目标未来两年线上销售占比要从20%提升到50%。这个目标映射到业务架构上意味着线上业务从“尝试性业务”变成“核心业务”。那线上业务域的组织方式、流程设计就要重做不能再用以前那种“官网商城挂在IT部门下”的模式而是要形成独立的线上运营、线上商品、线上履约等业务子域。这一步的工作通常由业务架构师和业务部门一起完成产出物是业务全景图、业务流程清单、业务能力地图。这些东西看不懂技术没关系但一定要能讲清楚“我们靠什么赚钱、核心能力在哪里、哪些活得外包”。2.2 从业务能力推导出应用与数据边界业务图有了接下来技术人就可以介入了。应用架构师要把每个业务能力映射为一个或多个应用服务的职责数据架构师要把每个业务活动中产生的数据定义清楚。这一步有一个特别关键的产出物——领域模型。它是业务概念和数据结构的结合是业务语言和技术语言的翻译器。拿“订单”来说业务人员理解的订单可能是一个“单据”但在领域模型里订单会被拆解成订单头、订单项、价格快照、收件人信息、状态机流转等等。只有把这一步做扎实后面的数据架构才不会跑偏。应用架构和数据架构在这一步是强耦合的。每个服务该不该有自己的数据库哪些数据可以允许冗余哪些数据必须实时一致、哪些可以最终一致这些决策本质上是业务需求的映射不是技术偏好。2.3 技术架构为上层提供有限选择技术架构在这一串推导链里最核心的任务不是“用什么新技术”而是**“支撑上层架构需求可选的技术组合”**。正确的顺序是业务需要实时的库存查询应用层就要设计一个高频读的库存服务数据层就要考虑读写分离或缓存方案最后才落到技术选型上——用Redis还是用本地缓存用MySQL读写分离还是上分布式数据库。技术架构做的事是把这一串问题收敛成几套经过验证的标准化方案。比如这套系统统一用Java Spring Boot微服务之间的通信统一走gRPC数据存储统一用MySQL Redis日志统一走ELK。有了这些标准开发团队就不用每次做选型决策效率会高很多。这里我想多说一句技术架构的价值不在于“炫技”而在于做减法。我见过最痛苦的项目不是技术选型太保守而是团队里每个人都有自己的偏好有人要用PostgreSQL、有人坚持用TiDB、有人觉得MongoDB才是未来。技术架构的任务就是终结讨论把选择收敛到最合适的范围。3. 热搜里的那些架构名词真实含义和适用边界讲完四层架构的协同我们再来看热搜词里频繁出现的那堆名词分布式架构、微服务架构、云原生架构、Transformer架构、ARM架构......它们分别属于哪个层面的概念适用场景是什么很多人把这些词混在一起用聊了半天才发现大家说的根本不是一回事。3.1 分布式架构一种解决“单机扛不住”的技术范式分布式架构解决的是单台机器的算力和存储瓶颈问题。当一个系统的计算量或数据量超过单机承载上限就得把任务拆到多台机器上并行处理同时解决好网络通信、数据一致性、节点故障这些新问题。要注意分布式架构不一定是微服务。一个大型的批处理系统比如对账系统可能是单一应用但部署在多台机器上并行跑这也是分布式。微服务强调的则是“按业务能力拆分应用”可以说微服务是分布式的一种组织形态但分布式不等于微服务。3.2 微服务架构拆分的艺术与代价微服务是应用架构层面的演进。它的核心优势是每个服务可以独立开发、独立部署、独立扩缩容团队之间耦合降低。但它带来的代价也异常真实——分布式事务处理、跨服务调用链追踪、服务治理、配置管理、测试复杂度每一项都是实打实的成本。我给团队的建议一直是不要在系统第一个版本就用微服务。先做模块化单体把业务边界在代码层面划分清晰等流量和团队规模确实到了需要独立部署的程度再考虑拆分。我见过最荒唐的项目是三个人的团队搭了十几个微服务结果大部分时间都花在解决服务间通信和环境问题上业务代码根本没法快速迭代。3.3 云原生架构基础设施的“按需取用”云原生是技术架构层面的理念。它讲的不是某种具体技术而是“应用从出生起就为云而设计充分利用云的能力”。容器化Docker、编排调度K8s、微服务、DevOps、声明式API这些工具组合在一起构成了云原生落地的主流路径。云原生最核心的思维转变是把服务器当作“牲畜”而不是“宠物”。宠物死了你会难过牲畜死了你换一头就行。云原生要求应用本身无状态化任何一个实例挂掉都能被自动调度到新的实例上这种设计让扩展性、容灾能力、发布效率都有了质的提升。3.4 指令集架构、大模型架构等“特定领域架构”除了前面这些企业级架构概念热搜词里还有一类特定领域内的架构含义比如ARM架构、x86架构这是芯片层面的指令集架构描述了CPU能执行哪些底层指令再比如Transformer架构是深度学习模型的结构设计还有RAG架构、Agent架构是大模型应用系统的组织方式。这些“架构”和企业IT里面说的架构不是一个维度的概念但它们本质上遵循同一个逻辑为了达成某个特定目标把不同组件按照一定规则组合在一起并定义它们之间的交互方式。理解了这个共同点以后听到任何“XX架构”都不会再慌——先问一句它描述的是什么范围解决什么问题内部有哪些核心组件组件之间怎么协作这三个问题一问再陌生的架构名词也能快速拆解。4. 实例走一遍从业务目标推导出系统架构理论讲多了容易飘我拿一个具体的业务场景从头到尾推一遍你看完就会明白这套方法论怎么落地。假设我们是一个做线下连锁餐饮的品牌最近要做一个会员积分系统。业务目标很简单顾客消费后获得积分积分可以兑换优惠券积分兑换规则可以灵活配置。4.1 业务架构层理清会员积分的完整链路先画业务全景图。这个系统涉及的环节包括消费积分产生、积分账户管理、积分兑换、优惠券发放。看起来很简单对吧但你往下拆分问题就来了积分是下单时就确定还是支付完成才确定退单的时候积分要不要扣回兑换的优惠券如果有使用门槛是否在兑换时就要校验这些规则每一项都是独立的业务决策。业务架构师这时要和各种角色开会把规则一条条对齐形成一份业务规则说明书。比如积分在支付完成后的次日生效退单按原路扣回当月有效还是永久有效每种兑换方式有什么前置条件。这份文档不需要技术人看懂代码但要能回答所有业务边界问题。4.2 应用架构与数据架构层拆服务、定数据归属业务规则理清楚之后应用架构就要回答要不要拆成多个服务对于这个体量的系统我的建议是先做成一个模块化单体但把领域边界划清楚。代码里分成积分核心域、会员域、营销域用明确的接口协议隔离。为什么不是微服务因为没有独立扩展和独立部署的强烈需要过早拆分只会让开发和调试成本翻倍。数据架构上积分账户的余额是关键数据必须有强一致的保障。积分流水也一样不能被“最终一致”糊弄。这一块锁死要用支持事务的关系型数据库。兑换产生的优惠券可以走异步发放即使有几分钟延迟用户体验也不会下降。这样一分析数据存储和一致性的方案就清楚了。4.3 技术架构层选型跟着需求走最后落到具体技术上。这套系统预估日活跃用户是十万级积分交易量是每天百万级。这个量级下单机MySQL就能抗住业务数据Redis做热点账户的缓存消息中间件处理积分发放后触发的优惠券异步生成服务用K8s部署两个实例做到高可用线性扩展靠水平扩容。有人可能会问要不要上分布式数据库要不要上微服务要不要搞Serverless答案很简单现阶段不需要未来业务规模涨十倍之后再评估。架构设计的核心能力不是选择多高端的方案而是选择当前阶段最匹配的方案同时为未来演进留出清晰的路。5. 提升架构认知的现实路径从画图到做判断很多人问过我怎么才能提升架构能力我的答案可能和你想的不太一样——先学会读图再学会画图最后学会做判断。5.1 画好一张架构图的关键不是美观而是分层和定位每次评审架构设计方案我看到最多的图就是一张大方块套着无数小方块线连得密密麻麻根本分不清谁依赖谁。这层认知混乱的本质是把不同层级的概念画到了一张图里。好的架构图一定是有层次的。第一层画业务架构描述业务板块和流程不出现任何系统名称。第二层画应用架构描述系统模块之间的调用关系。第三层画部署架构描述每个模块跑在哪台机器上。画完三层图之后对照检查每一层之间的映射关系你会发现大量原先没想清楚的问题。5.2 架构设计的核心能力是“权衡”而非“追求最新”架构决策没有绝对的对错只有基于当前业务阶段、团队水平、资源约束下的权衡。选微服务意味着团队要有足够的DevOps能力和运维精力选存储过程强一致数据库意味着要牺牲部分扩展性选云原生全套方案意味着学习成本和组织变革成本。我个人的习惯是把每个架构决策的收益、成本、风险列成一张表评审的时候摆到桌面上逐项确认。大部分架构决策争议本质上不是技术问题而是大家对“什么更重要”的判断不一致。把它摊开指导原则对齐了方案自然就出来了。5.3 架构师不是“掉书袋”要能回答“为什么”判断一个人是否真懂架构一个很简单的测试问他方案里每一个关键选择背后的“为什么”。为什么这里用异步不用同步为什么这里有缓存不直接查库为什么这里有消息队列不直接调API凡是回答不出“为什么”的都是在套模板。真正的架构判断永远是从业务的约束条件出发倒推出技术的应对方式。掌握前面讲的“业务架构定义问题应用架构和数据架构设计方案技术架构提供支撑”这条逻辑链你也能建立自己的判断体系。架构这个词被说得玄乎但拆开看核心就是一套做分析和做决策的方法。你不需要一下子成为什么架构大师只要面对任何一个新系统、新名词都先用“什么范围、什么问题、怎么协作”三个问题去拆解坚持一段时间再回头看这些概念你会发现自己已经能把它们串起来了。
返回列表