演进的架构

作者:张克强    作者微博:张克强-敏捷307

本实践描述重点在于演进,本文通过以下方面来说明“演进”的架构。

1, 架构的范围

2, 项目初次架构

3, 架构文档

4, 迭代中的架构

5, 推迟决策的架构

6, 其它说明

明确架构的范围

存在了有许许多多种架构,最著名的是与建筑和其他工程相关的。甚至在软件工程领域,我们经常会遇到不同形式的架构。例如,除了软件构架的概念,我们会遇到诸如企业架构,系统架构,组织架构,信息架构,硬件架构,应用架构,基础设施架构等,每种类型都定义了一个架构的具体范围。就算是在软件架构范畴下,目前,软件业界并没有相互形式间的协定,所以导致了对软件架构同一词语的不同理解。软件开发架构考虑的范围随着不同项目、不同团队、项目的不同时间段而不同。

团队考虑进行架构时,值得首先就架构的范围进行讨论,并达成初步的共识,当然架构范围也不是从第一次达成共识后就不再变化,在架构演进时,团队可以就架构范围进行调整。

架构的范围并没有标准答案,下面是对于架构考虑范围的推荐,最推荐的给5颗星,其次4、3、2。

· 支持的操作系统,比如 win7, Redhat9   ☆☆☆☆☆

· 支持的数据库 比如Oracle, DB2, Mysql ☆☆☆☆☆

· 支持的浏览器(如果是有Brower访问的)☆☆☆☆☆

· 依赖的运行时环境 --比如Java, Silverlight ☆☆☆☆☆

· 依赖的中间件--- 比如Java容器,tomcat, websphere, Tuxedo ☆☆☆☆☆

· 依赖的核心构件或者Frame, 比如struts, hibernate, 自定义的构件 ☆☆☆☆☆

· 层次划分,比如 典型三层架构、多层架构  ☆☆☆☆

· 识别进程,画部署图 ☆☆☆☆☆

· 划分组件,画组件图 ☆☆☆☆☆

· 开发语言 比如c#, java, c++  ☆☆☆☆☆

· 开发所用的工具  比如IDE,报表设计器 ☆☆☆☆

· 重要组件间的接口 ☆☆☆☆

· 核心类的设计 ☆☆☆

· 数据库设计 ☆☆☆   (存储数据和检索有其特点。在表达方面有其自身的特点。如数据集的提取,运算等, 要注意性能,完整性等。数据库设计也可做渐进设计)

· 核心流程的说明 ☆☆

· 部分核心类的类图 ☆☆

· 特别的性能要求带来的考虑 ☆☆☆☆

· 特别的可恢复性要求带来的考虑 ☆☆☆

· 特别的信息安全要求带来的考虑 ☆☆☆

一般而言,架构范围不包括需求细节、用户交互细节、类的细节。

项目初次架构

项目很早的前期,比如第0次迭代,进行初次架构,团队需要理解项目的现状、范围、特征。

对于架构,需要了解在架构关注的范围内,哪些因素是硬性限制条件,哪些因素是可变限制条件,哪些因素是项目需要考虑解决的问题。一般地,全新开发项目的限制条件比较少,需要考虑解决的问题比较多。

所开发的系统将或者已经存在于环境中,那么其环境必然影响架构,所以需要考虑 “环境中的架构”。基本上,环境决定了系统运行的范围,这些又约定和限制了架构。影响架构的环境的因素包含架构所支持的商务环境,系统涉众群,内部技术限制(例如需要符合组织标准),和外部技术限制(例如对外部系统的接口或遵守外部规则的标准)。

在此期间,可以召开架构的头脑风暴会议,讨论系统的功能、性能等等特征,并思考实现这些特征的高层设计策略,甄别可行地技术策略。

根据这些了解、讨论和思考,形成初始的架构文档。

特别再次值得重复说明的是:多数的架构是在已有软件或系统上进行的。原有软件或系统将带来原有的架构,这并不意味着新项目可以不再考虑架构。原有的架构可能不再适应当前的情况,而恰恰是需要改进的地方;原有的架构也许非常好,不必修改,新开发只需要在其指定的架构下按部进行即可;原有的架构也许总体可以,局部需要调整。总之,需要了解原有的架构。

架构文档

在起草初始的架构文档时,值得充分理解并复用原有架构方面的文档。

无论利用原有文档,还是新写,应当形成一套架构文档,说明团队架构范围内所关注的内容。这一套架构文档要得到配置管理。

这套架构文档的典型组成

1, 核心架构文档(必需)

2, 接口文档(可选)

3, 模块或子系统架构(可选)

4, 其它补充说明(可选)

在迭代进行中,核心架构设计文档始终保持是一个文件,这个文件随着种种新情况、变更而得到演进,但始终保持完整性和全局性。

避免出现把新增修改的内容写入特定版本号的架构文档,进而导致组合多个文件才能反映架构整体情况。具体而言,避免如下情况:

假设在第2个迭代结束后已经 形成了 ABC架构文档,在第3个迭代时,其中某部分有重要修改, 团队为了明确这些是第3迭代的任务,也为方便的阅读第3迭代的架构,把这部分修改另写为第3迭代架构文件。在第4个迭代时,又有某部分需要新增修改,然后有出现了第4迭代架构文件,依此类推,到第10个迭代时,需要阅读所有前面的架构文件才能了解全局,而不再有一份核心架构文档就能反映全局。短期迭代的方便处理将损害长期的架构演进。

因此,演进的架构建议利用版本控制工具(比如CVS,SVN,ClearCase等)来管理架构文档。

在项目进行的任何时间点,都能展现及时的一套架构文档。

迭代中的架构

在后续的迭代中,在每个迭代的前期,考虑对于架构的影响,如果对于原有架构文档有变化,就应当修订架构文档。在演进中,对于架构最常见的两大影响是1,模块的修改和新增;2由于时间推移所带来的容量方面的问题,一般最突出的是性能问题。值得密切注意模块之间的交互

推荐提问:

1, 这个迭代是否要新增模块?

2, 是否对已经存在的模块有修改,模块之间的交互是否有变化?

3, 与其它系统的交互是否有变化?是否需要与新系统通讯?

4, 是否能够支持容量方面的情况?比如访问量?比如硬盘容量?带宽?CPU?

另外可能变化方面是团队对于架构范围的理解可能变化,根据变化后的架构范围理解,增补架构文档的内容。

推迟决策的架构

在演进的架构中值得推迟决策,推迟决策并不是指到最后才决定做什么,而是要尽量推迟冻结的决策,以更灵活的应对不确定性。

当出现架构决策时,考虑如下提问:

· 现在需要制定这个决策吗?

· 可以安全地推迟这一决策吗?

· 能做些什么使决策可逆?

· 是否可以先进行些尝试,以帮助决策?

在演进的架构下,也为决策的推迟提供了便利。当前迭代涉及的架构问题是需要马上给出方案的,对于后续的架构问题是有机会推迟决策的。当然这里是有长期考虑和短期考虑的权衡,并不是说演进的架构下只需要考虑本迭代的架构问题,但也不是说需要考虑所有后续迭代的架构问题。

其它说明

在项目开始时,没有必要安排超过迭代周期的、专门的架构设计阶段或迭代。

在演进的背景下,预先花费大量时间的所谓设计阶段是多余的。

-------------------

演进的架构

时间: 2024-10-12 16:09:30

演进的架构的相关文章

各大互联网公司架构演进之路汇总 - 分享自@开发者头条

大型网站架构演化历程 Web 支付宝和蚂蚁花呗的技术架构及实践 支付宝的高可用与容灾架构演进 聚划算架构演进和系统优化 (视频+PPT) 淘宝交易系统演进之路 (专访) 淘宝数据魔方技术架构解析 秒杀系统架构分析与实战 腾讯社区搜索架构演进(视频+PPT) 京东峰值系统设计 京东咚咚架构演进 新浪微博平台架构 微博图床架构揭秘 微博推荐架构的演进 当当网系统分级与海量信息动态发布实践 当当网架构演进及规划实现(视频+PPT) LinkedIn架构这十年 Facebook's software a

饿了么移动APP的架构演进

0 引言 时代演进,技术也随之发展.到今天,APP已然成为绝大多数互联网企业用来获取用户的核心渠道.与此同时,伴随着业务量的增长,愈来愈大.愈来愈多的APP也在不断地.持续地挑战着每一个移动端研发人员的知识深度,而我们的移动端技术人员也在这个不断接受挑战的过程中,成就了今天的移动互联网时代.饿了么移动APP就是这样一个挑战,多用户量.多业务量,在接受着更多更挑剔用户的同时,默默地.不断地演进着移动端的架构. 首页 所有文章 业界动态 iOS开发 Swift开发 产品推广 产品设计 我要投稿 更多

饿了么移动APP的架构演进(转)

原文:http://www.jianshu.com/p/2141fb0dc62c 文/圣迪(简书作者)原文链接:http://www.jianshu.com/p/2141fb0dc62c著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 0 引言 时代演进,技术也随之发展.到今天,APP已然成为绝大多数互联网企业用来获取用户的核心渠道.与此同时,伴随着业务量的增长,愈来愈大.愈来愈多的APP也在不断地.持续地挑战着每一个移动端研发人员的知识深度,而我们的移动端技术人员也在这个不断接受

转: 58同城高性能移动Push推送平台架构演进之路

转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问题分析解决,以及高可用.高性能.高稳定性如何保证. 什么是移动Push推送 移动Push推送是移动互联网最基础的需求之一,用于满足移动互联环境下消息到达App客户端.以转转(58赶集旗下真实个人的闲置交易平

分布式架构的演进,分析的很详细,很到位

作者:李小翀链接:https://www.zhihu.com/question/22764869/answer/31277656来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 首先推荐4本书 大型分布式网站架构设计与实践 http://item.jd.com/11529266.html 大型网站技术架构:核心原理与案例分析 http://item.jd.com/11322972.html 大型网站系统与Java中间件实践 http://item.jd.com/11

微服务浅述---架构演进

微服务浅述---架构演进 提到架构演进,我们很容易想到'单体应用---分布式/SOA---微服务'的演进过程,那么为什么会有这个必然演进?演进的过程中遇到了哪些坑?是怎么解决这些坑的? 为什么会有这个必然的架构演进? 因为痛点驱动.因为互联网公司很容易突然爆发,今年的数据量可能比去年的数据量翻上N倍.那么刚开始的时候公司用的是单体架构,即一个业务逻辑一撸到底.比如电商公司,从前端商品展示,购物车,下单,订单生成,发货,物流等等这些业务逻辑 全部写在一个工程内,数据放在一个库内,部署在一个服务器上

Java分布式应用技术架构介绍

分布式架构的演进 系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序.数据库.文件等所有的资源都在一台服务器上通俗称为LAMP 特征: 应用程序.数据库.文件等所有的资源都在一台服务器上. 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了. 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰

Java应用架构的演化之路

原文出处: bbear 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现. 1. 不同系统不同语言之间的交互 现在我们常见的不同系统不同语言之间的交互使用WebService,Http请求.WebService,即“Web 服务”,简写为 WS.从字面上理解,它其实就是“基于 Web 的服务”.而服务却是双方的,有服务需求方,就有服务提供方.服务提供方对外发布服务,服务需求方调用服务提供方所发布的服务.如果说得再专业一点,W

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数