分布式与架构反模式与 Microsoft Cloud Antipatterns

共 20 题
#

1. Dead End 在引入难以替换的技术栈的后果。

A Dead End 一定发生在最新技术栈上
B Dead End 指技术栈非常成熟可靠
C Dead End 只影响开发速度不影响迁移
D 在不可替换技术栈上投入大量开发,导致后期迁移成本巨大,是 Dead End 反模式 ✓ 正确答案
#

2. Monolithic Persistence 在关系数据库承担队列、文档、图、时序的滥用。

A 关系数据库适合所有数据形态
B 用关系数据库承受队列、时序、文档、图等所有职责是反模式,应改用多语言持久化按数据形态选存储 ✓ 正确答案
C 用多种数据库是反模式
D 队列消息应存关系库
#

3. Cargo Cult 在不理解原理下照搬实践的工程问题。

A 照搬实践一定正确
B 照搬实践但不懂原理,导致实践不适用与形式主义,是 Cargo Cult 反模式 ✓ 正确答案
C Cargo Cult 只涉及代码,不涉及架构
D Cargo Cult 指代码写得混乱
#

4. Chatty I/O 在远程调用过细粒度的网络往返。

A 细粒度的远程调用越多越好,便于解耦
B Chatty I/O 只影响前端
C 网络往返次数不影响性能
D Chatty I/O 是大量细粒度远程调用造成的网络往返过多,应通过聚合、批量化、粗粒度接口减少往返 ✓ 正确答案
#

5. Extraneous Fetching 在 SELECT * 或一次性读取不必要数据的工程影响。

A SELECT * 读取所有列是高效做法
B Extraneous Fetching 读取不必要数据,浪费 IO 带宽与内存,应只取所需列、分页、避免 SELECT * ✓ 正确答案
C 读取多余数据不影响性能
D 大字段应全量读取
#

6. Improper Instantiation of Instances 在 new 操作在频繁路径上的 GC 压力。

A 热路径上频繁 new 对象会加剧 GC 压力,应对象复用、减少临时对象 ✓ 正确答案
B 热路径上 new 对象无性能影响
C GC 压力与对象创建无关
D 应尽量多 new 对象池化
#

7. Lava Flow 在遗留系统死代码无法删除的反模式。

A Lava Flow 指代码整洁清晰
B 死代码有益于系统健壮性
C 遗留系统的死代码堆积且无人敢删,是 Lava Flow 反模式,应识别后安全清理 ✓ 正确答案
D 死代码应保留以防万一
#

8. Retry Storm 在失败时所有客户端同时重试的反模式。

A 重试越多越稳定
B 所有客户端同时重试有助于恢复
C 所有客户端同时重试会放大故障,应指数退避 + 抖动错开、限制次数、熔断兜底 ✓ 正确答案
D Retry Storm 与重试策略无关
#

9. Spaghetti Code 在 goto、回调地狱、Promise 嵌套的代码可读性。

A 深层嵌套提升可读性
B 回调地狱、深层 Promise 嵌套、goto 导致控制流混乱,是可读性差的 Spaghetti Code,应用 async/await、分层重构 ✓ 正确答案
C Spaghetti Code 指代码非常简洁
D 回调地狱是良好实践
#

10. Vendor Lock-In 在过度依赖云厂商专有服务的迁移代价。

A 专有服务迁移成本低
B 过度依赖云厂商专有服务导致迁移代价巨大,应多用开源/标准技术并预留适配层 ✓ 正确答案
C Vendor Lock-In 指使用开源软件
D 厂商专有服务无需迁移
#

11. Improper Cache Sizing 在缓存过小(频繁失效)与过大(浪费资源)的工程取舍。

A 缓存过小命中率低、频繁失效回源,过大浪费资源,应按访问分布与资源预算平衡容量 ✓ 正确答案
B 缓存越大越好,无需考虑成本
C 缓存容量与命中率无关
D 缓存应越小越好
#

12. Synchronous I/O 在同步阻塞 I/O 在高并发请求下的线程池耗尽。

A 异步 I/O 会降低并发
B 阻塞 I/O 在高并发下无问题
C 线程池耗尽不影响高并发
D 同步阻塞 I/O 在高并发下让线程阻塞等待,导致线程池耗尽,应改用异步/非阻塞 I/O ✓ 正确答案
#

13. Accumulated 技术债在交付压力下的不可逆债务。

A 技术债只在大型系统出现
B 技术债累积越多交付越快
C 技术债无需管理
D 交付压力下不断累积技术债会形成不可逆债务,应识别登记、设上限、定期偿还 ✓ 正确答案
#

14. Big Ball of Mud 在无结构、随意生长系统的识别。

A 无清晰分层、依赖混乱、随意生长的系统是 Big Ball of Mud,应分层模块化并渐进重构 ✓ 正确答案
B 无结构系统易于维护
C Big Ball of Mud 指代码非常结构化
D 依赖越乱越好
#

15. Busy Frontend 在前端加载所有数据、阻塞渲染的反模式。

A Busy Frontend 让前端加载所有数据、阻塞渲染,应后端聚合裁剪、分页懒加载、异步加载 ✓ 正确答案
B 前端应加载所有数据并处理,后端只出接口
C 大体积 JS 阻塞渲染无影响
D 前端逻辑越多越好
#

16. Distributed Monolith 在表面微服务但内部强耦合的反模式。

A Distributed Monolith 是良好的微服务实践
B 共享数据库有利于微服务独立
C 表面微服务但共享数据库、强耦合,既无微服务优势又增复杂度,是 Distributed Monolith ✓ 正确答案
D 微服务应共享领域模型
#

17. Mega Service 在过度聚合的微服务(反向微服务)。

A 微服务应承载所有职责
B 微服务越大越好
C Mega Service 是良好微服务
D 一个微服务承载过多职责、规模巨大,是 Mega Service,应按业务域拆分 ✓ 正确答案
#

18. NIH(Not Invented Here)在拒绝使用成熟库的工程问题。

A 重复造轮子有益
B 自研所有东西质量更高
C NIH 指过度使用第三方库
D 拒绝成熟库、自己造轮子,质量差、维护成本高,是 NIH 反模式,应优先采用成熟库 ✓ 正确答案
#

19. No Caching 在重复读相同数据的性能浪费。

A 重复读相同数据却不缓存,造成 DB 压力与延迟,应加入合理缓存 ✓ 正确答案
B 缓存没有必要
C 每次查库最有效率
D No Caching 指缓存过多
#

20. No-Fault Tolerance 在无重试、熔断、降级的单点故障设计。

A 无需容错机制
B 单点故障不影响系统
C 无重试、熔断、降级、冗余,单点故障导致整体不可用,是 No-Fault Tolerance,应引入超时重试熔断降级隔离与冗余 ✓ 正确答案
D 冗余副本浪费资源应避免