第一章 简介
1. 三大武器:划分,知识,抽象(Partitioning,knowledge,and abstractions
精确的划分:只有划分满足下面两个条件时,才能很好的解决复杂的问题。第一:每一个独立的部分一定要足够的小,小到一个人就能完成;第二:这些独立的部分一定能有效的组成一个整体。
丰富的知识准备
优秀的抽象能力
2. 软件架构的三个例子:
简单来说软件架构就是对软件系统的宏观设计。
Rackspace公司是一家邮件服务器提供商。为了解答客户遇到的各种问题,R必须去查找相关的日志文件。随着日志文件的日益增长,R先后建立三代系统来解决上述问题。
第一代,本地日志文件:第一个版本非常的简单。R写了一个脚本通过ssh连接到每一台服务上执行一个查询来检索邮件日志文件。工程师通过不同的查询语句得到自己想要的结果。一开始这个版本工作的很好,很快随着查询次数的增长就遇到了瓶颈。更为重要的是需要大量的工程师来写查询语句,优化查询结果。
第二代,中心数据库:这个版本将日志文件从邮件服务器上传到了一台性能强大的服务器上的关系数据库中。技术支持人员可以通过web界面来查询相应的结果。但问题是日志文件保存在了不同的邮件服务器上,且数据数据量越来越多,而数据库只有一个,如何快速的将日志文件写入到关系数据库又成为了新的问题。而且越来越多的日志文件使得数据库的越来越大,而性能也逐渐下降。
第三代,索引:第三代系统将日志文件保存在分布式文件系统中,同时为日志文件建立相应的索引。日志文件被保存到了HDFS中,每一份日志都有三份分别放在了不同的磁盘上。根据2008年,R的报告显示,已经有60TB的文件分别部署在了30个文件服务器上,其中包含了6个月的查询索引。
使用hapdoop来建立索引,包括了三个步骤1.分割输入数据,2.执行调度分别创建索引,3.合并索引。调度每10分钟执行一次,而合并索引需要5分钟,因此索引最多会有15分钟的延迟。R每天要为140GB的数据通过150000个调度来建立索引。
同第二代系统相仿的是,第三代也为技术支持人员提供了web访问界面,帮助他们在几秒内完成查询。
3.反思
从上述的三种架构可以的得出即使是面对同样的问题,仍有不同的选择。因此如何设计出最优的软件架构?
质量:质量意味着:可变性,可扩展性,潜能 modifiability, scalability, and latency
概念模型(Conceptual model):一个优秀的架构师首先准确的划分每一个系统,并且能区分出每一块的区别。能划分出模块,组件,以及相关的部署模型。能熟知每一种架构模式的定义,作用。成功的架构师能够在架构设计中有效的将自己的知识用到极致。
抽象及约束:
4.关注点的切换
优秀的架构师能够迅速的适应各种新的技术,概念。
5.架构师的定义
角色:架构师
工作:设计架构
工具:各种架构
6.风险驱动的架构设计
 
7 .敏捷开发中的架构设计
够用的架构设计;概念模型