在老师的点拨下,我们班的同学都阅读了《一线架构师实践指南》这本书的第三部分———Refined Architecture阶段,也就是细化架构阶段。
这部分开始讲述了一些细化架构的故事,接着总体论述细化架构,最后分次讲解逻辑架构,物理架构,运行架构,开发架构和物理架构,从概念到实践层层递进。总体的感觉和邹欣老师的《构建之法》有点似曾相识。都是先通过故事让读者有一个模糊的概念,之后直接点明核心,再细化讲解。
细化架构的故事有两个,第一个是架构和方案的关系:方案=项目+需求+架构。第二个故事是各个职业在讨论架构的定义,每个职业各抒己见,但都有盲人摸象的感觉。最后书中给的建议是尽可能全面的思考问题,尽可能全面的覆盖多个职业。这是一个很客观的评价,但在实际生活中有点理想化,个人感觉应该是尽量多的讨论,通过讨论选择最优解,明确方向。这样也会有事半功倍的效果。
总论部分对细化架构进行区分讨论,明确什么是细化架构。介绍了RUP4+1视图和SEI3视图,每一种视图都是对整个架构的一种思考模式,SIE3视图包括模块视图,组件-连接器视图,分配视图;RUP4+1视图包括用例视图,逻辑视图,开发视图,进程视图和物理视图。
逻辑架构部分讲解的是如何划分子系统,有三种方法,分层的细化,分区的引入和机制的提取。划分子系统有四个原则:a.职责不同的单元划归不同子系统,b.通用性不同的单元划归不同子系统,c.需求不同开发技能的单元划归不同子系统,d.兼顾工作量的相对均衡,进一步切分太大的子系统。书中举了一个例子,myzip的概念架构设计,对系统进行子系统划分,更加直观的明白如何划分子系统。此外就是不断的提出质疑,为什么要这样,还能怎么样,通过不断质疑优化系统。
其它的架构介绍开始从成本,性能,编写语言上开始选择。这几个开始介绍一些开发过程中或大或小的问题,诸如为什么产品发布之后bug不断,什么架构设计需要做什么:物理架构设计的工作内容包括硬件选择和物理拓扑,软件到硬件的映射关系,方法的优化;运行架构设计的工作内容包括确定引入哪些控制流,确定每条控制流的任务,处理相关问题(控制流的创建,销毁,通信机制等)进一步考虑:(控制流之间的同步关系,若有资源争用还要引入加锁机制);开发架构设计的工作内容包括将逻辑职责映射为程序单元,开发技术选型,程序单元间关系
数据分布的六种策略:独立(大系统由多个小系统组成,不同小系统具有互不相同的数据库),集中(大系统必须支持来自不同地点的访问,或者该系统由相关的多个小系统组成,而持久集中化数据进行集中化的,统一格式的存储),分区(水平分区和垂直分区),复制(数据保存多个副本),子集(某节点保存全体数据的一个相对固定的子集),重组。