想象你是个手艺精湛的木匠,盖了十年房子,每一栋都结实漂亮。突然有一天,市政府请你担任一座新城的“总规划师”——不是让你亲手砌一堵墙,而是让你决定:道路怎么铺、水电管网怎么走、商业区和住宅区怎么摆、暴雨火灾来了怎么办。这就是架构师:从“把眼前这栋楼盖好”,变成“把整座城市设计好”。 这篇教程带你走一遍城市规划师的完整思路:角色转变(从木匠到规划师)、分布式系统(城市的供水供电网络)、性能优化(早晚高峰的路网)、安全架构(城市安保体系)、技术选型(建材与交通工具的选择)、跨团队协调(和各局委办打交道)、深度与广度平衡(既懂水电又懂交通)。读完你会明白,架构师不是职位更高、代码写得更多的人,而是用全局视野做取舍、用长期眼光做决策的人。

岗位关联

理解架构师的能力模型与成长路径,能帮你判断自己是否适合走工程路线,并为系统设计决策提供可落地的思考框架。

目录
  1. 可视化演示
  2. 角色定位转变
  3. 分布式系统基础
  4. 性能优化实践
  5. 安全架构设计
  6. 技术选型决策
  7. 跨团队协调能力
  8. 深度广度平衡
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示架构师角色的核心能力要求、从工程师到架构师的成长路径与技术选型决策方法论三个关键维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

架构师多领域能力雷达 分布式系统与架构设计是核心硬技能 跨团队沟通协调能力同样关键 Skill = Depth + Breadth + Communication 架构师需在技术深度和广度上同步精进

角色定位转变

木匠盖房,关注的是这面墙直不直、这个榫卯紧不紧。但城市规划师的第一课,是学会“不亲手砌墙”。他站在城市上空看全局:哪条路要八车道,哪片区域要预留绿地,哪里埋主干管道——这些决策直接影响未来十年城市会不会堵、会不会涝。工程师到架构师的转变,正是从“我的代码块”升维到“整个系统的形态”。

技术世界里,“系统形态”体现在模块边界怎么画、数据在系统里怎么流动、失败时系统怎么表现。资深工程师习惯把每个函数写得漂亮,架构师却要回答:这个服务该不该拆?消息队列放在哪?如果数据库挂了,怎么不让全站瘫痪?这些问题的答案,往往取决于他对“复杂度”有多敏感。

系统复杂度有个残酷的数学事实:模块之间的通信链路数是 N(N-1)/2。8 个模块两两交互是 28 条链路,16 个模块是 120 条。架构师最重要的直觉,就是“每多一个模块,系统都不是变难一点,而是变难一大截”,所以他拼命控制边界、减少不必要的交互,就像规划师不会为了好看就多修十座桥。

所以优秀架构师就像资深规划师一样,第一反应不是“再建一条路”,而是“这条路真的需要吗”。他珍惜每次新增模块的机会,因为每多一个街区,城市的交通图就复杂一分。判断一个工程师有没有架构师潜质,就看他是否天然地对“新增一个东西”感到谨慎。

C(N)=N(N−1)2\displaystyle C(N) = \frac{N(N-1)}{2}
通信链路数随模块数平方级增长:模块越多,系统越难维护、越容易出错,这就是架构师必须控制拆分粒度的根本原因。
  1. N(模块总数)城市里有多少个需要互相连通的街区或服务模块,直接决定通信规模。
    N\displaystyle N
  2. N-1(单个模块的潜在交互数)任意模块需要和除自己之外的其余模块建立联系。
    N−1\displaystyle N-1
  3. N(N-1)/2(链路总数)两两配对的组合数,8 个模块代入即 8×7÷2=28 条链路。
    N(N−1)2\displaystyle \frac{N(N-1)}{2}

分布式系统基础

一个城市不可能靠一座水厂供水——水管太长水压不够,水厂一坏全城停水。规划师的做法是分区建厂、管网互联、互为备份。这套思路映射到软件世界,就是“分布式系统”:把庞大的单体系统打散成多个独立部署、独立扩容的服务,每个服务管好自己的“辖区”(业务领域)。

但拆分是要付代价的:数据不再集中在同一处,一致性、可用性、分区容错三件事难以兼得,这就是 CAP 定理。简单理解:网络分区(P,即网络总有可能断)是客观存在的,你必须接受;剩下的选择是——每次读写都严格一致但可能拒绝服务(CP),还是服务永远在线但数据短暂不一致(AP)。

架构师通常选择“最终一致性”:允许各副本短暂不同步,但通过消息补偿、对账任务把数据慢慢对齐。容错设计上则采用超时、重试、熔断器三板斧——就像城市供电系统的“备用线路”和“自动跳闸”,某个电站挂了,电流自动改道,不会全城停电。可用性的数学表达就是一个简单的幂运算。

这就是架构师眼里的“冗余思维”:宁可多花点成本建备份水厂,也不让全城居民大热天没水喝。他设计系统时,永远会问一句:某个节点万一挂了,谁顶上?计算与存储分离、服务容错与恢复,本质上都是在回答这一句话。

A=1−pn\displaystyle A = 1 - p^n
单组件故障率 p,配置 n 个冗余副本后,只有所有副本同时失效才不可用。这是架构师做高可用设计时最核心的公式。
  1. A(整体可用性)整个供水网络不中断的概率,也就是用户眼中的“系统可用率”。
    A\displaystyle A
  2. p(单组件故障率)单个水厂在单位时间内出故障的概率,p=0.01 对应 99% 的可用性。
    p\displaystyle p
  3. n(冗余副本数)互为备份的独立组件数量,比如两套供水系统构成双副本时 n=2。
    n\displaystyle n
  4. 1-p^n(多副本可用性)所有 n 个副本同时故障才会停水,整体故障率从 p 骤降到 p 的 n 次方;p=0.01、n=2 时可用性从 99% 提升到约 99.99%。
    1−pn\displaystyle 1 - p^n

性能优化实践

早晚高峰的城市,最怕的不是车多,而是某座桥一堵,半个城都瘫痪。规划师接到投诉,不会立刻把桥加宽,而是先派人去数车流:是桥本身窄,还是红绿灯配时不对,还是旁边工地占道?性能优化同理:不加缓存、不扩机器,先做 profiling(性能剖析)定位瓶颈。

瓶颈可能在慢 SQL、GC 停顿、锁竞争或网络 IO 上。架构师随身带着一条铁律——没有数据支撑的优化都是玄学。定位之后才用三板斧:缓存、异步化、扩容与限流。缓存是把热门商品放到了路边小卖部,不用每次都进城买;异步化是银行排队叫号,不是所有人挤在窗口;扩容与限流则是高峰期多开入口、超出接待能力先排队。

阿姆达尔定律(Amdahl's Law)告诉架构师:无论加多少并行资源,加速比都被串行部分卡死。就像城市里再宽的快速路,最终要通过的那座单行窄桥永远是车流量的天花板。

规划师和架构师都明白:与其把整条街都修成十车道,不如把那个唯一的窄桥先重建。优化最大的杠杆永远在瓶颈上。缓存分层、异步化改造、扩容与限流,全是围绕瓶颈展开的组合拳,而不是上来就堆料。

S=1(1−f)+fm\displaystyle S = \frac{1}{(1-f) + \frac{f}{m}}
f 是可并行化的任务占比,m 是并行度(核数/机器数)。当 m 趋于无穷大时,最大加速比趋近 1/(1-f)。
  1. f(并行任务比例)整个任务里可以同时多车道行驶的比例,比如 80% 的计算能并行处理。
    f\displaystyle f
  2. 1-f(串行部分)必须排队依次通过的路段,这部分再堆资源也没用,直接决定加速比上限。
    1−f\displaystyle 1-f
  3. m(并行度)同时工作的处理器核心或服务器数量,相当于扩了多少条并行车道。
    m\displaystyle m
  4. S(加速比)加资源后比原来快几倍。若 f=0.8,即使 m 无穷大,S 也最多只有 5 倍——所以要先优化串行的窄桥,而不是盲目加机器。
    1(1−f)+fm\displaystyle \frac{1}{(1-f)+\frac{f}{m}}

安全架构设计

一座城市的安全不是靠一道十米高的城墙,而是层层设防:城市入口安检、街区门禁、小区单元锁、住户保险柜。万一某层被突破,后面的防线还能兜住,这就是“纵深防御”。架构师做安全设计时,默认心态是“假设会被攻破”——不是防不住,而是即便攻破一层,也不至于全盘皆输。

软件安全架构正是这样分层落地:网络层有防火墙和 WAF(Web 应用防火墙),应用层有认证(你是谁)与授权(你能干什么),数据层有加密(存储时锁进保险柜,传输时走密封管道),全程有审计日志(记录谁在什么时候开过保险柜,出了事能追责)。

安全设计背后有一个简洁的风险公式:风险 = 漏洞 × 威胁 × 影响。架构师不可能消灭所有漏洞,但可以通过加固降低漏洞概率、通过加密和权限制降低影响。哪怕威胁很大,只要核心数据加了密、权限边界清晰,攻击者打进来也拿不到值钱的东西,损失就被摁住了。

城市规划师不会因为小偷多就封死所有窗户——城市要通风要采光。架构师也不追求绝对安全,而是把风险降到一个可接受的水平,同时让系统仍然好用。认证授权体系、数据加密策略、安全审计追踪,都是在用最小的代价,把 V、T、I 三个旋钮调到合适的位置。

R=V×T×I\displaystyle R = V \times T \times I
风险由漏洞、威胁、影响三者相乘。任何一个因子趋近于零,整体风险就会被大幅压缩。这是做安全投入排序时的判断依据。
  1. V(漏洞)系统里未被修补的弱点数量,相当于城里没锁的窗户有多少扇。
    V\displaystyle V
  2. T(威胁)试图利用漏洞的攻击者强度与频率,相当于窗外有多少小偷在转悠。
    T\displaystyle T
  3. I(影响)一旦被攻破,数据、资金、声誉的损失量级,相当于保险柜里现金的多少。
    I\displaystyle I
  4. R(风险)三者相乘的总体风险值。任何一个因子趋近于零,整体风险就相应急剧下降——所以哪怕威胁 T 很大,只要加密到位(I 变小),风险也可控。
    R=V×T×I\displaystyle R = V \times T \times I

技术选型决策

规划师给新城选路面材料,不会直接挑最贵的花岗岩,而是问:财政预算多少?当地冬天会不会结冰?十年后车流量增长几倍?选型不是比谁高档,而是比谁适合。架构师选技术栈同样要回答一串问题:这个方案解决的核心问题是什么?团队熟悉吗?社区还活跃吗?它会带我们走向好升级的路,还是一条死胡同?

技术选型是架构师最贵的决策之一,因为错了要“全城返工”。成熟的架构师会把候选方案放进一张决策矩阵:成本列(学习成本、运维成本、许可费用)、收益列(性能、开发效率、稳定性)、风险列(演进空间、社区健康度、团队能力匹配度),然后逐项打分,而不是凭个人喜好拍板。

决策工具中最常用的指标是投入产出比(ROI)。注意,这里的“成本”不只是采购价,而是总拥有成本——包括团队学习时间、基础设施开销、迁移过程的风险代价。架构师不会选“最强的”,只会选“最合适的”:即使某个方案性能高出 50%,如果团队没人会、社区快凉了,它的真实 ROI 反而更低。

就像规划师在花岗岩和沥青之间选了沥青,不是因为买不起花岗岩,而是省下的钱足够修两座立交桥。架构师的技术选型,本质是城市预算的分配艺术。需求目标对齐、成本收益权衡、社区生态评估、演进路线规划,四步走完,决策自然浮出水面。

ROI=B−CC\displaystyle \mathrm{ROI} = \frac{B - C}{C}
ROI 衡量每投入 1 元成本能换回多少净收益。架构师用它把“感觉哪个好”变成“算出来哪个值”。
  1. B(预期收益)新方案在性能、开发效率、稳定性等多方面带来的价值总和。
    B\displaystyle B
  2. C(总拥有成本)采购、学习、运维、迁移、风险折损的全部代价,不只看买价。
    C\displaystyle C
  3. B-C(净收益)扣除成本后实际多出来的价值,相当于修完路后城市每年省下的运输费用。
    B−C\displaystyle B - C
  4. ROI(投入产出比)每投入 1 元成本换回的净收益倍率。ROI > 0 才值得做,且要结合置信度一起看——别把估算当精确值。
    B−CC\displaystyle \frac{B-C}{C}

跨团队协调能力

规划师画好蓝图,不代表工程能落地。他得和交通局谈路口拓宽、和环保局过环评、和财政局争预算。图纸再完美,推不动相关方就是废纸。架构师也一样——技术方案写得再漂亮,让各团队理解、接受并执行,才是真本事。这就是为什么架构师的职位越高,花在沟通上的时间反而越多。

跨团队协调的核心是“接口契约”:两个部门不用事事开会,只要定好“你交付什么、我提供什么、边界在哪”,大家就能并行施工,互不踩脚。在软件世界里,这就是服务间的 API 契约、消息格式和 SLA(服务等级协议)。契约越清晰,协作越像流水线;契约模糊,每天都是扯皮会。

架构师还要当好“翻译官”:把技术风险翻译成业务语言(“这个方案多花 20 万,但能避免双十一宕机”),把业务诉求翻译成技术指标(“要支撑 100 万并发,需要扩容到 30 台机器”)。推动决策靠的不是职位权力,而是充分的信息、明确的风险说明,以及让各方都有收益的方案设计。沟通渠道数量同样服从一个组合公式。

聪明的规划师会设立“联席会议室”集中决策,聪明的架构师则用接口契约和设计文档减少一 对一的扯皮。协调能力不是话多,而是用机制让信息高效流动。干系人沟通、接口契约管理、技术决策推动、知识传递机制,每一项都是围绕“减少沟通熵增”展开的。

C=P(P−1)2\displaystyle C = \frac{P(P-1)}{2}
参与协作的团队越多,沟通渠道越爆炸。架构师靠契约和机制压缩无效沟通,而不是指望自己“多开几次会”。
  1. P(参与团队数)同一个大项目里需要相互协作的独立团队数量。
    P\displaystyle P
  2. P(P-1)/2(沟通渠道数)两两团队之间都建立直接沟通时的渠道总数,5 个团队就是 10 条线。
    P(P−1)2\displaystyle \frac{P(P-1)}{2}
  3. C(协调成本)与沟通渠道数量成正比的组织协作开销。团队数翻倍,沟通成本近似翻四倍,所以要尽量减少不必要的人员牵扯。
    C\displaystyle C

深度广度平衡

总规划师不是样样都比水电工程师懂,但他必须懂到能对话:知道水管多粗够用、电塔为什么要建在山脊、立交桥的匝道坡度上限。同时,他又得在某一个方向扎得足够深——比如交通流量建模——否则无法获得工程师们的信任。这就是经典的 T 型能力结构。

T 的竖杠是深度:至少在一两个领域(如分布式系统、存储引擎)有真正的洞察,能设计、能排障、能拍板。T 的横杠是广度:了解前端、后端、运维、安全、业务,知道每个环节的约束和成本,才能在全局做取舍。只有深度没有广度,容易“手里有锤子看啥都是钉子”;只有广度没有深度,则沦为“什么都会一点、什么都不精”的专家型票友。

广度怎么积累?读行业经典、跟踪顶级会议论文与真实架构案例、横向研究其他公司的演进路线。深度怎么保持?亲自啃最难的模块、写架构设计文档、做系统复盘。架构师的成长不是升职那天发生的,而是每次复盘与复盘之间的持续积累。如果把深度和广度看成两个因子,它们对职业价值的贡献是相乘的关系。

就像这座新城的规划师,因为懂水管又懂博弈,所以能让水电、交通、财政各归其位。架构师的终极目标不是“什么都懂一点”,而是“有一个深不可测的洞,和一座宽广的桥”。持续学习信号、复盘沉淀体系、行业视野拓展,都是在为这个 T 字添砖加瓦。

V=D×B\displaystyle V = D \times B
深度和广度是乘法而非加法:广度让深度有施展的舞台,深度让广度不流于表面。缺了任何一项,总价值都会大打折扣。
  1. D(专业深度)你在核心领域解决问题的穿透力,相当于 T 型的竖杠,能打硬仗。
    D\displaystyle D
  2. B(认知广度)你理解的相关领域数量与视野宽度,相当于 T 型的横杠,能跨界协调。
    B\displaystyle B
  3. V(综合价值)深度与广度相乘产生的职业能力总价值,任何一项接近零都会让成果大幅缩水。
    V=D×B\displaystyle V = D \times B

AI 应用场景

AI 辅助容量规划与成本预估

阶段:架构设计 / 容量评估

解决的问题:传统容量规划靠架构师用经验公式“拍脑袋”,遇到大促或流量突增容易低估或高估。低估导致宕机,高估导致成本浪费。AI 可以结合历史流量曲线、业务日历和外部事件,预测未来峰值 QPS,并自动给出扩容方案与成本对比。

具体案例:某电商平台每年双十一前,架构师团队用 AI 模型分析过去三年的分钟级流量数据,预测出今年峰值将达到平时的 8 倍,并据此推荐“30 台常规 + 20 台弹性”的混合云方案。相比往年人工预估,服务器成本节省约 25%,且大促期间零宕机。

AI 链路根因分析:分布式排障

阶段:性能优化 / 可观测性

解决的问题:分布式系统里一次请求会穿过几十个服务,出问题时传统排障要翻遍调用链日志逐层排查,动辄数小时。AI 对链路追踪(Trace)和指标数据做根因分析,能快速锁定“哪个服务最可能是元凶”,帮助架构师把优化资源集中到真正的瓶颈上。

具体案例:订单超时率突然从 0.5% 升到 15%,AI 排障助手在 3 分钟内定位到支付服务的某个慢 SQL——凌晨的定时任务占用了大量数据库连接,导致在线支付被阻塞。架构师据此把定时任务迁移到专用库,超时率立即回落。

AI 技术选型知识助手

阶段:技术调研 / 决策支持

解决的问题:架构师做技术选型通常要花数周翻文档、跑 POC、问社区。AI 知识库(RAG 技术)可以把公司内部的历史决策记录、故障复盘与外部社区生态数据聚合起来,按架构师的问题生成对比报告,大幅压缩调研周期。

具体案例:新项目需要选消息队列,架构师向助手提问“Kafka、Pulsar、RocketMQ 哪个更适合我们的峰值场景?”。助手基于公司历史运维数据和社区活跃度,生成一张含 12 项指标的对比表,并给出推荐理由与风险提示,调研时间从 3 周缩短到 3 天。

Python 演示

python31 行
class CapacityPlanner:    def __init__(self, qps, latency, cpu_limit=0.7, replicas=2):        self.qps = qps        self.latency = latency        self.cpu_limit = cpu_limit        self.replicas = replicas        self.surge_count = 0     def single_core_rps(self):        return round(1.0 / self.latency, 1)     def need_cores(self, peak_qps):        base = peak_qps / (self.single_core_rps() * self.cpu_limit)        if peak_qps > self.qps * 1.5:            self.surge_count += 1        return round(base * self.replicas, 1)     def report(self, peak_qps):        return {            "peak_qps": peak_qps,            "single_core_rps": self.single_core_rps(),            "need_cores": self.need_cores(peak_qps),            "surge_alert": peak_qps > self.qps * 1.5,        }  if __name__ == "__main__":    planner = CapacityPlanner(qps=200, latency=0.05, cpu_limit=0.7, replicas=2)    for peak in [200, 400, 800]:        print(planner.report(peak))    print("surge_count:", planner.surge_count)
目的:模拟架构师做容量规划的核心计算——用延迟推算单核能力,再按峰值、CPU 水位线和副本数估算所需总核数。
  1. self.surge_count = 0用 _count 后缀记录突发流量次数,避免实例属性和方法同名产生遮蔽。
  2. def single_core_rps(self):基于排队论近似:单核每秒能处理的请求数约等于平均延迟的倒数。
  3. base = peak_qps / (self.single_core_rps() * self.cpu_limit)算出满足峰值所需的基础核数;除以 CPU 水位线相当于预留 30% 的冗余,就像城市规划预留道路余量。
  4. if peak_qps > self.qps * 1.5:峰值超过日常 1.5 倍就记一次突发流量,对应架构师关注的“洪峰预警”。
  5. return round(base * self.replicas, 1)最终核数还要乘副本数,保证单个副本故障时另一个能顶上。

常见误区

误区我一直以为架构师是团队里编码能力最强的人,升到架构师就是继续写更难的代码,把最难啃的模块都交给他就对了。

正解架构师的核心竞争力是设计决策能力:模块边界怎么画、技术栈怎么选、风险怎么权衡。代码能力只是入场券,决定成败的是全局判断——就像最厉害的木匠不等于合格的城市规划师,他可能很久不亲自动手砌墙了。

为何常见:大部分人只近距离观察过工程师,没见过架构师怎么工作,容易把职级晋升理解成“更高级的码农”,忽略了从执行者到决策者的角色质变。

误区微服务是趋势,所以把系统拆成几十个小服务,肯定比一个大单体更先进、更好维护,拆得越多越灵活。

正解拆分带来独立部署的灵活性,也带来通信链路的爆炸式增长:N 个服务的链路数是 N(N-1)/2。拆分粒度应该由团队规模和业务边界决定,团队就十个人却拆出二十个服务,光是联调和排障就能拖垮交付节奏。

为何常见:只看到微服务“独立部署”的优点,没算通信、运维、排障的隐性成本,就像只看新城区漂亮,却不管居民每天通勤要多花一小时。

误区系统变慢了?先加一层缓存,再不行就上 Redis。缓存是万能药,加上就快了,效果立竿见影。

正解缓存只是三板斧(缓存、异步化、扩容限流)之一,而且用错会引入数据不一致。正确顺序是先做 profiling 定位瓶颈,可能是慢 SQL、GC 停顿、锁竞争或网络 IO。直接加缓存很可能掩盖了真正的元凶,系统迟早以更难看的方式崩回来。

为何常见:缓存是最直观、最容易看到“效果”的手段,符合“慢就加快读取”的直觉;但性能问题的根因往往是某个串行瓶颈,而不是读取路径不够快。

误区安全无小事,直接上最好的防火墙、最贵的加密芯片、最复杂的权限系统,肯定最安全,预算不是问题。

正解安全的目标是风险可控,不是绝对安全。R = V × T × I,只要把加密和数据隔离做到位(影响 I 趋近于零),整体风险就大幅下降。过度安全会拖垮性能、毁掉体验,最后用户绕开系统走线下流程,反而更不安全。

为何常见:安全事故的教训让人倾向“花钱买安心”,却忽略了安全和成本、体验之间需要架构师做精细权衡,而不是简单堆料。

误区架构师是高技术岗位,写好设计文档就完成任务了,推动落地是项目经理的事。开会、对齐、催进度太“不技术”了。

正解方案不被团队理解等于没有方案。架构师必须做跨团队协调:定接口契约、翻译业务语言、推动决策落地、搭知识传递机制。协调成本随参与人数指数增长,这正是架构师最值钱也最难的软技能之一。

为何常见:行业普遍把“技术”和“沟通”对立起来,以为沟通多的人技术都不行;实际上架构师一半的工作发生在组织里,纯技术方案推不动就是零。

面试题

Q1. 工程师到架构师,核心能力的变化是什么?

单选题 · easy

  • A.代码写得更快
  • B.全局设计决策← 正确答案
  • C.只负责画图
  • D.完全不再写码

答案:B。架构师的核心是全局设计决策——模块边界、技术选型、风险权衡,而不是更快地写代码。C 和 D 是极端化的误解,架构师需要写代码验证设计,也绝不只是画图。A 停留在工程师的执行层思维。

Q2. CAP 定理中的 C 指的是什么?

单选题 · easy

  • A.数据一致性← 正确答案
  • B.系统容量
  • C.硬件成本
  • D.缓存命中率

答案:A。CAP 的 C 是 Consistency(一致性),指所有节点在同一时刻看到相同数据;A 可用性、P 分区容错性是另外两个要素。B、C、D 是同名干扰项,记住 “一致、可用、分区” 三兄弟即可。

Q3. 8 个微服务两两全部互调,共有多少条通信链路?

单选题 · mid

  • A.二十八条← 正确答案
  • B.三十二条
  • C.二十四条
  • D.六十四条

答案:A。通信链路数 = N(N-1)/2 = 8×7/2 = 28 条。这题考架构师对复杂度增长的直觉:链路数随模块数平方级增长,所以拆分微服务时一定要控制数量,否则通信成本会吞掉拆分带来的收益。

Q4. 缓存分层最合理的放置位置是?

单选题 · mid

  • A.本地内存和 CDN← 正确答案
  • B.数据库表加索引
  • C.应用日志文件里
  • D.放在审计系统里

答案:A。缓存应放在离数据消费最近的位置:本地内存缓存热点、CDN 缓存静态资源、分布式缓存(如 Redis)缓存共享数据。索引属于数据库优化而非缓存层;日志和审计系统存的是原始记录,缓存进去反而有害。

Q5. 纵深防御的核心思想是?

单选题 · easy

  • A.单点最强防线
  • B.多层防线组合← 正确答案
  • C.隐藏系统入口
  • D.完全禁止访问

答案:B。纵深防御强调多层防线组合——即使一层被突破,后续防线还能兜底,类似城市安检、小区门禁、家门锁的多层安保。单点最强防线一旦被攻破就全盘崩溃;隐藏入口和禁止访问要么不现实、要么牺牲可用性。

Q6. Amdahl 定律:串行占比 20%,并行核数无穷大时,最大加速比是多少?

单选题 · hard

  • A.五倍← 正确答案
  • B.十倍
  • C.四倍
  • D.二十倍

答案:A。最大加速比 = 1 / (1-f) = 1 / 0.2 = 5 倍。就算核数无限增加,那 20% 的串行部分永远卡着上限。这就是为什么架构师优化性能时,要先找串行瓶颈而不是盲目扩容。

Q7. 单机可用性为 99%,配置双副本(独立故障)后整体可用性约为多少?

单选题 · extreme

  • A.约 99.99%← 正确答案
  • B.约 99.00%
  • C.约 98.01%
  • D.约 99.50%

答案:A。双副本只有在两个副本同时故障时才不可用,整体故障率 = p² = 0.01² = 0.0001,可用性 = 1 - 0.0001 = 99.99%。C 是单点故障率相乘的误解;B 忽略了冗余带来的提升;D 没有对应任何标准计算结果。

Q8. 微服务拆分过细最典型的代价是什么?

单选题 · mid

  • A.链路通信成本激增← 正确答案
  • B.代码量自动减少
  • C.团队人数必然减少
  • D.数据库压力下降

答案:A。服务拆分过细会让通信链路按 N(N-1)/2 爆炸,联调、排障、运维成本飙升。代码量不会自动减少,团队人数和数据库压力也不一定下降,甚至可能因为分布式事务而更复杂。拆分粒度必须匹配团队规模和业务边界。

Q9. 架构师在跨团队推动技术决策时,通常需要做哪些工作?

多选题 · hard

  • A.明确接口契约← 正确答案
  • B.替所有人写代码
  • C.推动决策落地← 正确答案
  • D.隐瞒风险信息

答案:AC。架构师通过接口契约让团队并行施工,并通过信息同步和方案说服推动决策落地。替所有人写代码既不现实也不利于团队成长;隐瞒风险信息会毁掉信任,是架构师职业操守的大忌。

Q10. 缓存分层通常包含哪些层次?

多选题 · mid

  • A.本地内存缓存层← 正确答案
  • B.分布式缓存层← 正确答案
  • C.CDN 边缘节点层← 正确答案
  • D.数据库连接池层

答案:ABC。典型的缓存三层:本地内存(如 Caffeine)最快但各实例独立、分布式缓存(如 Redis)共享热点数据、CDN 把静态资源推到用户身边。连接池是管理数据库连接的机制,不是缓存层,属于常见干扰项。