案例分析中最常出现「识别架构风格+对比优缺点+选择建议」的组合题。
| 风格类别 | 具体风格 | 核心特点 | 适用场景 |
|---|---|---|---|
| 数据流 | 管道-过滤器 | 组件通过管道连接,数据逐步处理。每个过滤器独立、可替换 | 编译器、数据处理管道、ETL |
| 批处理 | 数据成批处理,步骤间无交互 | 银行对账、报表生成 | |
| 数据中心 | 仓库风格 | 中央数据结构+独立组件。组件间不直接通信 | IDE、数据库系统、编程环境 |
| 黑板风格 | 不确定性求解,多专家协作。知识源通过黑板间接交互 | 语音识别、图像识别、AI推理 | |
| 调用/返回 | 分层风格 | 每层只调用下层,不可跨层。上层依赖下层 | OSI七层模型、Web应用 |
| 客户端/服务器 | C/S两层,客户端请求服务端响应 | 传统企业应用 | |
| 面向对象 | 封装、继承、多态,对象间通过消息通信 | 通用软件开发 | |
| 独立组件 | 事件驱动 | 事件发布-订阅模式。组件松耦合、异步通信 | GUI、消息系统、IoT |
| 微服务 | 独立部署的小服务,各自拥有独立数据库,通过轻量协议通信 | 大型互联网应用 |
| 阶段 | 主要活动 | 产出 |
|---|---|---|
| 1. 表述 | 描述ATAM方法;介绍业务驱动;展示架构 | 架构描述文档、业务目标 |
| 2. 调查与分析 | 识别架构方法;生成效用树;分析架构方法;确定风险/非风险/敏感点/权衡点 | 效用树、场景优先级 |
| 3. 测试 | 对高优先级场景进行深入分析;评估架构是否满足质量要求 | 分析结果、场景覆盖度 |
| 4. 报告 | 汇报ATAM评估结果 | 最终评估报告 |
效用树是ATAM的核心工具,将质量属性 → 具体场景 → (重要度, 实现难度)。结构如下:
| 质量属性 | 关注点 | 典型场景 | 实现策略 |
|---|---|---|---|
| 性能 | 响应时间、吞吐量、资源利用率 | 1000并发下响应<2s | 缓存、CDN、异步、负载均衡、数据库索引、连接池 |
| 可用性 | 故障恢复时间、正常运行百分比 | 单节点故障5s内切换 | 冗余部署、心跳检测、故障转移、熔断、限流 |
| 安全性 | 认证、授权、保密性、完整性、不可否认 | 抵抗SQL注入/XSS/CSRF攻击 | 加密(TLS/AES)、WAF、OAuth/JWT、RBAC、审计日志 |
| 可修改性 | 变更成本、可扩展性 | 新增支付渠道不超过3天 | 接口抽象、依赖注入、设计模式(策略/适配器)、配置外部化 |
| 可测试性 | 可控性、可观察性 | 模块可在隔离环境中测试 | 依赖注入、Mock、接口隔离、日志、健康检查端点 |
| 易用性 | 学习成本、操作效率、错误防护 | 新用户5分钟内完成核心任务 | 统一交互规范、用户研究、A/B测试、引导设计 |
| 模式 | 类型 | 解决的问题 | 关键点 |
|---|---|---|---|
| 策略模式 | 行为型 | 算法族在运行时可互换 | 定义接口,各算法独立实现。如:多种支付方式、多种排序算法 |
| 观察者模式 | 行为型 | 一对多依赖,状态变化自动通知 | 发布订阅、事件通知。如:消息推送、状态变更通知 |
| 工厂方法 | 创建型 | 延迟到子类决定实例化哪个类 | 创建对象解耦。如:日志工厂创建不同Logger |
| 抽象工厂 | 创建型 | 创建相关对象族 | 保证产品族的兼容。如:UI主题控件族(Win/Mac) |
| 适配器模式 | 结构型 | 接口不兼容的类协同工作 | 包装转换。如:旧系统接口适配新系统 |
| 装饰器模式 | 结构型 | 动态给对象添加职责 | 无侵入扩展。如:Java I/O流包装 |
| 代理模式 | 结构型 | 控制对象访问 | 远程代理、保护代理、虚拟代理 |
| 模板方法 | 行为型 | 定义算法骨架,子类实现具体步骤 | 好莱坞原则:"别调用我,我会调用你" |
| 责任链 | 行为型 | 多个对象依次处理请求 | 审批流程、过滤器链、拦截器 |
| 单例模式 | 创建型 | 类只有一个实例 | 配置管理器、连接池、线程池 |
| 选择 | 含义 | 典型产品 |
|---|---|---|
| CP (一致性+分区容错) | 牺牲可用性,保证强一致性 | ZooKeeper、etcd、HBase |
| AP (可用性+分区容错) | 牺牲强一致性,保证高可用 | Cassandra、Eureka、DynamoDB |
| CA (一致性+可用性) | 无法容忍网络分区(不现实) | 传统关系型数据库(单机) |
BA (Basically Available - 基本可用) + S (Soft State - 软状态) + E (Eventually Consistent - 最终一致性)
| 方案 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 2PC | 协调者+参与者,两阶段提交 | 强一致性 | 同步阻塞、单点故障、数据不一致风险 |
| TCC | Try-Confirm-Cancel | 业务层控制、性能好 | 代码侵入大、需实现补偿 |
| Saga | 长事务拆为多个本地事务+补偿 | 高可用、适合长事务 | 需实现补偿逻辑 |
| 本地消息表 | 本地事务+消息表保证最终一致 | 实现简单 | 消息表和业务表耦合 |
| 组件 | 功能 | 典型技术 |
|---|---|---|
| 服务注册与发现 | 服务实例动态注册,客户端动态发现 | Nacos、Consul、Etcd、Eureka |
| 负载均衡 | 请求分发到多实例 | Ribbon、Nginx、Spring Cloud LoadBalancer |
| 熔断器 | 故障服务快速失败,防止级联故障 | Sentinel、Hystrix、Resilience4j |
| API网关 | 统一入口、认证、限流、路由 | Spring Cloud Gateway、Kong、Zuul |
| 配置中心 | 配置统一管理、动态刷新 | Nacos、Apollo、Spring Cloud Config |
| 链路追踪 | 请求跨服务追踪 | SkyWalking、Jaeger、Zipkin |
| 维度 | 策略 | 说明 |
|---|---|---|
| 水平拆分 | Range 分片 | 按范围分片(如按时间、ID范围)。易实现,但可能热点不均 |
| Hash 分片 | 按哈希值分片。数据均匀分布,但扩容迁移困难 | |
| 目录分片 | 通过路由表查找。灵活,但需维护路由表 | |
| 垂直拆分 | 按业务 | 将不同业务的表分到不同库。如:用户库、订单库、商品库 |
| 数据库类型 | 特点 | 适用场景 | 典型产品 |
|---|---|---|---|
| 关系型(SQL) | ACID、强Schema、Join查询 | 金融、ERP、复杂关联查询 | MySQL、PostgreSQL |
| 键值存储 | 高性能KV读写 | 缓存、Session、购物车 | Redis、Memcached |
| 文档数据库 | Schema灵活、JSON文档 | 内容管理、商品目录 | MongoDB、CouchDB |
| 列族数据库 | 列存储、高压缩比 | 日志分析、时序数据 | HBase、Cassandra |
| 图数据库 | 节点+关系模型 | 社交网络、推荐系统、知识图谱 | Neo4j、JanusGraph |
| 搜索引擎 | 全文检索、倒排索引 | 搜索服务、日志分析 | Elasticsearch、Solr |
| 策略 | 说明 | 适用场景 |
|---|---|---|
| Cache Aside | 读:先查缓存,miss则查DB并写回缓存。写:更新DB后删缓存 | 读多写少(最常用) |
| Read Through | 缓存层代理读DB。缓存miss时缓存组件自动加载 | 缓存逻辑集中管理 |
| Write Through | 写入时同步写缓存+DB | 数据一致性要求高 |
| Write Behind | 写入时只写缓存,异步批量写DB | 写入频率高、允许短暂不一致 |
| 概念 | 说明 | 技术方案 |
|---|---|---|
| 认证 | 验证"你是谁" | 用户名密码、短信验证、OAuth2.0、OIDC、SAML、生物识别 |
| 授权 | 确定"你能做什么" | RBAC(角色)、ABAC(属性)、ACL(访问控制列表) |
| 模式 | 适用场景 | 关键参数 |
|---|---|---|
| 授权码模式 | 有后端的Web应用(最安全) | code → access_token (推荐) |
| 密码模式 | 高度信任的应用 | 直接传用户名密码获取token |
| 客户端凭证 | 服务间通信 | client_id + client_secret |
| 隐式模式 | 纯前端SPA(已不推荐) | 直接返回token(有安全风险) |
| 攻击 | 原理 | 防御 |
|---|---|---|
| SQL注入 | 恶意SQL拼接 | 参数化查询/预编译、ORM、输入校验 |
| XSS | 注入恶意脚本 | 输出编码、CSP、HttpOnly Cookie |
| CSRF | 伪造用户请求 | CSRF Token、SameSite Cookie、Referer校验 |
| DDoS | 大量请求耗尽资源 | CDN、WAF、限流、黑名单、流量清洗 |
| 中间人攻击 | 窃听/篡改通信 | HTTPS/TLS、证书校验、HSTS |
典型问题: "请分析该系统的架构风格,并说明理由"
答题步骤:
典型问题: "分析该系统需要关注哪些质量属性,并给出实现方案"
答题步骤:
典型问题: "对比[技术A]和[技术B]的优缺点,并给出选择建议"
答题步骤:
典型问题: "请设计XX模块的架构方案"
答题步骤: