《一线架构师指南》读后感
最近开始拜读温昱老师的《一线架构师指南》,感触良多,现将一些阅读体会进行记录。
首先,通过开篇的两句引言了解当前架构的发展现状:
- 软件架构在不断发展,但仍然是一个尚不成熟的学科。
- 架构设计能力,因掌握起来困难而显得珍贵。
其中第一章绪论部分提出了架构师工作过程中的六大经典困惑、四个核心主张以及一套组合方法的ADMEMS方法体系。下面对这三方面进行简要阐述:
一、线架构师6个经典困惑
主要包含实际问题的困惑(4个)+职业发展的困惑(2个)。
(一)四个实际问题的困惑
- 将系统划分模块,如何更合理?
- 大系统架构设计,如何起步?
- 总觉得需求很糟糕,影响了架构设计!
- 非功能需求重要,但如何设计?
(二)两个职业发展的困惑
- 架构新手:缺乏指导,架构设计不知所措!
- 架构老手:缺乏总结,仍怕下个项目。
该书的四个核心主张
- 方法体系是大趋势
- 一线架构师真正需要的,是覆盖需求进、架构出全过程的实践指导--只有综合了不 同方法优点的“方法体系”才堪此重任。方法体系必然是软件业界未来发展的重大趋 势
- 质疑驱动的架构设计
- 从根本上讲,架构设计是需求驱动的,而不是模型驱动的。架构设计是一门艺 术,你不可能把“一桶需求”倒进某台神秘机器,然后等着架构设计自动被“加工”生 产完毕,这里缺的是架构师的因素。 架构设计实际上是一个“质疑驱动的过程”:需求被架构师的大脑有节奏的引入架构设计一波接一波的思维活动中。
- 多阶段方法
- 先做后做--叫做阶段;齐头并进 --这是视图。任何好的方法,都必须以时间轴来组织,这样才最利于指导实践。
- 内置最佳实践的方法
- 方法不应该是个空框框,应融入最佳实践经验
ADMEMS(ArchitectureDesign Method has been Extended to Method System)方法通过三个阶段和1个贯穿环境来覆盖“需求进,架构出”的架构设计完成工作内容。其中“3个阶段”是指预备架构阶段(PA(Pre-architecture)阶段:把握需求特点,确定架构驱动力)、概念架构阶段(CA(Conceptual Architecture)阶段:根据重大需求,确定概念架构)、细化架构阶段(RA(Refined Architecture)阶段:细化架构设计,关注不同视图),“1个贯穿环节”是指对非功能目标的考虑。
1、功能需求、质量属性、约束共同决定了架构,是架构设计成败的关键所在。
2、让架构师全程参与需求分析工作。
3、需求与架构并行进行的前提是:明确的业务需求;全面的用户需求;典型的行为需求。
4、PA阶段四个步骤:需求结构化;分析约束影响;确定关键质量;确定关键功能。
5、概念架构是大型系统架构设计成败的关键。
6、概念架构设计阶段,对关键功能进行鲁棒图建模。
7、高层分隔的两种实践套路:切系统为系统;切系统为子系统
8、细化架构和概率架构之间存在这如下典型差异:
接口:细化架构中,接口占据非常核心的地位,而概念架构不关心
子系统:细化架构重视通过子系统和模块来分割整个系统,并且子系统有明确的接口。
交互机制:细化架构中的交互机制应是“实在”的,如基于接口编程、消息机制和远程调用方法等。
9、方案和架构的联系与区别如下:
方案包含一定的架构内容
方案设计的架构基本在概念架构一级
架构设计的工作还远未完成
10、五视图包含如下几个视图:
逻辑视图;开发视图;运行视图;物理视图;数据视图。
11、划分子系统的实践策略归纳为:分层的细化;分区的引入;机制的提取。
12、4个通用设计原则:
职责不同的单元划归不同子系统
通用性不同的单元划归不同子系统
需要不同开发技能的单元划归不同子系统
兼顾工作量的相对均衡,进一步切分太大的子系统。
13、通过质疑“对不对”和“好不好”,可以发现新职责,或者调整协作方式。
14、13.3.3章节案例示范
15、数据分布策略:独立;集中;分区;复制;子集;重组。
架构设计要达到以下目标:
①可靠性(Reliable)。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。
②安全性(Secure)。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
③可伸缩性(SCAlable)。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。
④可定制化(CuSTomizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
⑤可扩展性(Extensible)。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。
⑥可维护性(MAIntainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费。
⑦客户体验(Customer Experience)。软件系统必须易于使用。
⑧市场时机(Time to Market)。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。