[{"data":1,"prerenderedAt":2574},["ShallowReactive",2],{"content-/topics/engineering/microservice-boundary-splitting-guide":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":5,"tags":11,"author":17,"featured":18,"series":19,"seriesOrder":20,"readingTime":21,"image":22,"body":23,"_type":2568,"_id":2569,"_source":2570,"_file":2571,"_stem":2572,"_extension":2573},"/topics/engineering/microservice-boundary-splitting-guide","engineering",false,"","微服务化完全指南：按什么维度拆分服务，才不会越拆越乱","微服务不是把单体切碎那么简单。本文从真实业务场景出发，讲清应该按业务能力、变更频率、数据一致性、团队边界还是扩展压力拆服务，并给出反例、决策树、迁移步骤与成本收益判断。","2026-03-08",[12,13,14,15,16],"微服务","系统设计","服务拆分","架构演进","团队协作","小明",true,"large-scale-application-architecture",5,18,"/images/articles/microservice-boundary-splitting-guide-cover.jpg",{"type":24,"children":25,"toc":2512},"root",[26,34,40,45,70,75,98,103,112,117,129,134,139,168,173,177,184,189,212,217,222,257,262,285,290,308,315,327,332,355,360,371,374,380,386,391,514,520,525,530,537,542,548,553,559,564,587,592,598,603,611,616,627,632,635,641,647,652,690,695,700,706,711,716,739,744,749,760,765,771,776,780,798,803,821,826,832,837,842,865,870,883,888,894,899,904,912,917,930,940,943,949,955,965,971,976,982,987,993,998,1003,1021,1026,1044,1050,1055,1060,1093,1098,1103,1121,1124,1130,1136,1141,1146,1152,1157,1162,1168,1173,1179,1184,1189,1195,1200,1205,1233,1238,1241,1247,1252,1258,1263,1286,1291,1297,1302,1325,1330,1336,1341,1346,1352,1357,1362,1656,1661,1664,1670,1675,1810,1815,1821,1901,1904,1910,1915,1926,1931,1964,1969,1974,2002,2007,2015,2018,2024,2029,2062,2067,2095,2101,2215,2220,2231,2234,2240,2245,2289,2294,2334,2339,2379,2384,2424,2427,2432,2437,2480,2485,2493,2498,2506],{"type":27,"tag":28,"props":29,"children":31},"element","h1",{"id":30},"微服务化完全指南按什么维度拆分服务才不会越拆越乱",[32],{"type":33,"value":8},"text",{"type":27,"tag":35,"props":36,"children":37},"p",{},[38],{"type":33,"value":39},"很多团队谈微服务时，气氛很像装修前看样板房。",{"type":27,"tag":35,"props":41,"children":42},{},[43],{"type":33,"value":44},"样板房里的世界特别美：",{"type":27,"tag":46,"props":47,"children":48},"ul",{},[49,55,60,65],{"type":27,"tag":50,"props":51,"children":52},"li",{},[53],{"type":33,"value":54},"每个服务都职责清晰",{"type":27,"tag":50,"props":56,"children":57},{},[58],{"type":33,"value":59},"团队自治，独立发布",{"type":27,"tag":50,"props":61,"children":62},{},[63],{"type":33,"value":64},"某个服务挂了，别的还能继续跑",{"type":27,"tag":50,"props":66,"children":67},{},[68],{"type":33,"value":69},"技术栈自由，扩容灵活",{"type":27,"tag":35,"props":71,"children":72},{},[73],{"type":33,"value":74},"真正动手拆的时候，现实通常是另一副表情：",{"type":27,"tag":46,"props":76,"children":77},{},[78,83,88,93],{"type":27,"tag":50,"props":79,"children":80},{},[81],{"type":33,"value":82},"服务是拆了，但接口比以前复杂三倍",{"type":27,"tag":50,"props":84,"children":85},{},[86],{"type":33,"value":87},"本来一个事务能解决的问题，变成了补偿、重试、幂等、对账一整套",{"type":27,"tag":50,"props":89,"children":90},{},[91],{"type":33,"value":92},"排障从“看一个日志”变成“追八个链路”",{"type":27,"tag":50,"props":94,"children":95},{},[96],{"type":33,"value":97},"团队嘴上说自治，实际上谁也说不清哪个字段该谁负责",{"type":27,"tag":35,"props":99,"children":100},{},[101],{"type":33,"value":102},"于是项目进入一个很尴尬的阶段：",{"type":27,"tag":104,"props":105,"children":106},"blockquote",{},[107],{"type":27,"tag":35,"props":108,"children":109},{},[110],{"type":33,"value":111},"单体已经嫌大，微服务又拆得很痛苦。",{"type":27,"tag":35,"props":113,"children":114},{},[115],{"type":33,"value":116},"这里最核心的问题，不是“要不要微服务”，而是：",{"type":27,"tag":104,"props":118,"children":119},{},[120],{"type":27,"tag":35,"props":121,"children":122},{},[123],{"type":27,"tag":124,"props":125,"children":126},"strong",{},[127],{"type":33,"value":128},"到底按什么维度拆，才不会把一个可维护的问题，拆成十个难维护的问题？",{"type":27,"tag":35,"props":130,"children":131},{},[132],{"type":33,"value":133},"这篇文章要解决的，就是这个问题。",{"type":27,"tag":35,"props":135,"children":136},{},[137],{"type":33,"value":138},"我们不讲抽象口号，直接围绕真实工程决策，把服务拆分这件事讲透：",{"type":27,"tag":140,"props":141,"children":142},"ol",{},[143,148,153,158,163],{"type":27,"tag":50,"props":144,"children":145},{},[146],{"type":33,"value":147},"什么时候应该拆，什么时候不该拆",{"type":27,"tag":50,"props":149,"children":150},{},[151],{"type":33,"value":152},"应该按业务域、数据、团队、流量还是发布节奏拆",{"type":27,"tag":50,"props":154,"children":155},{},[156],{"type":33,"value":157},"哪些边界看起来合理，其实会制造长期耦合",{"type":27,"tag":50,"props":159,"children":160},{},[161],{"type":33,"value":162},"从单体到服务化，怎样一步步演进而不是一次性爆破",{"type":27,"tag":50,"props":164,"children":165},{},[166],{"type":33,"value":167},"拆完以后，怎么判断你是真的变轻了，还是只是把复杂度挪了位置",{"type":27,"tag":35,"props":169,"children":170},{},[171],{"type":33,"value":172},"如果你正准备把一个越长越重的系统往服务化方向推，这篇会比“微服务优缺点”更有用。",{"type":27,"tag":174,"props":175,"children":176},"hr",{},[],{"type":27,"tag":178,"props":179,"children":181},"h2",{"id":180},"一先讲结论服务不是按代码目录拆而是按变化和责任拆",[182],{"type":33,"value":183},"一、先讲结论：服务不是按代码目录拆，而是按变化和责任拆",{"type":27,"tag":35,"props":185,"children":186},{},[187],{"type":33,"value":188},"很多团队第一次拆服务，习惯从代码结构出发：",{"type":27,"tag":46,"props":190,"children":191},{},[192,197,202,207],{"type":27,"tag":50,"props":193,"children":194},{},[195],{"type":33,"value":196},"用户模块一个服务",{"type":27,"tag":50,"props":198,"children":199},{},[200],{"type":33,"value":201},"订单模块一个服务",{"type":27,"tag":50,"props":203,"children":204},{},[205],{"type":33,"value":206},"商品模块一个服务",{"type":27,"tag":50,"props":208,"children":209},{},[210],{"type":33,"value":211},"支付模块一个服务",{"type":27,"tag":35,"props":213,"children":214},{},[215],{"type":33,"value":216},"这种拆法有时候对，但本质上只是“把目录变成进程”。",{"type":27,"tag":35,"props":218,"children":219},{},[220],{"type":33,"value":221},"真正稳定的服务边界，不是来自文件夹，而是来自这四件事：",{"type":27,"tag":140,"props":223,"children":224},{},[225,233,241,249],{"type":27,"tag":50,"props":226,"children":227},{},[228],{"type":27,"tag":124,"props":229,"children":230},{},[231],{"type":33,"value":232},"业务职责是否清晰",{"type":27,"tag":50,"props":234,"children":235},{},[236],{"type":27,"tag":124,"props":237,"children":238},{},[239],{"type":33,"value":240},"变化节奏是否一致",{"type":27,"tag":50,"props":242,"children":243},{},[244],{"type":27,"tag":124,"props":245,"children":246},{},[247],{"type":33,"value":248},"数据一致性要求是否相近",{"type":27,"tag":50,"props":250,"children":251},{},[252],{"type":27,"tag":124,"props":253,"children":254},{},[255],{"type":33,"value":256},"由谁拥有最终决策权",{"type":27,"tag":35,"props":258,"children":259},{},[260],{"type":33,"value":261},"如果这四件事没想清楚，服务拆出来以后就会出现一种经典场景：",{"type":27,"tag":46,"props":263,"children":264},{},[265,270,275,280],{"type":27,"tag":50,"props":266,"children":267},{},[268],{"type":33,"value":269},"A 服务里改一个字段",{"type":27,"tag":50,"props":271,"children":272},{},[273],{"type":33,"value":274},"B 服务要跟着改接口",{"type":27,"tag":50,"props":276,"children":277},{},[278],{"type":33,"value":279},"C 服务的缓存策略也要变",{"type":27,"tag":50,"props":281,"children":282},{},[283],{"type":33,"value":284},"D 服务的埋点和风控规则也要补",{"type":27,"tag":35,"props":286,"children":287},{},[288],{"type":33,"value":289},"最后结果是：",{"type":27,"tag":46,"props":291,"children":292},{},[293,298,303],{"type":27,"tag":50,"props":294,"children":295},{},[296],{"type":33,"value":297},"服务数量变多了",{"type":27,"tag":50,"props":299,"children":300},{},[301],{"type":33,"value":302},"发布协调成本也变多了",{"type":27,"tag":50,"props":304,"children":305},{},[306],{"type":33,"value":307},"你以为获得了自治，实际得到的是跨服务拉群",{"type":27,"tag":309,"props":310,"children":312},"h3",{"id":311},"_11-一个很实用的判断标准",[313],{"type":33,"value":314},"1.1 一个很实用的判断标准",{"type":27,"tag":35,"props":316,"children":317},{},[318,320,325],{"type":33,"value":319},"如果两个模块经常同时改、必须一起发、数据强一致绑定很深，那它们大概率",{"type":27,"tag":124,"props":321,"children":322},{},[323],{"type":33,"value":324},"还不应该分开",{"type":33,"value":326},"。",{"type":27,"tag":35,"props":328,"children":329},{},[330],{"type":33,"value":331},"反过来，如果两个模块：",{"type":27,"tag":46,"props":333,"children":334},{},[335,340,345,350],{"type":27,"tag":50,"props":336,"children":337},{},[338],{"type":33,"value":339},"由不同团队负责",{"type":27,"tag":50,"props":341,"children":342},{},[343],{"type":33,"value":344},"发布频率明显不同",{"type":27,"tag":50,"props":346,"children":347},{},[348],{"type":33,"value":349},"扩容模式完全不同",{"type":27,"tag":50,"props":351,"children":352},{},[353],{"type":33,"value":354},"故障隔离价值很高",{"type":27,"tag":35,"props":356,"children":357},{},[358],{"type":33,"value":359},"那它们更适合成为独立服务。",{"type":27,"tag":35,"props":361,"children":362},{},[363,365,370],{"type":33,"value":364},"服务边界，说到底是",{"type":27,"tag":124,"props":366,"children":367},{},[368],{"type":33,"value":369},"组织边界和变化边界的映射",{"type":33,"value":326},{"type":27,"tag":174,"props":372,"children":373},{},[],{"type":27,"tag":178,"props":375,"children":377},{"id":376},"二什么时候真的该拆什么时候只是技术冲动",[378],{"type":33,"value":379},"二、什么时候真的该拆，什么时候只是技术冲动",{"type":27,"tag":309,"props":381,"children":383},{"id":382},"_21-该拆的常见信号",[384],{"type":33,"value":385},"2.1 该拆的常见信号",{"type":27,"tag":35,"props":387,"children":388},{},[389],{"type":33,"value":390},"下面这些信号，通常说明系统已经接近“拆分收益大于维护成本”的阶段：",{"type":27,"tag":392,"props":393,"children":394},"table",{},[395,419],{"type":27,"tag":396,"props":397,"children":398},"thead",{},[399],{"type":27,"tag":400,"props":401,"children":402},"tr",{},[403,409,414],{"type":27,"tag":404,"props":405,"children":406},"th",{},[407],{"type":33,"value":408},"信号",{"type":27,"tag":404,"props":410,"children":411},{},[412],{"type":33,"value":413},"典型表现",{"type":27,"tag":404,"props":415,"children":416},{},[417],{"type":33,"value":418},"为什么说明该拆",{"type":27,"tag":420,"props":421,"children":422},"tbody",{},[423,442,460,478,496],{"type":27,"tag":400,"props":424,"children":425},{},[426,432,437],{"type":27,"tag":427,"props":428,"children":429},"td",{},[430],{"type":33,"value":431},"发布相互阻塞",{"type":27,"tag":427,"props":433,"children":434},{},[435],{"type":33,"value":436},"一个小改动要等整个系统回归",{"type":27,"tag":427,"props":438,"children":439},{},[440],{"type":33,"value":441},"耦合已经影响交付速度",{"type":27,"tag":400,"props":443,"children":444},{},[445,450,455],{"type":27,"tag":427,"props":446,"children":447},{},[448],{"type":33,"value":449},"扩容模式不同",{"type":27,"tag":427,"props":451,"children":452},{},[453],{"type":33,"value":454},"搜索压力高、订单写入重、用户服务稳定",{"type":27,"tag":427,"props":456,"children":457},{},[458],{"type":33,"value":459},"一套部署规格开始浪费",{"type":27,"tag":400,"props":461,"children":462},{},[463,468,473],{"type":27,"tag":427,"props":464,"children":465},{},[466],{"type":33,"value":467},"故障传播明显",{"type":27,"tag":427,"props":469,"children":470},{},[471],{"type":33,"value":472},"推荐服务抖动把下单链路拖慢",{"type":27,"tag":427,"props":474,"children":475},{},[476],{"type":33,"value":477},"缺少隔离边界",{"type":27,"tag":400,"props":479,"children":480},{},[481,486,491],{"type":27,"tag":427,"props":482,"children":483},{},[484],{"type":33,"value":485},"团队协作冲突多",{"type":27,"tag":427,"props":487,"children":488},{},[489],{"type":33,"value":490},"多团队频繁改同一代码区",{"type":27,"tag":427,"props":492,"children":493},{},[494],{"type":33,"value":495},"所有权不清",{"type":27,"tag":400,"props":497,"children":498},{},[499,504,509],{"type":27,"tag":427,"props":500,"children":501},{},[502],{"type":33,"value":503},"技术约束冲突",{"type":27,"tag":427,"props":505,"children":506},{},[507],{"type":33,"value":508},"有的场景需要高吞吐，有的需要强一致",{"type":27,"tag":427,"props":510,"children":511},{},[512],{"type":33,"value":513},"一种实现方式不再适配全部场景",{"type":27,"tag":309,"props":515,"children":517},{"id":516},"_22-不该拆的常见情况",[518],{"type":33,"value":519},"2.2 不该拆的常见情况",{"type":27,"tag":35,"props":521,"children":522},{},[523],{"type":33,"value":524},"同样重要的是认清“现在别拆”。",{"type":27,"tag":35,"props":526,"children":527},{},[528],{"type":33,"value":529},"以下几种情况，服务化往往是负收益：",{"type":27,"tag":531,"props":532,"children":534},"h4",{"id":533},"a-团队规模还小",[535],{"type":33,"value":536},"A. 团队规模还小",{"type":27,"tag":35,"props":538,"children":539},{},[540],{"type":33,"value":541},"如果就 4~6 个核心开发，且沟通链路很短，单体未必是问题。太早拆分，只会提前引入分布式复杂度。",{"type":27,"tag":531,"props":543,"children":545},{"id":544},"b-业务还在剧烈变化",[546],{"type":33,"value":547},"B. 业务还在剧烈变化",{"type":27,"tag":35,"props":549,"children":550},{},[551],{"type":33,"value":552},"产品模型还没稳定时，服务边界也很难稳定。今天按 A 维度拆，三个月后业务重组，你会发现边界已经过时。",{"type":27,"tag":531,"props":554,"children":556},{"id":555},"c-核心问题不是边界而是工程纪律差",[557],{"type":33,"value":558},"C. 核心问题不是边界，而是工程纪律差",{"type":27,"tag":35,"props":560,"children":561},{},[562],{"type":33,"value":563},"例如：",{"type":27,"tag":46,"props":565,"children":566},{},[567,572,577,582],{"type":27,"tag":50,"props":568,"children":569},{},[570],{"type":33,"value":571},"没有测试",{"type":27,"tag":50,"props":573,"children":574},{},[575],{"type":33,"value":576},"没有代码 review",{"type":27,"tag":50,"props":578,"children":579},{},[580],{"type":33,"value":581},"没有发布规范",{"type":27,"tag":50,"props":583,"children":584},{},[585],{"type":33,"value":586},"模块职责混乱",{"type":27,"tag":35,"props":588,"children":589},{},[590],{"type":33,"value":591},"这时候拆服务，通常只是把一个混乱单体拆成多个混乱服务。",{"type":27,"tag":309,"props":593,"children":595},{"id":594},"_23-一个成熟的提问方式",[596],{"type":33,"value":597},"2.3 一个成熟的提问方式",{"type":27,"tag":35,"props":599,"children":600},{},[601],{"type":33,"value":602},"不要问：",{"type":27,"tag":104,"props":604,"children":605},{},[606],{"type":27,"tag":35,"props":607,"children":608},{},[609],{"type":33,"value":610},"我们要不要上微服务？",{"type":27,"tag":35,"props":612,"children":613},{},[614],{"type":33,"value":615},"更好的问法是：",{"type":27,"tag":104,"props":617,"children":618},{},[619],{"type":27,"tag":35,"props":620,"children":621},{},[622],{"type":27,"tag":124,"props":623,"children":624},{},[625],{"type":33,"value":626},"现在有哪些痛点，是只有通过边界重构和独立部署才能显著改善的？",{"type":27,"tag":35,"props":628,"children":629},{},[630],{"type":33,"value":631},"如果这个问题答不出来，先别拆。",{"type":27,"tag":174,"props":633,"children":634},{},[],{"type":27,"tag":178,"props":636,"children":638},{"id":637},"三五种最常见的拆分维度到底该怎么选",[639],{"type":33,"value":640},"三、五种最常见的拆分维度，到底该怎么选",{"type":27,"tag":309,"props":642,"children":644},{"id":643},"_31-按业务能力拆最常见也是最稳的主路径",[645],{"type":33,"value":646},"3.1 按业务能力拆：最常见，也是最稳的主路径",{"type":27,"tag":35,"props":648,"children":649},{},[650],{"type":33,"value":651},"这是最推荐的默认方案。比如电商系统常见的能力边界：",{"type":27,"tag":46,"props":653,"children":654},{},[655,660,665,670,675,680,685],{"type":27,"tag":50,"props":656,"children":657},{},[658],{"type":33,"value":659},"商品",{"type":27,"tag":50,"props":661,"children":662},{},[663],{"type":33,"value":664},"库存",{"type":27,"tag":50,"props":666,"children":667},{},[668],{"type":33,"value":669},"购物车",{"type":27,"tag":50,"props":671,"children":672},{},[673],{"type":33,"value":674},"订单",{"type":27,"tag":50,"props":676,"children":677},{},[678],{"type":33,"value":679},"支付",{"type":27,"tag":50,"props":681,"children":682},{},[683],{"type":33,"value":684},"营销",{"type":27,"tag":50,"props":686,"children":687},{},[688],{"type":33,"value":689},"用户",{"type":27,"tag":35,"props":691,"children":692},{},[693],{"type":33,"value":694},"这种拆法的优点是业务语义清晰，团队容易理解。",{"type":27,"tag":35,"props":696,"children":697},{},[698],{"type":33,"value":699},"但要注意：业务能力拆分，不等于 UI 页面拆分。比如“商品详情页”不是服务边界，它只是一个前台视图，背后可能组合了商品、价格、库存、营销多个能力。",{"type":27,"tag":309,"props":701,"children":703},{"id":702},"_32-按数据一致性拆决定边界能不能长期稳定",[704],{"type":33,"value":705},"3.2 按数据一致性拆：决定边界能不能长期稳定",{"type":27,"tag":35,"props":707,"children":708},{},[709],{"type":33,"value":710},"很多服务设计失败，不是业务划分不清，而是把强一致数据拆散了。",{"type":27,"tag":35,"props":712,"children":713},{},[714],{"type":33,"value":715},"举个例子：",{"type":27,"tag":46,"props":717,"children":718},{},[719,724,729,734],{"type":27,"tag":50,"props":720,"children":721},{},[722],{"type":33,"value":723},"订单状态",{"type":27,"tag":50,"props":725,"children":726},{},[727],{"type":33,"value":728},"订单明细",{"type":27,"tag":50,"props":730,"children":731},{},[732],{"type":33,"value":733},"支付状态",{"type":27,"tag":50,"props":735,"children":736},{},[737],{"type":33,"value":738},"履约状态",{"type":27,"tag":35,"props":740,"children":741},{},[742],{"type":33,"value":743},"这些数据看似可以拆给不同团队，但如果一个核心链路里必须高频地强一致联动，那边界就不能只按组织图画。",{"type":27,"tag":35,"props":745,"children":746},{},[747],{"type":33,"value":748},"一个简单经验：",{"type":27,"tag":104,"props":750,"children":751},{},[752],{"type":27,"tag":35,"props":753,"children":754},{},[755],{"type":27,"tag":124,"props":756,"children":757},{},[758],{"type":33,"value":759},"需要在同一个本地事务中频繁保证一致性的对象，优先放在同一服务边界内。",{"type":27,"tag":35,"props":761,"children":762},{},[763],{"type":33,"value":764},"不是永远不能拆，但拆之前要非常清楚你愿不愿意为此付出 Saga、补偿、消息一致性、对账系统这些额外成本。",{"type":27,"tag":309,"props":766,"children":768},{"id":767},"_33-按变更频率拆减少总是一起发版的痛苦",[769],{"type":33,"value":770},"3.3 按变更频率拆：减少“总是一起发版”的痛苦",{"type":27,"tag":35,"props":772,"children":773},{},[774],{"type":33,"value":775},"有些能力虽然业务上相关，但变化节奏完全不同。",{"type":27,"tag":35,"props":777,"children":778},{},[779],{"type":33,"value":563},{"type":27,"tag":46,"props":781,"children":782},{},[783,788,793],{"type":27,"tag":50,"props":784,"children":785},{},[786],{"type":33,"value":787},"商品基础信息：变化中等",{"type":27,"tag":50,"props":789,"children":790},{},[791],{"type":33,"value":792},"营销规则：变化频繁",{"type":27,"tag":50,"props":794,"children":795},{},[796],{"type":33,"value":797},"用户身份中心：变化低，但稳定性要求极高",{"type":27,"tag":35,"props":799,"children":800},{},[801],{"type":33,"value":802},"如果把它们硬塞在一起，就会出现：",{"type":27,"tag":46,"props":804,"children":805},{},[806,811,816],{"type":27,"tag":50,"props":807,"children":808},{},[809],{"type":33,"value":810},"高变更模块带着低变更模块一起高频发布",{"type":27,"tag":50,"props":812,"children":813},{},[814],{"type":33,"value":815},"风险被放大",{"type":27,"tag":50,"props":817,"children":818},{},[819],{"type":33,"value":820},"回归成本被放大",{"type":27,"tag":35,"props":822,"children":823},{},[824],{"type":33,"value":825},"这时按变更节奏拆开，往往比按页面或数据库表拆更有效。",{"type":27,"tag":309,"props":827,"children":829},{"id":828},"_34-按扩展压力拆为不均匀流量准备弹性",[830],{"type":33,"value":831},"3.4 按扩展压力拆：为不均匀流量准备弹性",{"type":27,"tag":35,"props":833,"children":834},{},[835],{"type":33,"value":836},"有些系统真正需要拆，不是因为代码写不下，而是因为不同能力承受的流量形态完全不一样。",{"type":27,"tag":35,"props":838,"children":839},{},[840],{"type":33,"value":841},"比如：",{"type":27,"tag":46,"props":843,"children":844},{},[845,850,855,860],{"type":27,"tag":50,"props":846,"children":847},{},[848],{"type":33,"value":849},"搜索：读多、峰值高、可缓存",{"type":27,"tag":50,"props":851,"children":852},{},[853],{"type":33,"value":854},"订单：写多、事务重、不可乱序",{"type":27,"tag":50,"props":856,"children":857},{},[858],{"type":33,"value":859},"推荐：计算重、延迟容忍略高",{"type":27,"tag":50,"props":861,"children":862},{},[863],{"type":33,"value":864},"支付：吞吐相对稳定，但极度敏感",{"type":27,"tag":35,"props":866,"children":867},{},[868],{"type":33,"value":869},"如果这些能力都绑在一个部署单元里，你会得到两个问题：",{"type":27,"tag":140,"props":871,"children":872},{},[873,878],{"type":27,"tag":50,"props":874,"children":875},{},[876],{"type":33,"value":877},"扩容贵：为了顶住搜索高峰，把整个系统一起扩",{"type":27,"tag":50,"props":879,"children":880},{},[881],{"type":33,"value":882},"故障传播快：推荐服务打满 CPU，订单接口也跟着超时",{"type":27,"tag":35,"props":884,"children":885},{},[886],{"type":33,"value":887},"按扩展特征拆分，核心目标是让不同服务按照各自压力模型扩容，而不是“一锅一起煮”。",{"type":27,"tag":309,"props":889,"children":891},{"id":890},"_35-按团队边界拆最容易被滥用也最不能忽略",[892],{"type":33,"value":893},"3.5 按团队边界拆：最容易被滥用，也最不能忽略",{"type":27,"tag":35,"props":895,"children":896},{},[897],{"type":33,"value":898},"服务边界和团队所有权强相关，这句话是对的。",{"type":27,"tag":35,"props":900,"children":901},{},[902],{"type":33,"value":903},"但常见误区是：",{"type":27,"tag":104,"props":905,"children":906},{},[907],{"type":27,"tag":35,"props":908,"children":909},{},[910],{"type":33,"value":911},"某个团队想独立，就给它一个服务。",{"type":27,"tag":35,"props":913,"children":914},{},[915],{"type":33,"value":916},"这不一定对。正确做法应该是：",{"type":27,"tag":46,"props":918,"children":919},{},[920,925],{"type":27,"tag":50,"props":921,"children":922},{},[923],{"type":33,"value":924},"先看业务和数据边界是否合理",{"type":27,"tag":50,"props":926,"children":927},{},[928],{"type":33,"value":929},"再看这个边界是否适合某个团队完整拥有",{"type":27,"tag":35,"props":931,"children":932},{},[933,935],{"type":33,"value":934},"也就是说，",{"type":27,"tag":124,"props":936,"children":937},{},[938],{"type":33,"value":939},"团队边界应该顺着业务边界走，而不是反过来。",{"type":27,"tag":174,"props":941,"children":942},{},[],{"type":27,"tag":178,"props":944,"children":946},{"id":945},"四三个真实案例为什么同样是拆服务结果差别会这么大",[947],{"type":33,"value":948},"四、三个真实案例：为什么同样是“拆服务”，结果差别会这么大",{"type":27,"tag":309,"props":950,"children":952},{"id":951},"案例-1把商品和库存拆开是好事还是坏事",[953],{"type":33,"value":954},"案例 1：把“商品”和“库存”拆开，是好事还是坏事？",{"type":27,"tag":35,"props":956,"children":957},{},[958,960],{"type":33,"value":959},"答案是：",{"type":27,"tag":124,"props":961,"children":962},{},[963],{"type":33,"value":964},"看你的业务场景。",{"type":27,"tag":531,"props":966,"children":968},{"id":967},"场景-a内容电商-标品零售",[969],{"type":33,"value":970},"场景 A：内容电商 / 标品零售",{"type":27,"tag":35,"props":972,"children":973},{},[974],{"type":33,"value":975},"商品信息变更和库存变更节奏不同，库存可能由独立履约系统维护。此时拆开更合理。",{"type":27,"tag":531,"props":977,"children":979},{"id":978},"场景-b超高频秒杀",[980],{"type":33,"value":981},"场景 B：超高频秒杀",{"type":27,"tag":35,"props":983,"children":984},{},[985],{"type":33,"value":986},"库存、限购、售卖状态强绑定，链路要求极低延迟和高一致性。如果拆得太早，系统会被跨服务调用和一致性补偿拖累。",{"type":27,"tag":309,"props":988,"children":990},{"id":989},"案例-2把营销从订单里拆出去",[991],{"type":33,"value":992},"案例 2：把“营销”从订单里拆出去",{"type":27,"tag":35,"props":994,"children":995},{},[996],{"type":33,"value":997},"这是很多电商都会做的一步，但要小心接口形态。",{"type":27,"tag":35,"props":999,"children":1000},{},[1001],{"type":33,"value":1002},"好的拆法：",{"type":27,"tag":46,"props":1004,"children":1005},{},[1006,1011,1016],{"type":27,"tag":50,"props":1007,"children":1008},{},[1009],{"type":33,"value":1010},"营销服务负责规则计算能力",{"type":27,"tag":50,"props":1012,"children":1013},{},[1014],{"type":33,"value":1015},"订单服务负责下单结果和最终落账",{"type":27,"tag":50,"props":1017,"children":1018},{},[1019],{"type":33,"value":1020},"中间通过稳定的价格快照 / 优惠快照交互",{"type":27,"tag":35,"props":1022,"children":1023},{},[1024],{"type":33,"value":1025},"差的拆法：",{"type":27,"tag":46,"props":1027,"children":1028},{},[1029,1034,1039],{"type":27,"tag":50,"props":1030,"children":1031},{},[1032],{"type":33,"value":1033},"下单过程中每一步都实时回调营销服务",{"type":27,"tag":50,"props":1035,"children":1036},{},[1037],{"type":33,"value":1038},"一个订单确认页要打 8 次营销接口",{"type":27,"tag":50,"props":1040,"children":1041},{},[1042],{"type":33,"value":1043},"活动服务稍微抖一下，订单全链路都超时",{"type":27,"tag":309,"props":1045,"children":1047},{"id":1046},"案例-3把用户中心做成共享服务",[1048],{"type":33,"value":1049},"案例 3：把“用户中心”做成共享服务",{"type":27,"tag":35,"props":1051,"children":1052},{},[1053],{"type":33,"value":1054},"用户服务是最容易被做成“超级公共服务”的。",{"type":27,"tag":35,"props":1056,"children":1057},{},[1058],{"type":33,"value":1059},"一开始看起来很合理，但如果把：",{"type":27,"tag":46,"props":1061,"children":1062},{},[1063,1068,1073,1078,1083,1088],{"type":27,"tag":50,"props":1064,"children":1065},{},[1066],{"type":33,"value":1067},"认证",{"type":27,"tag":50,"props":1069,"children":1070},{},[1071],{"type":33,"value":1072},"个人资料",{"type":27,"tag":50,"props":1074,"children":1075},{},[1076],{"type":33,"value":1077},"收货地址",{"type":27,"tag":50,"props":1079,"children":1080},{},[1081],{"type":33,"value":1082},"会员等级",{"type":27,"tag":50,"props":1084,"children":1085},{},[1086],{"type":33,"value":1087},"风控画像",{"type":27,"tag":50,"props":1089,"children":1090},{},[1091],{"type":33,"value":1092},"营销标签",{"type":27,"tag":35,"props":1094,"children":1095},{},[1096],{"type":33,"value":1097},"全堆进一个服务里，最后又会长成一个新的巨石。",{"type":27,"tag":35,"props":1099,"children":1100},{},[1101],{"type":33,"value":1102},"正确做法通常是：",{"type":27,"tag":46,"props":1104,"children":1105},{},[1106,1111,1116],{"type":27,"tag":50,"props":1107,"children":1108},{},[1109],{"type":33,"value":1110},"核心身份能力单独稳定",{"type":27,"tag":50,"props":1112,"children":1113},{},[1114],{"type":33,"value":1115},"画像、标签、会员、偏好按场景拆分",{"type":27,"tag":50,"props":1117,"children":1118},{},[1119],{"type":33,"value":1120},"对外通过用户领域模型聚合，而不是让每个调用方自己拼",{"type":27,"tag":174,"props":1122,"children":1123},{},[],{"type":27,"tag":178,"props":1125,"children":1127},{"id":1126},"五服务拆分最常见的五个误区",[1128],{"type":33,"value":1129},"五、服务拆分最常见的五个误区",{"type":27,"tag":309,"props":1131,"children":1133},{"id":1132},"_51-误区一按数据库表拆",[1134],{"type":33,"value":1135},"5.1 误区一：按数据库表拆",{"type":27,"tag":35,"props":1137,"children":1138},{},[1139],{"type":33,"value":1140},"“一个表一个服务”听起来很干净，实际上经常最糟。",{"type":27,"tag":35,"props":1142,"children":1143},{},[1144],{"type":33,"value":1145},"因为业务能力不是表结构，表只是存储实现。按表拆会让本来一个业务动作需要在多个服务之间拼装。",{"type":27,"tag":309,"props":1147,"children":1149},{"id":1148},"_52-误区二把-bff-当业务服务",[1150],{"type":33,"value":1151},"5.2 误区二：把 BFF 当业务服务",{"type":27,"tag":35,"props":1153,"children":1154},{},[1155],{"type":33,"value":1156},"BFF 是面向客户端体验的聚合层，不应成为核心业务真相所在地。",{"type":27,"tag":35,"props":1158,"children":1159},{},[1160],{"type":33,"value":1161},"如果把大量核心业务规则写在 BFF 里，后面 App、Web、内部后台会出现三套规则漂移。",{"type":27,"tag":309,"props":1163,"children":1165},{"id":1164},"_53-误区三只拆同步调用不拆责任",[1166],{"type":33,"value":1167},"5.3 误区三：只拆同步调用，不拆责任",{"type":27,"tag":35,"props":1169,"children":1170},{},[1171],{"type":33,"value":1172},"很多所谓服务化，只是把原本函数调用换成 HTTP 调用，责任边界却没变。这样只会让链路更长，自治没有增加。",{"type":27,"tag":309,"props":1174,"children":1176},{"id":1175},"_54-误区四先拆技术栈再拆业务",[1177],{"type":33,"value":1178},"5.4 误区四：先拆技术栈，再拆业务",{"type":27,"tag":35,"props":1180,"children":1181},{},[1182],{"type":33,"value":1183},"“这个团队想用 Go，那就先分个服务吧。”",{"type":27,"tag":35,"props":1185,"children":1186},{},[1187],{"type":33,"value":1188},"技术选型可以是结果，不应该是边界的起点。",{"type":27,"tag":309,"props":1190,"children":1192},{"id":1191},"_55-误区五一次性大爆炸迁移",[1193],{"type":33,"value":1194},"5.5 误区五：一次性大爆炸迁移",{"type":27,"tag":35,"props":1196,"children":1197},{},[1198],{"type":33,"value":1199},"这是最危险的方式。",{"type":27,"tag":35,"props":1201,"children":1202},{},[1203],{"type":33,"value":1204},"因为你会同时引入：",{"type":27,"tag":46,"props":1206,"children":1207},{},[1208,1213,1218,1223,1228],{"type":27,"tag":50,"props":1209,"children":1210},{},[1211],{"type":33,"value":1212},"新边界",{"type":27,"tag":50,"props":1214,"children":1215},{},[1216],{"type":33,"value":1217},"新部署模式",{"type":27,"tag":50,"props":1219,"children":1220},{},[1221],{"type":33,"value":1222},"新监控体系",{"type":27,"tag":50,"props":1224,"children":1225},{},[1226],{"type":33,"value":1227},"新发布流程",{"type":27,"tag":50,"props":1229,"children":1230},{},[1231],{"type":33,"value":1232},"新调用链路",{"type":27,"tag":35,"props":1234,"children":1235},{},[1236],{"type":33,"value":1237},"变量太多，问题根本排不清。",{"type":27,"tag":174,"props":1239,"children":1240},{},[],{"type":27,"tag":178,"props":1242,"children":1244},{"id":1243},"六正确的演进路径从模块化单体到服务化不要一步跳悬崖",[1245],{"type":33,"value":1246},"六、正确的演进路径：从模块化单体到服务化，不要一步跳悬崖",{"type":27,"tag":35,"props":1248,"children":1249},{},[1250],{"type":33,"value":1251},"绝大多数团队更安全的路线是：",{"type":27,"tag":309,"props":1253,"children":1255},{"id":1254},"第-1-步先做模块化单体",[1256],{"type":33,"value":1257},"第 1 步：先做模块化单体",{"type":27,"tag":35,"props":1259,"children":1260},{},[1261],{"type":33,"value":1262},"在单体内部先把边界梳理清楚：",{"type":27,"tag":46,"props":1264,"children":1265},{},[1266,1271,1276,1281],{"type":27,"tag":50,"props":1267,"children":1268},{},[1269],{"type":33,"value":1270},"依赖方向明确",{"type":27,"tag":50,"props":1272,"children":1273},{},[1274],{"type":33,"value":1275},"模块接口收口",{"type":27,"tag":50,"props":1277,"children":1278},{},[1279],{"type":33,"value":1280},"数据访问归属明确",{"type":27,"tag":50,"props":1282,"children":1283},{},[1284],{"type":33,"value":1285},"跨模块调用规范化",{"type":27,"tag":35,"props":1287,"children":1288},{},[1289],{"type":33,"value":1290},"如果单体内部边界都理不清，拆成服务只是把混乱网络化。",{"type":27,"tag":309,"props":1292,"children":1294},{"id":1293},"第-2-步识别第一个最值得独立的能力",[1295],{"type":33,"value":1296},"第 2 步：识别第一个最值得独立的能力",{"type":27,"tag":35,"props":1298,"children":1299},{},[1300],{"type":33,"value":1301},"第一个服务，优先选择：",{"type":27,"tag":46,"props":1303,"children":1304},{},[1305,1310,1315,1320],{"type":27,"tag":50,"props":1306,"children":1307},{},[1308],{"type":33,"value":1309},"业务边界清晰",{"type":27,"tag":50,"props":1311,"children":1312},{},[1313],{"type":33,"value":1314},"与其他模块交互相对稳定",{"type":27,"tag":50,"props":1316,"children":1317},{},[1318],{"type":33,"value":1319},"独立扩容价值高",{"type":27,"tag":50,"props":1321,"children":1322},{},[1323],{"type":33,"value":1324},"出问题可控",{"type":27,"tag":35,"props":1326,"children":1327},{},[1328],{"type":33,"value":1329},"很多时候，搜索、推荐、通知、文件服务，都比订单主链路更适合作为第一批独立服务。",{"type":27,"tag":309,"props":1331,"children":1333},{"id":1332},"第-3-步先分读路径再分写路径",[1334],{"type":33,"value":1335},"第 3 步：先分读路径，再分写路径",{"type":27,"tag":35,"props":1337,"children":1338},{},[1339],{"type":33,"value":1340},"读路径通常更容易做缓存和容错，拆分风险较低。",{"type":27,"tag":35,"props":1342,"children":1343},{},[1344],{"type":33,"value":1345},"写路径一旦涉及事务和一致性，复杂度会显著上升。所以很多团队会先把查询类能力独立出来，再考虑核心写路径。",{"type":27,"tag":309,"props":1347,"children":1349},{"id":1348},"第-4-步用事件而不是共享数据库做解耦",[1350],{"type":33,"value":1351},"第 4 步：用事件而不是共享数据库做解耦",{"type":27,"tag":35,"props":1353,"children":1354},{},[1355],{"type":33,"value":1356},"如果两个服务拆开了，还共享同一套核心业务表，那只是“部署上分家，数据上同居”。",{"type":27,"tag":35,"props":1358,"children":1359},{},[1360],{"type":33,"value":1361},"更稳的方式是通过领域事件同步必要状态：",{"type":27,"tag":1363,"props":1364,"children":1368},"pre",{"className":1365,"code":1366,"language":1367,"meta":7,"style":7},"language-ts shiki shiki-themes github-dark","export type OrderPaidEvent = {\n  orderId: string\n  userId: string\n  paidAt: string\n  totalAmount: number\n}\n\nexport async function onOrderPaid(event: OrderPaidEvent) {\n  await loyaltyService.addPoints({\n    userId: event.userId,\n    points: Math.floor(event.totalAmount / 10),\n    source: 'order_paid',\n    referenceId: event.orderId,\n  })\n}\n","ts",[1369],{"type":27,"tag":1370,"props":1371,"children":1372},"code",{"__ignoreMap":7},[1373,1407,1428,1445,1462,1479,1488,1497,1543,1567,1576,1610,1630,1639,1648],{"type":27,"tag":1374,"props":1375,"children":1378},"span",{"class":1376,"line":1377},"line",1,[1379,1385,1390,1396,1401],{"type":27,"tag":1374,"props":1380,"children":1382},{"style":1381},"--shiki-default:#F97583",[1383],{"type":33,"value":1384},"export",{"type":27,"tag":1374,"props":1386,"children":1387},{"style":1381},[1388],{"type":33,"value":1389}," type",{"type":27,"tag":1374,"props":1391,"children":1393},{"style":1392},"--shiki-default:#B392F0",[1394],{"type":33,"value":1395}," OrderPaidEvent",{"type":27,"tag":1374,"props":1397,"children":1398},{"style":1381},[1399],{"type":33,"value":1400}," =",{"type":27,"tag":1374,"props":1402,"children":1404},{"style":1403},"--shiki-default:#E1E4E8",[1405],{"type":33,"value":1406}," {\n",{"type":27,"tag":1374,"props":1408,"children":1410},{"class":1376,"line":1409},2,[1411,1417,1422],{"type":27,"tag":1374,"props":1412,"children":1414},{"style":1413},"--shiki-default:#FFAB70",[1415],{"type":33,"value":1416},"  orderId",{"type":27,"tag":1374,"props":1418,"children":1419},{"style":1381},[1420],{"type":33,"value":1421},":",{"type":27,"tag":1374,"props":1423,"children":1425},{"style":1424},"--shiki-default:#79B8FF",[1426],{"type":33,"value":1427}," string\n",{"type":27,"tag":1374,"props":1429,"children":1431},{"class":1376,"line":1430},3,[1432,1437,1441],{"type":27,"tag":1374,"props":1433,"children":1434},{"style":1413},[1435],{"type":33,"value":1436},"  userId",{"type":27,"tag":1374,"props":1438,"children":1439},{"style":1381},[1440],{"type":33,"value":1421},{"type":27,"tag":1374,"props":1442,"children":1443},{"style":1424},[1444],{"type":33,"value":1427},{"type":27,"tag":1374,"props":1446,"children":1448},{"class":1376,"line":1447},4,[1449,1454,1458],{"type":27,"tag":1374,"props":1450,"children":1451},{"style":1413},[1452],{"type":33,"value":1453},"  paidAt",{"type":27,"tag":1374,"props":1455,"children":1456},{"style":1381},[1457],{"type":33,"value":1421},{"type":27,"tag":1374,"props":1459,"children":1460},{"style":1424},[1461],{"type":33,"value":1427},{"type":27,"tag":1374,"props":1463,"children":1464},{"class":1376,"line":20},[1465,1470,1474],{"type":27,"tag":1374,"props":1466,"children":1467},{"style":1413},[1468],{"type":33,"value":1469},"  totalAmount",{"type":27,"tag":1374,"props":1471,"children":1472},{"style":1381},[1473],{"type":33,"value":1421},{"type":27,"tag":1374,"props":1475,"children":1476},{"style":1424},[1477],{"type":33,"value":1478}," number\n",{"type":27,"tag":1374,"props":1480,"children":1482},{"class":1376,"line":1481},6,[1483],{"type":27,"tag":1374,"props":1484,"children":1485},{"style":1403},[1486],{"type":33,"value":1487},"}\n",{"type":27,"tag":1374,"props":1489,"children":1491},{"class":1376,"line":1490},7,[1492],{"type":27,"tag":1374,"props":1493,"children":1494},{"emptyLinePlaceholder":18},[1495],{"type":33,"value":1496},"\n",{"type":27,"tag":1374,"props":1498,"children":1500},{"class":1376,"line":1499},8,[1501,1505,1510,1515,1520,1525,1530,1534,1538],{"type":27,"tag":1374,"props":1502,"children":1503},{"style":1381},[1504],{"type":33,"value":1384},{"type":27,"tag":1374,"props":1506,"children":1507},{"style":1381},[1508],{"type":33,"value":1509}," async",{"type":27,"tag":1374,"props":1511,"children":1512},{"style":1381},[1513],{"type":33,"value":1514}," function",{"type":27,"tag":1374,"props":1516,"children":1517},{"style":1392},[1518],{"type":33,"value":1519}," onOrderPaid",{"type":27,"tag":1374,"props":1521,"children":1522},{"style":1403},[1523],{"type":33,"value":1524},"(",{"type":27,"tag":1374,"props":1526,"children":1527},{"style":1413},[1528],{"type":33,"value":1529},"event",{"type":27,"tag":1374,"props":1531,"children":1532},{"style":1381},[1533],{"type":33,"value":1421},{"type":27,"tag":1374,"props":1535,"children":1536},{"style":1392},[1537],{"type":33,"value":1395},{"type":27,"tag":1374,"props":1539,"children":1540},{"style":1403},[1541],{"type":33,"value":1542},") {\n",{"type":27,"tag":1374,"props":1544,"children":1546},{"class":1376,"line":1545},9,[1547,1552,1557,1562],{"type":27,"tag":1374,"props":1548,"children":1549},{"style":1381},[1550],{"type":33,"value":1551},"  await",{"type":27,"tag":1374,"props":1553,"children":1554},{"style":1403},[1555],{"type":33,"value":1556}," loyaltyService.",{"type":27,"tag":1374,"props":1558,"children":1559},{"style":1392},[1560],{"type":33,"value":1561},"addPoints",{"type":27,"tag":1374,"props":1563,"children":1564},{"style":1403},[1565],{"type":33,"value":1566},"({\n",{"type":27,"tag":1374,"props":1568,"children":1570},{"class":1376,"line":1569},10,[1571],{"type":27,"tag":1374,"props":1572,"children":1573},{"style":1403},[1574],{"type":33,"value":1575},"    userId: event.userId,\n",{"type":27,"tag":1374,"props":1577,"children":1579},{"class":1376,"line":1578},11,[1580,1585,1590,1595,1600,1605],{"type":27,"tag":1374,"props":1581,"children":1582},{"style":1403},[1583],{"type":33,"value":1584},"    points: Math.",{"type":27,"tag":1374,"props":1586,"children":1587},{"style":1392},[1588],{"type":33,"value":1589},"floor",{"type":27,"tag":1374,"props":1591,"children":1592},{"style":1403},[1593],{"type":33,"value":1594},"(event.totalAmount ",{"type":27,"tag":1374,"props":1596,"children":1597},{"style":1381},[1598],{"type":33,"value":1599},"/",{"type":27,"tag":1374,"props":1601,"children":1602},{"style":1424},[1603],{"type":33,"value":1604}," 10",{"type":27,"tag":1374,"props":1606,"children":1607},{"style":1403},[1608],{"type":33,"value":1609},"),\n",{"type":27,"tag":1374,"props":1611,"children":1613},{"class":1376,"line":1612},12,[1614,1619,1625],{"type":27,"tag":1374,"props":1615,"children":1616},{"style":1403},[1617],{"type":33,"value":1618},"    source: ",{"type":27,"tag":1374,"props":1620,"children":1622},{"style":1621},"--shiki-default:#9ECBFF",[1623],{"type":33,"value":1624},"'order_paid'",{"type":27,"tag":1374,"props":1626,"children":1627},{"style":1403},[1628],{"type":33,"value":1629},",\n",{"type":27,"tag":1374,"props":1631,"children":1633},{"class":1376,"line":1632},13,[1634],{"type":27,"tag":1374,"props":1635,"children":1636},{"style":1403},[1637],{"type":33,"value":1638},"    referenceId: event.orderId,\n",{"type":27,"tag":1374,"props":1640,"children":1642},{"class":1376,"line":1641},14,[1643],{"type":27,"tag":1374,"props":1644,"children":1645},{"style":1403},[1646],{"type":33,"value":1647},"  })\n",{"type":27,"tag":1374,"props":1649,"children":1651},{"class":1376,"line":1650},15,[1652],{"type":27,"tag":1374,"props":1653,"children":1654},{"style":1403},[1655],{"type":33,"value":1487},{"type":27,"tag":35,"props":1657,"children":1658},{},[1659],{"type":33,"value":1660},"这不是为了“显得高级”，而是为了避免每个业务动作都同步串起一长条依赖。",{"type":27,"tag":174,"props":1662,"children":1663},{},[],{"type":27,"tag":178,"props":1665,"children":1667},{"id":1666},"七怎么判断一个候选边界值不值得独立成服务",[1668],{"type":33,"value":1669},"七、怎么判断一个候选边界值不值得独立成服务",{"type":27,"tag":35,"props":1671,"children":1672},{},[1673],{"type":33,"value":1674},"这里给一张实用决策表。",{"type":27,"tag":392,"props":1676,"children":1677},{},[1678,1699],{"type":27,"tag":396,"props":1679,"children":1680},{},[1681],{"type":27,"tag":400,"props":1682,"children":1683},{},[1684,1689,1694],{"type":27,"tag":404,"props":1685,"children":1686},{},[1687],{"type":33,"value":1688},"评估项",{"type":27,"tag":404,"props":1690,"children":1691},{},[1692],{"type":33,"value":1693},"低分表现",{"type":27,"tag":404,"props":1695,"children":1696},{},[1697],{"type":33,"value":1698},"高分表现",{"type":27,"tag":420,"props":1700,"children":1701},{},[1702,1720,1738,1756,1774,1792],{"type":27,"tag":400,"props":1703,"children":1704},{},[1705,1710,1715],{"type":27,"tag":427,"props":1706,"children":1707},{},[1708],{"type":33,"value":1709},"业务边界清晰度",{"type":27,"tag":427,"props":1711,"children":1712},{},[1713],{"type":33,"value":1714},"职责模糊，容易扯皮",{"type":27,"tag":427,"props":1716,"children":1717},{},[1718],{"type":33,"value":1719},"输入输出清晰",{"type":27,"tag":400,"props":1721,"children":1722},{},[1723,1728,1733],{"type":27,"tag":427,"props":1724,"children":1725},{},[1726],{"type":33,"value":1727},"独立发布价值",{"type":27,"tag":427,"props":1729,"children":1730},{},[1731],{"type":33,"value":1732},"总要跟别的模块一起发",{"type":27,"tag":427,"props":1734,"children":1735},{},[1736],{"type":33,"value":1737},"可以独立演进",{"type":27,"tag":400,"props":1739,"children":1740},{},[1741,1746,1751],{"type":27,"tag":427,"props":1742,"children":1743},{},[1744],{"type":33,"value":1745},"数据一致性成本",{"type":27,"tag":427,"props":1747,"children":1748},{},[1749],{"type":33,"value":1750},"强事务耦合深",{"type":27,"tag":427,"props":1752,"children":1753},{},[1754],{"type":33,"value":1755},"可接受最终一致",{"type":27,"tag":400,"props":1757,"children":1758},{},[1759,1764,1769],{"type":27,"tag":427,"props":1760,"children":1761},{},[1762],{"type":33,"value":1763},"流量特征差异",{"type":27,"tag":427,"props":1765,"children":1766},{},[1767],{"type":33,"value":1768},"与主系统完全一致",{"type":27,"tag":427,"props":1770,"children":1771},{},[1772],{"type":33,"value":1773},"扩容模型明显不同",{"type":27,"tag":400,"props":1775,"children":1776},{},[1777,1782,1787],{"type":27,"tag":427,"props":1778,"children":1779},{},[1780],{"type":33,"value":1781},"团队所有权",{"type":27,"tag":427,"props":1783,"children":1784},{},[1785],{"type":33,"value":1786},"多团队共同修改",{"type":27,"tag":427,"props":1788,"children":1789},{},[1790],{"type":33,"value":1791},"单团队明确负责",{"type":27,"tag":400,"props":1793,"children":1794},{},[1795,1800,1805],{"type":27,"tag":427,"props":1796,"children":1797},{},[1798],{"type":33,"value":1799},"故障隔离收益",{"type":27,"tag":427,"props":1801,"children":1802},{},[1803],{"type":33,"value":1804},"挂了全系统都受影响",{"type":27,"tag":427,"props":1806,"children":1807},{},[1808],{"type":33,"value":1809},"可局部降级",{"type":27,"tag":35,"props":1811,"children":1812},{},[1813],{"type":33,"value":1814},"如果一个候选边界在这六项里大部分都高分，它就很适合优先独立。",{"type":27,"tag":309,"props":1816,"children":1818},{"id":1817},"_71-一个简单决策树",[1819],{"type":33,"value":1820},"7.1 一个简单决策树",{"type":27,"tag":1363,"props":1822,"children":1825},{"className":1823,"code":1824,"language":33,"meta":7,"style":7},"language-text shiki shiki-themes github-dark","这个能力是否有清晰业务语义？\n  ├─ 否 → 先不要拆\n  └─ 是\n      这个能力是否与其他模块强事务绑定？\n        ├─ 是 → 先在单体内做模块化\n        └─ 否\n            是否有独立发布 / 扩容 / 故障隔离价值？\n              ├─ 否 → 先别拆\n              └─ 是 → 进入服务化候选列表\n",[1826],{"type":27,"tag":1370,"props":1827,"children":1828},{"__ignoreMap":7},[1829,1837,1845,1853,1861,1869,1877,1885,1893],{"type":27,"tag":1374,"props":1830,"children":1831},{"class":1376,"line":1377},[1832],{"type":27,"tag":1374,"props":1833,"children":1834},{},[1835],{"type":33,"value":1836},"这个能力是否有清晰业务语义？\n",{"type":27,"tag":1374,"props":1838,"children":1839},{"class":1376,"line":1409},[1840],{"type":27,"tag":1374,"props":1841,"children":1842},{},[1843],{"type":33,"value":1844},"  ├─ 否 → 先不要拆\n",{"type":27,"tag":1374,"props":1846,"children":1847},{"class":1376,"line":1430},[1848],{"type":27,"tag":1374,"props":1849,"children":1850},{},[1851],{"type":33,"value":1852},"  └─ 是\n",{"type":27,"tag":1374,"props":1854,"children":1855},{"class":1376,"line":1447},[1856],{"type":27,"tag":1374,"props":1857,"children":1858},{},[1859],{"type":33,"value":1860},"      这个能力是否与其他模块强事务绑定？\n",{"type":27,"tag":1374,"props":1862,"children":1863},{"class":1376,"line":20},[1864],{"type":27,"tag":1374,"props":1865,"children":1866},{},[1867],{"type":33,"value":1868},"        ├─ 是 → 先在单体内做模块化\n",{"type":27,"tag":1374,"props":1870,"children":1871},{"class":1376,"line":1481},[1872],{"type":27,"tag":1374,"props":1873,"children":1874},{},[1875],{"type":33,"value":1876},"        └─ 否\n",{"type":27,"tag":1374,"props":1878,"children":1879},{"class":1376,"line":1490},[1880],{"type":27,"tag":1374,"props":1881,"children":1882},{},[1883],{"type":33,"value":1884},"            是否有独立发布 / 扩容 / 故障隔离价值？\n",{"type":27,"tag":1374,"props":1886,"children":1887},{"class":1376,"line":1499},[1888],{"type":27,"tag":1374,"props":1889,"children":1890},{},[1891],{"type":33,"value":1892},"              ├─ 否 → 先别拆\n",{"type":27,"tag":1374,"props":1894,"children":1895},{"class":1376,"line":1545},[1896],{"type":27,"tag":1374,"props":1897,"children":1898},{},[1899],{"type":33,"value":1900},"              └─ 是 → 进入服务化候选列表\n",{"type":27,"tag":174,"props":1902,"children":1903},{},[],{"type":27,"tag":178,"props":1905,"children":1907},{"id":1906},"八拆完以后复杂度会转移到哪里",[1908],{"type":33,"value":1909},"八、拆完以后，复杂度会转移到哪里",{"type":27,"tag":35,"props":1911,"children":1912},{},[1913],{"type":33,"value":1914},"这是很多文章不愿意说透的地方。",{"type":27,"tag":35,"props":1916,"children":1917},{},[1918,1920,1925],{"type":33,"value":1919},"单体的问题，往往是",{"type":27,"tag":124,"props":1921,"children":1922},{},[1923],{"type":33,"value":1924},"模块内复杂度高",{"type":33,"value":326},{"type":27,"tag":35,"props":1927,"children":1928},{},[1929],{"type":33,"value":1930},"微服务之后，问题会转成：",{"type":27,"tag":46,"props":1932,"children":1933},{},[1934,1939,1944,1949,1954,1959],{"type":27,"tag":50,"props":1935,"children":1936},{},[1937],{"type":33,"value":1938},"接口契约管理",{"type":27,"tag":50,"props":1940,"children":1941},{},[1942],{"type":33,"value":1943},"分布式链路追踪",{"type":27,"tag":50,"props":1945,"children":1946},{},[1947],{"type":33,"value":1948},"超时、重试、幂等",{"type":27,"tag":50,"props":1950,"children":1951},{},[1952],{"type":33,"value":1953},"事件顺序与重复消费",{"type":27,"tag":50,"props":1955,"children":1956},{},[1957],{"type":33,"value":1958},"灰度发布与版本兼容",{"type":27,"tag":50,"props":1960,"children":1961},{},[1962],{"type":33,"value":1963},"数据口径对齐",{"type":27,"tag":35,"props":1965,"children":1966},{},[1967],{"type":33,"value":1968},"也就是说，微服务不是减少复杂度，而是把复杂度从“代码内部”转移到“系统边界”。",{"type":27,"tag":35,"props":1970,"children":1971},{},[1972],{"type":33,"value":1973},"所以团队必须提前准备：",{"type":27,"tag":46,"props":1975,"children":1976},{},[1977,1982,1987,1992,1997],{"type":27,"tag":50,"props":1978,"children":1979},{},[1980],{"type":33,"value":1981},"统一监控和 tracing",{"type":27,"tag":50,"props":1983,"children":1984},{},[1985],{"type":33,"value":1986},"契约测试",{"type":27,"tag":50,"props":1988,"children":1989},{},[1990],{"type":33,"value":1991},"错误码规范",{"type":27,"tag":50,"props":1993,"children":1994},{},[1995],{"type":33,"value":1996},"降级与熔断策略",{"type":27,"tag":50,"props":1998,"children":1999},{},[2000],{"type":33,"value":2001},"事件模型治理",{"type":27,"tag":35,"props":2003,"children":2004},{},[2005],{"type":33,"value":2006},"没有这些配套，服务化往往会进入一种状态：",{"type":27,"tag":104,"props":2008,"children":2009},{},[2010],{"type":27,"tag":35,"props":2011,"children":2012},{},[2013],{"type":33,"value":2014},"代码模块看起来更干净了，排障体验却更脏了。",{"type":27,"tag":174,"props":2016,"children":2017},{},[],{"type":27,"tag":178,"props":2019,"children":2021},{"id":2020},"九成本收益怎么判断不是技术胜负而是经营决策",[2022],{"type":33,"value":2023},"九、成本收益怎么判断：不是技术胜负，而是经营决策",{"type":27,"tag":35,"props":2025,"children":2026},{},[2027],{"type":33,"value":2028},"每次服务化，本质上都是一次投资。你花出去的成本包括：",{"type":27,"tag":46,"props":2030,"children":2031},{},[2032,2037,2042,2047,2052,2057],{"type":27,"tag":50,"props":2033,"children":2034},{},[2035],{"type":33,"value":2036},"开发改造成本",{"type":27,"tag":50,"props":2038,"children":2039},{},[2040],{"type":33,"value":2041},"测试回归成本",{"type":27,"tag":50,"props":2043,"children":2044},{},[2045],{"type":33,"value":2046},"平台建设成本",{"type":27,"tag":50,"props":2048,"children":2049},{},[2050],{"type":33,"value":2051},"监控治理成本",{"type":27,"tag":50,"props":2053,"children":2054},{},[2055],{"type":33,"value":2056},"团队学习成本",{"type":27,"tag":50,"props":2058,"children":2059},{},[2060],{"type":33,"value":2061},"故障窗口期风险",{"type":27,"tag":35,"props":2063,"children":2064},{},[2065],{"type":33,"value":2066},"而收益通常来自：",{"type":27,"tag":46,"props":2068,"children":2069},{},[2070,2075,2080,2085,2090],{"type":27,"tag":50,"props":2071,"children":2072},{},[2073],{"type":33,"value":2074},"发布更快",{"type":27,"tag":50,"props":2076,"children":2077},{},[2078],{"type":33,"value":2079},"扩容更省",{"type":27,"tag":50,"props":2081,"children":2082},{},[2083],{"type":33,"value":2084},"故障隔离更强",{"type":27,"tag":50,"props":2086,"children":2087},{},[2088],{"type":33,"value":2089},"团队协作更顺",{"type":27,"tag":50,"props":2091,"children":2092},{},[2093],{"type":33,"value":2094},"技术演进更灵活",{"type":27,"tag":309,"props":2096,"children":2098},{"id":2097},"_91-一个简单的收益判断表",[2099],{"type":33,"value":2100},"9.1 一个简单的收益判断表",{"type":27,"tag":392,"props":2102,"children":2103},{},[2104,2125],{"type":27,"tag":396,"props":2105,"children":2106},{},[2107],{"type":27,"tag":400,"props":2108,"children":2109},{},[2110,2115,2120],{"type":27,"tag":404,"props":2111,"children":2112},{},[2113],{"type":33,"value":2114},"问题",{"type":27,"tag":404,"props":2116,"children":2117},{},[2118],{"type":33,"value":2119},"如果答案是“是”",{"type":27,"tag":404,"props":2121,"children":2122},{},[2123],{"type":33,"value":2124},"倾向",{"type":27,"tag":420,"props":2126,"children":2127},{},[2128,2146,2163,2181,2198],{"type":27,"tag":400,"props":2129,"children":2130},{},[2131,2136,2141],{"type":27,"tag":427,"props":2132,"children":2133},{},[2134],{"type":33,"value":2135},"单体已经明显拖慢交付？",{"type":27,"tag":427,"props":2137,"children":2138},{},[2139],{"type":33,"value":2140},"高频互相阻塞",{"type":27,"tag":427,"props":2142,"children":2143},{},[2144],{"type":33,"value":2145},"倾向拆",{"type":27,"tag":400,"props":2147,"children":2148},{},[2149,2154,2159],{"type":27,"tag":427,"props":2150,"children":2151},{},[2152],{"type":33,"value":2153},"不同能力流量模型差异大？",{"type":27,"tag":427,"props":2155,"children":2156},{},[2157],{"type":33,"value":2158},"扩容浪费明显",{"type":27,"tag":427,"props":2160,"children":2161},{},[2162],{"type":33,"value":2145},{"type":27,"tag":400,"props":2164,"children":2165},{},[2166,2171,2176],{"type":27,"tag":427,"props":2167,"children":2168},{},[2169],{"type":33,"value":2170},"数据强一致成本高到无法接受？",{"type":27,"tag":427,"props":2172,"children":2173},{},[2174],{"type":33,"value":2175},"跨服务会引入大量补偿",{"type":27,"tag":427,"props":2177,"children":2178},{},[2179],{"type":33,"value":2180},"倾向先不拆",{"type":27,"tag":400,"props":2182,"children":2183},{},[2184,2189,2194],{"type":27,"tag":427,"props":2185,"children":2186},{},[2187],{"type":33,"value":2188},"团队是否具备治理能力？",{"type":27,"tag":427,"props":2190,"children":2191},{},[2192],{"type":33,"value":2193},"有监控、CI/CD、契约管理",{"type":27,"tag":427,"props":2195,"children":2196},{},[2197],{"type":33,"value":2145},{"type":27,"tag":400,"props":2199,"children":2200},{},[2201,2206,2211],{"type":27,"tag":427,"props":2202,"children":2203},{},[2204],{"type":33,"value":2205},"当前业务模型是否稳定？",{"type":27,"tag":427,"props":2207,"children":2208},{},[2209],{"type":33,"value":2210},"边界已基本清晰",{"type":27,"tag":427,"props":2212,"children":2213},{},[2214],{"type":33,"value":2145},{"type":27,"tag":35,"props":2216,"children":2217},{},[2218],{"type":33,"value":2219},"成熟团队不会问“微服务是不是先进”，而会问：",{"type":27,"tag":104,"props":2221,"children":2222},{},[2223],{"type":27,"tag":35,"props":2224,"children":2225},{},[2226],{"type":27,"tag":124,"props":2227,"children":2228},{},[2229],{"type":33,"value":2230},"这次拆分能不能真实降低未来 6 到 12 个月的交付和运行成本？",{"type":27,"tag":174,"props":2232,"children":2233},{},[],{"type":27,"tag":178,"props":2235,"children":2237},{"id":2236},"十给团队的微服务拆分检查清单",[2238],{"type":33,"value":2239},"十、给团队的微服务拆分检查清单",{"type":27,"tag":309,"props":2241,"children":2243},{"id":2242},"边界设计层",[2244],{"type":33,"value":2242},{"type":27,"tag":46,"props":2246,"children":2249},{"className":2247},[2248],"contains-task-list",[2250,2262,2271,2280],{"type":27,"tag":50,"props":2251,"children":2254},{"className":2252},[2253],"task-list-item",[2255,2260],{"type":27,"tag":2256,"props":2257,"children":2259},"input",{"disabled":18,"type":2258},"checkbox",[],{"type":33,"value":2261}," 是否按清晰业务能力而不是按目录或按表拆分",{"type":27,"tag":50,"props":2263,"children":2265},{"className":2264},[2253],[2266,2269],{"type":27,"tag":2256,"props":2267,"children":2268},{"disabled":18,"type":2258},[],{"type":33,"value":2270}," 是否识别了强事务绑定对象",{"type":27,"tag":50,"props":2272,"children":2274},{"className":2273},[2253],[2275,2278],{"type":27,"tag":2256,"props":2276,"children":2277},{"disabled":18,"type":2258},[],{"type":33,"value":2279}," 是否明确了服务输入输出和最终所有权",{"type":27,"tag":50,"props":2281,"children":2283},{"className":2282},[2253],[2284,2287],{"type":27,"tag":2256,"props":2285,"children":2286},{"disabled":18,"type":2258},[],{"type":33,"value":2288}," 是否评估了发布节奏和扩容差异",{"type":27,"tag":309,"props":2290,"children":2292},{"id":2291},"技术实现层",[2293],{"type":33,"value":2291},{"type":27,"tag":46,"props":2295,"children":2297},{"className":2296},[2248],[2298,2307,2316,2325],{"type":27,"tag":50,"props":2299,"children":2301},{"className":2300},[2253],[2302,2305],{"type":27,"tag":2256,"props":2303,"children":2304},{"disabled":18,"type":2258},[],{"type":33,"value":2306}," 是否避免拆完后继续共享核心数据库",{"type":27,"tag":50,"props":2308,"children":2310},{"className":2309},[2253],[2311,2314],{"type":27,"tag":2256,"props":2312,"children":2313},{"disabled":18,"type":2258},[],{"type":33,"value":2315}," 是否设计了稳定的同步接口与异步事件",{"type":27,"tag":50,"props":2317,"children":2319},{"className":2318},[2253],[2320,2323],{"type":27,"tag":2256,"props":2321,"children":2322},{"disabled":18,"type":2258},[],{"type":33,"value":2324}," 是否考虑了超时、重试、幂等、补偿",{"type":27,"tag":50,"props":2326,"children":2328},{"className":2327},[2253],[2329,2332],{"type":27,"tag":2256,"props":2330,"children":2331},{"disabled":18,"type":2258},[],{"type":33,"value":2333}," 是否准备了链路追踪和统一日志",{"type":27,"tag":309,"props":2335,"children":2337},{"id":2336},"组织协作层",[2338],{"type":33,"value":2336},{"type":27,"tag":46,"props":2340,"children":2342},{"className":2341},[2248],[2343,2352,2361,2370],{"type":27,"tag":50,"props":2344,"children":2346},{"className":2345},[2253],[2347,2350],{"type":27,"tag":2256,"props":2348,"children":2349},{"disabled":18,"type":2258},[],{"type":33,"value":2351}," 每个服务是否有明确 owner 团队",{"type":27,"tag":50,"props":2353,"children":2355},{"className":2354},[2253],[2356,2359],{"type":27,"tag":2256,"props":2357,"children":2358},{"disabled":18,"type":2258},[],{"type":33,"value":2360}," 是否建立了契约变更流程",{"type":27,"tag":50,"props":2362,"children":2364},{"className":2363},[2253],[2365,2368],{"type":27,"tag":2256,"props":2366,"children":2367},{"disabled":18,"type":2258},[],{"type":33,"value":2369}," 是否定义了跨服务 SLA",{"type":27,"tag":50,"props":2371,"children":2373},{"className":2372},[2253],[2374,2377],{"type":27,"tag":2256,"props":2375,"children":2376},{"disabled":18,"type":2258},[],{"type":33,"value":2378}," 是否能独立灰度和回滚",{"type":27,"tag":309,"props":2380,"children":2382},{"id":2381},"经营收益层",[2383],{"type":33,"value":2381},{"type":27,"tag":46,"props":2385,"children":2387},{"className":2386},[2248],[2388,2397,2406,2415],{"type":27,"tag":50,"props":2389,"children":2391},{"className":2390},[2253],[2392,2395],{"type":27,"tag":2256,"props":2393,"children":2394},{"disabled":18,"type":2258},[],{"type":33,"value":2396}," 是否明确这次拆分解决的核心痛点",{"type":27,"tag":50,"props":2398,"children":2400},{"className":2399},[2253],[2401,2404],{"type":27,"tag":2256,"props":2402,"children":2403},{"disabled":18,"type":2258},[],{"type":33,"value":2405}," 是否有优化前后的指标对比",{"type":27,"tag":50,"props":2407,"children":2409},{"className":2408},[2253],[2410,2413],{"type":27,"tag":2256,"props":2411,"children":2412},{"disabled":18,"type":2258},[],{"type":33,"value":2414}," 是否评估了平台与运维成本",{"type":27,"tag":50,"props":2416,"children":2418},{"className":2417},[2253],[2419,2422],{"type":27,"tag":2256,"props":2420,"children":2421},{"disabled":18,"type":2258},[],{"type":33,"value":2423}," 是否有阶段性止损点",{"type":27,"tag":174,"props":2425,"children":2426},{},[],{"type":27,"tag":178,"props":2428,"children":2430},{"id":2429},"总结",[2431],{"type":33,"value":2429},{"type":27,"tag":35,"props":2433,"children":2434},{},[2435],{"type":33,"value":2436},"把服务拆分这件事讲透，可以收敛成 5 句话：",{"type":27,"tag":140,"props":2438,"children":2439},{},[2440,2448,2456,2464,2472],{"type":27,"tag":50,"props":2441,"children":2442},{},[2443],{"type":27,"tag":124,"props":2444,"children":2445},{},[2446],{"type":33,"value":2447},"服务边界首先是业务责任边界，不是代码目录边界。",{"type":27,"tag":50,"props":2449,"children":2450},{},[2451],{"type":27,"tag":124,"props":2452,"children":2453},{},[2454],{"type":33,"value":2455},"强一致绑定深、总是一起改的能力，不要为了“看起来先进”硬拆。",{"type":27,"tag":50,"props":2457,"children":2458},{},[2459],{"type":27,"tag":124,"props":2460,"children":2461},{},[2462],{"type":33,"value":2463},"真正值得拆的服务，通常同时具备独立发布、独立扩容和独立 owner。",{"type":27,"tag":50,"props":2465,"children":2466},{},[2467],{"type":27,"tag":124,"props":2468,"children":2469},{},[2470],{"type":33,"value":2471},"微服务不是降低复杂度，而是把复杂度转移到边界治理。",{"type":27,"tag":50,"props":2473,"children":2474},{},[2475],{"type":27,"tag":124,"props":2476,"children":2477},{},[2478],{"type":33,"value":2479},"最稳的路径是先模块化、再候选拆分、最后渐进迁移。",{"type":27,"tag":35,"props":2481,"children":2482},{},[2483],{"type":33,"value":2484},"如果你只记住一句话，我希望是这一句：",{"type":27,"tag":104,"props":2486,"children":2487},{},[2488],{"type":27,"tag":35,"props":2489,"children":2490},{},[2491],{"type":33,"value":2492},"好的微服务拆分，不是把系统切得更碎，而是把责任切得更清楚。",{"type":27,"tag":35,"props":2494,"children":2495},{},[2496],{"type":33,"value":2497},"否则最后你得到的，不是服务化，而是——",{"type":27,"tag":35,"props":2499,"children":2500},{},[2501],{"type":27,"tag":124,"props":2502,"children":2503},{},[2504],{"type":33,"value":2505},"把一个大泥球，捏成了很多个小泥球。",{"type":27,"tag":2507,"props":2508,"children":2509},"style",{},[2510],{"type":33,"value":2511},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":1430,"depth":1430,"links":2513},[2514,2517,2526,2533,2541,2548,2554,2557,2558,2561,2567],{"id":180,"depth":1409,"text":183,"children":2515},[2516],{"id":311,"depth":1430,"text":314},{"id":376,"depth":1409,"text":379,"children":2518},[2519,2520,2525],{"id":382,"depth":1430,"text":385},{"id":516,"depth":1430,"text":519,"children":2521},[2522,2523,2524],{"id":533,"depth":1447,"text":536},{"id":544,"depth":1447,"text":547},{"id":555,"depth":1447,"text":558},{"id":594,"depth":1430,"text":597},{"id":637,"depth":1409,"text":640,"children":2527},[2528,2529,2530,2531,2532],{"id":643,"depth":1430,"text":646},{"id":702,"depth":1430,"text":705},{"id":767,"depth":1430,"text":770},{"id":828,"depth":1430,"text":831},{"id":890,"depth":1430,"text":893},{"id":945,"depth":1409,"text":948,"children":2534},[2535,2539,2540],{"id":951,"depth":1430,"text":954,"children":2536},[2537,2538],{"id":967,"depth":1447,"text":970},{"id":978,"depth":1447,"text":981},{"id":989,"depth":1430,"text":992},{"id":1046,"depth":1430,"text":1049},{"id":1126,"depth":1409,"text":1129,"children":2542},[2543,2544,2545,2546,2547],{"id":1132,"depth":1430,"text":1135},{"id":1148,"depth":1430,"text":1151},{"id":1164,"depth":1430,"text":1167},{"id":1175,"depth":1430,"text":1178},{"id":1191,"depth":1430,"text":1194},{"id":1243,"depth":1409,"text":1246,"children":2549},[2550,2551,2552,2553],{"id":1254,"depth":1430,"text":1257},{"id":1293,"depth":1430,"text":1296},{"id":1332,"depth":1430,"text":1335},{"id":1348,"depth":1430,"text":1351},{"id":1666,"depth":1409,"text":1669,"children":2555},[2556],{"id":1817,"depth":1430,"text":1820},{"id":1906,"depth":1409,"text":1909},{"id":2020,"depth":1409,"text":2023,"children":2559},[2560],{"id":2097,"depth":1430,"text":2100},{"id":2236,"depth":1409,"text":2239,"children":2562},[2563,2564,2565,2566],{"id":2242,"depth":1430,"text":2242},{"id":2291,"depth":1430,"text":2291},{"id":2336,"depth":1430,"text":2336},{"id":2381,"depth":1430,"text":2381},{"id":2429,"depth":1409,"text":2429},"markdown","content:topics:engineering:microservice-boundary-splitting-guide.md","content","topics/engineering/microservice-boundary-splitting-guide.md","topics/engineering/microservice-boundary-splitting-guide","md",1777109948058]