知识卡片

QQvideo与MFC案例对照:不同目标驱动不同重大选择

普通读书笔记卡

内容

概念架构设计中充满选择——面对同一个”如何组织系统”的问题,不同的直指目标会导出截然不同的重大选择,两个简短案例可以对照说明这一点。腾讯QQvideo架构直指的目标是高性能(以及与之密切相关的可伸缩性),设计思想是不同功能垂直分离(针对视频、视频缩略图、静态Web内容、动态Web内容分别对待、区别处理),重大选择是首先垂直划分系统、而不是水平分层——如果架构师面对同样的Web系统场景,选择”水平分层+统一管理各类资源”还是”不同功能垂直分离+资源分别对待”,QQvideo选择了后者,因为不同类型的内容(视频这种大文件与静态网页这种小文件)在资源需求和访问模式上差异巨大,垂直划分能针对每种内容类型做专门优化,这是水平分层难以做到的。微软MFC(Microsoft Foundation Classes)架构直指的目标是提供比直接”使用Win32 API”更方便的应用开发支持——微软重视对开发者的支持,是因为平台和应用是互补品关系,Windows平台上的互补应用产品越丰富,就越能吸引和”拴住”用户。MFC的设计思想是应用支持层+抽象引入层+Win32封装层的三层结构,而它的重大选择耐人寻味:微软此前尝试过AFX设计但失败了,转而采用”首先封装Win32 API”这个更朴素的策略——这个选择背后的逻辑是”更务实、更有可能成功”,而不是追求理论上最优雅的抽象。这两个案例合起来说明:概念架构的”重大选择”没有放之四海皆准的答案,QQvideo为了高性能选择垂直切分,MFC为了务实可行放弃了此前失败的抽象方案改采封装策略,选择的合理性始终要回到”直指目标”这个前提上判断,而不能脱离目标单独评价某个选择”先进”或”落后”。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第9章《概念架构设计》"9.1.3 案例2:腾讯QQvideo架构——高性能"及"9.1.4 案例3:微软MFC架构——简化开发"节(源文件:_epub-src/OEBPS/text00012.html) - 结论依据:原文说明QQvideo"直指目标:高性能……重大选择:首先垂直划分系统,而不是水平分层",MFC"重大选择:微软放弃了此前的AFX设计(AFX失败了),转而采用首先'封装Win32API'的策略,更务实、更有可能成功",直接支撑本卡片结论。 - 原始内容:如果你是一个Web系统的架构师,你会选择"水平分层+统一管理各类资源"这种设计呢,还是选择"不同功能垂直分离+资源分别对待"这种设计呢?腾讯QQvideo架构,选择的是后者……微软放弃了此前的AFX设计(AFX失败了),转而采用首先"封装Win32API"的策略,更务实、更有可能成功。