- 浏览: 550668 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (267)
- 随笔 (4)
- Spring (13)
- Java (61)
- HTTP (3)
- Windows (1)
- CI(Continuous Integration) (3)
- Dozer (1)
- Apache (11)
- DB (7)
- Architecture (41)
- Design Patterns (11)
- Test (5)
- Agile (1)
- ORM (3)
- PMP (2)
- ESB (2)
- Maven (5)
- IDE (1)
- Camel (1)
- Webservice (3)
- MySQL (6)
- CentOS (14)
- Linux (19)
- BI (3)
- RPC (2)
- Cluster (9)
- NoSQL (7)
- Oracle (25)
- Loadbalance (7)
- Web (5)
- tomcat (1)
- freemarker (1)
- 制造 (0)
最新评论
-
panamera:
如果设置了连接需要密码,Dynamic Broker-Clus ...
ActiveMQ 集群配置 -
panamera:
请问你的最后一种模式Broker-C节点是不是应该也要修改持久 ...
ActiveMQ 集群配置 -
maosheng:
longshao_feng 写道楼主使用 文件共享 模式的ma ...
ActiveMQ 集群配置 -
longshao_feng:
楼主使用 文件共享 模式的master-slave,produ ...
ActiveMQ 集群配置 -
tanglanwen:
感触很深,必定谨记!
少走弯路的十条忠告
软件架构对新产品开发的作用:
上承业务目标
下接技术决策
控制复杂性
软件需求:
软件需求 = 功能需求 + 质量属性 + 约束
约束是架构设计要解决的问题的上下文
不同需求影响架构的不同原理,是架构设计思维的基础
五维三级需求法——业务分析、范围协商过程:
软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。
软件架构设计就是从宏观上说明一套软件系统的组成与特性。
ADMEMS是Architecture Design Method has been Extended to Method System的简称,ADMEMS通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作内容。其中“3个阶段”是指预备架构阶段(PA阶段)、概念架 构阶段(CA阶段)、细化架构阶段(RA阶段),“1个贯穿环节”是指对非功能目标的考虑。
架构设计方法首先应当是多阶段的,其次才是多视图的;阶段是先后关系,视图是并列关系。
架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体
逻辑架构:
逻辑架构关注功能。其设计着重考虑功能需求。
开发架构:
开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。
运行架构:
运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。
物理架构:
物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和部署需求”。以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
数据架构:
数据架构关注持久化数据的存储方案。设计着重考虑“数据需求”。
PA阶段的任务是全面理解需求,从而把握需求特点,进而确定架构设计驱动力;
CA阶段必须考虑包括功能、质量、约束在内的所有方面的需求;
RA阶段的总体方法为5视图方法,涉及逻辑架构、物理架构、开发架构、运行架构和数据架构。
PA阶段:ADMEMS矩阵法
CA阶段:重大需求塑造概念架构
概念架构满足“架构=组件+交互”的基本定义,只不过概念架构仅关注高层组件
概念架构对高层组件的“职责”进行了笼统的界定,并给出了高层组件之间的相互关系
概念架构不应涉及接口细节
RA阶段:落地的5视图方法
软件架构设计的方式方法:
逻辑架构的重点是考虑软件功能性需求:
开发架构重点关注的是开发编码实现方面的问题:
数据架构不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计:
运行架构关注的不再是全局而是局部,着重关注那些关键点与难点,常常需要技术攻关与预研。主要考虑控制流、通讯机制、资源争用、锁机制、同步异步、并发、串行,同时也要考虑质量属性:
物理架构主要考虑硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响:
质疑驱动的逻辑架构设计的整体思路:
逻辑架构设计的10条经验:
划分子系统原则:
为了得到客户经常性的反馈,快速迭代有个基本前提:开发应该“深度优先”,而不是“广度优先”。
广度优先极端情况下意味着对每一个功能进行定义,然后对每个功能进行设计,接着对每个功能进行编码,最后才对所有功能一起进行测试。而深度优先极端情况下意味着对每个功能完整地进行定义、设计、编码和测试,而只有当这个功能完成了之后,你才能做下一个功能。当然,两个极端都是不好的,但深度优先要好得多。对于大部分团队来说,应该做一个高级的广度设计,然后马上转到深度优先的底层设计和实现上去。
如何通过关注点分离来达到“系统中的一部分发生了改变,不会影响其他部分”的目标呢?
首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的“协作链条”完成的;当不同职责被合理分离之后,为了实现新的功能只需构造新的“协作链条”,而需求变更也往往只会影响到少数职责的定义和实现。
其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改。
另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的。
“分”是手段,“合”是目的
协作决定接口
架构是一种平衡手段,架构为特定的目标服务,通过平衡资源的分配从而达成有限的资源下实现特定的目标。
通常,我们做架构设计的目标是平衡空间、时间、可靠性、复杂度、可维护性、易用性、成本等等指标,选择应用更迫切需要满足的指标优先满足,同时尽可能的减少对其他指标的影响。简单说,架构就是要明确取舍。而且,我们选择的架构不能够影响应用本身的业务逻辑,也就是说架构对应用来说应该是透明的。
上承业务目标
下接技术决策
控制复杂性
软件需求:
软件需求 = 功能需求 + 质量属性 + 约束
约束是架构设计要解决的问题的上下文
不同需求影响架构的不同原理,是架构设计思维的基础
五维三级需求法——业务分析、范围协商过程:
软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。
软件架构设计就是从宏观上说明一套软件系统的组成与特性。
ADMEMS是Architecture Design Method has been Extended to Method System的简称,ADMEMS通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作内容。其中“3个阶段”是指预备架构阶段(PA阶段)、概念架 构阶段(CA阶段)、细化架构阶段(RA阶段),“1个贯穿环节”是指对非功能目标的考虑。
架构设计方法首先应当是多阶段的,其次才是多视图的;阶段是先后关系,视图是并列关系。
架构视图是对于从某一视角或某一点上看到的系统所做的简化描述,描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体
逻辑架构:
逻辑架构关注功能。其设计着重考虑功能需求。
开发架构:
开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。
运行架构:
运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。
物理架构:
物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和部署需求”。以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
数据架构:
数据架构关注持久化数据的存储方案。设计着重考虑“数据需求”。
PA阶段的任务是全面理解需求,从而把握需求特点,进而确定架构设计驱动力;
CA阶段必须考虑包括功能、质量、约束在内的所有方面的需求;
RA阶段的总体方法为5视图方法,涉及逻辑架构、物理架构、开发架构、运行架构和数据架构。
PA阶段:ADMEMS矩阵法
CA阶段:重大需求塑造概念架构
概念架构满足“架构=组件+交互”的基本定义,只不过概念架构仅关注高层组件
概念架构对高层组件的“职责”进行了笼统的界定,并给出了高层组件之间的相互关系
概念架构不应涉及接口细节
RA阶段:落地的5视图方法
软件架构设计的方式方法:
逻辑架构的重点是考虑软件功能性需求:
开发架构重点关注的是开发编码实现方面的问题:
数据架构不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计:
运行架构关注的不再是全局而是局部,着重关注那些关键点与难点,常常需要技术攻关与预研。主要考虑控制流、通讯机制、资源争用、锁机制、同步异步、并发、串行,同时也要考虑质量属性:
物理架构主要考虑硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响:
质疑驱动的逻辑架构设计的整体思路:
逻辑架构设计的10条经验:
划分子系统原则:
为了得到客户经常性的反馈,快速迭代有个基本前提:开发应该“深度优先”,而不是“广度优先”。
广度优先极端情况下意味着对每一个功能进行定义,然后对每个功能进行设计,接着对每个功能进行编码,最后才对所有功能一起进行测试。而深度优先极端情况下意味着对每个功能完整地进行定义、设计、编码和测试,而只有当这个功能完成了之后,你才能做下一个功能。当然,两个极端都是不好的,但深度优先要好得多。对于大部分团队来说,应该做一个高级的广度设计,然后马上转到深度优先的底层设计和实现上去。
如何通过关注点分离来达到“系统中的一部分发生了改变,不会影响其他部分”的目标呢?
首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的“协作链条”完成的;当不同职责被合理分离之后,为了实现新的功能只需构造新的“协作链条”,而需求变更也往往只会影响到少数职责的定义和实现。
其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改。
另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的。
“分”是手段,“合”是目的
协作决定接口
架构是一种平衡手段,架构为特定的目标服务,通过平衡资源的分配从而达成有限的资源下实现特定的目标。
通常,我们做架构设计的目标是平衡空间、时间、可靠性、复杂度、可维护性、易用性、成本等等指标,选择应用更迫切需要满足的指标优先满足,同时尽可能的减少对其他指标的影响。简单说,架构就是要明确取舍。而且,我们选择的架构不能够影响应用本身的业务逻辑,也就是说架构对应用来说应该是透明的。
发表评论
-
HTTPS的加密原理解读
2021-12-31 11:25 199一、为什么需要加密? 因为http的内容是明文传输的,明文数据 ... -
容器技术的基石: cgroup、namespace和联合文件系统
2021-12-09 10:47 540Docker 是基于 Linux Kernel 的 Names ... -
链路追踪skywalking安装部署
2021-10-21 12:06 671APM 安装部署: 一、下载 版本目录地址:http://a ... -
自动化运维 Ansible 安装部署
2021-08-20 19:06 705一、概述 Ansible 实现了批量系统配置、批量程序部署、 ... -
Linux 下 Kafka Cluster 搭建
2021-07-08 11:23 860概述 http://kafka.apachecn.org/q ... -
ELK RPM 安装配置
2021-06-22 18:59 492相关组件: 1)filebeat。用于收集日志组件,经测试其 ... -
在Kubernetes上部署 Redis 三主三从 集群
2021-03-10 16:25 487NFS搭建见: Linux NFS搭建与配置(https:// ... -
docker-compose 部署ELK(logstash->elasticsearch->kibana)
2020-11-11 18:02 1370概述: ELK是三个开源软件的缩写,分别表示:elastic ... -
Kubernetes1.16.3下部署node-exporter+alertmanager+prometheus+grafana 监控系统
2020-10-28 10:48 895准备工作 建议将所有的yaml文件存在如下目录: # mkd ... -
Linux NFS 搭建与配置
2020-10-21 17:58 319一、NFS 介绍 NFS 是 Network FileSys ... -
K8S 备份及升级
2020-10-20 15:48 737一、准备工作 查看集群版本: # kubectl get no ... -
API 网关 kong 的 konga 配置使用
2020-09-23 10:46 3517一、Kong 概述: kong的 ... -
云原生技术 Docker、K8S
2020-09-02 16:53 461容器的三大好处 1.资源 ... -
Kubernetes 应用编排、管理与运维
2020-08-24 16:40 465一、kubectl 运维命令 kubectl control ... -
API 网关 kong/konga 安装部署
2020-08-25 17:34 433一、概述 Kong是Mashape开 ... -
Linux 下 Redis Cluster 搭建
2020-08-13 09:14 535Redis集群演变过程: 单 ... -
Kubernetes离线安装的本地yum源构建
2020-08-08 22:41 383一、需求场景 在K8S的使用过程中有时候会遇到在一些无法上网 ... -
Kubernetes 证书延期
2020-08-01 22:28 326一、概述 kubeadm 是 kubernetes 提供的一 ... -
kubeadm方式部署安装kubernetes
2020-07-29 08:01 2024一、前提准备: 0、升级更新系统(切记升级一下,曾被坑过) ... -
Kubernetes 部署 Nginx 集群
2020-07-20 09:32 653一.设置标签 为了保证nginx之能分配到nginx服务器需要 ...
相关推荐
目的:软件架构设计,可以帮我们直观的熟悉整个架构的设计和拓展实现。 本文档作为产品的架构设计说明书,对系统整体进行了架构设计,指导后续的设计与开发。并为网站后续版本的架构参考。 本文内容面向产品经理,...
比较全面的阐述嵌入式系统软件架构设计的资料,pdf版本,文字版,完整无广告。 本课程是针对嵌入式软件开发的特点,讨论架构设计的思路和方法。试图给大家提供一种思想,启发大家的思维。框架,自动化代码生成和...
本书紧紧围绕“软件架构设计”这一主题,立足实践解析了软件架构的概念、阐述了切实可行的软件架构设计方法、提供了可操作性极强的完整的架构设计过程。另外,本书从思维方式的突破、面向对象设计、UML建模、过程与...
《软件架构设计》《软件架构设计》《软件架构设计》《软件架构设计》
本书从基本原理入手,介绍软件架构设计过程中涉及的一些概念、流程、方法、用到的工作产品及可重用的资源,从第6章开始,通过介绍一个具体的案例来阐述如 何定义需求、创建逻辑架构、创建物理架构。在第10章“进阶”...
架构实战——软件架构设计的过程[汇编].pdf
论文:架构风格与基于网络的软件架构设计(PDF)
架构风格与基于网络的软件架构设计.pdf
本书为讲解如何设计实现高级软件架构设计,是软件工程师向软件架构师转变学习书籍。
软件架构设计2.0.docx
软件架构设计原则
应用软件 架构设计 设计规范 4.2.1 定义主题域 对业务过程模型、业务能力模型、系统用例等作出分析,参照全局数据模型,定义数据主题域及概 念数据实体,主题域的数据实体应高度相关,每项业务能力至少包含一个...
软件架构设计理论,软件架构设计实践,分析与应用技术,软件架构设计思想
嵌入式系统软件架构设计
ADMEMS方法推荐的《软件架构设计文档》
架构实战——软件架构设计的过程,架构实战——软件架构设计的过程,
软件架构之软件架构设计电子书下载 由于[GOF95]是论述软件模式的著作的第一本,也是OO设计理论著作中最流行的一本,因此有些人常常使用设计模式(Design Pattern)一词来指所有直接处理软件的架构、设计、程序实现的...
软件架构设计说明书