写点什么

在应用程序架构中实践敏捷

  • 2008-12-21
  • 本文字数:1426 字

    阅读完需:约 5 分钟

微软最近在“模式及实践”分类下发布了一篇文档,名为“如何用敏捷架构进行设计”,为如何使用敏捷方式进行架构提供了详细的指导。

文档推荐用以下列举的条目做为输入,开始设计之路:

  • 用例和使用场景
  • 功能需求
  • 非功能需求(质量相关话题,如性能、安全性、可靠性)
  • 技术需求
  • 目标部署环境
  • 限制

设计应该产生这些输出产物:

  • 架构特征明显的用例
  • 架构热点
  • 候选架构
  • 架构刺探

该文档通过明确建议不要一步完成架构设计,而要采取五步法实现的方式引入敏捷:

  • 第一步:确认架构目标。清晰的目标可以帮助你致力于自己的架构,还能帮助你致力于解决设计中合适的问题。好的目标帮助你决定什么时候完工,以及什么时候需要开始下一个新的阶段;
  • 第二步:关键场景。使用关键场景让设计只关注最经常发生的事情,以及在候选架构准备好时对它们进行评估;
  • 第三步:应用概览。理解你的应用类型、部署架构、架构类型以及技术等,以将设计和应用要服务的真实世界密切联系起来;
  • 第四步:关键热点。根据质量特征和架构框架确认关键热点。在设计应用时,总有一些地方是经常犯错的。
  • 第五步:候选方案。创建一个候选架构或者“架构刺探(Architectural Spike”,然后用关键场景、热点和部署限制等对它进行评估。

第一步:确认架构目标

根据微软模式与实践部门首席程序经理 J.D. Meier 所说,这一步的目的是评估“在接下来的几步上要花费多少时间、精力以及全部努力等”。第一步的结果应该是:

  • 构建原型
  • 确定关键技术风险
  • 测试潜在路径
  • 共享模型和约定

第二步:关键场景

根据 J.D. Meier 的说法,可基于下面这些用例的要素,确定什么是最好的场景:

  1. 对于所部署应用的成功和接受度来说,它们是重要的;
  2. 用例中充分体现了设计,可资用于评估架构。

第三步:应用概览

要将真实世界的细节和具体事物引入到设计中,应用概览是必不可少的,我们可以通过以下几步来创建它:

  • 决定应用类型:首先,要决定你要构建的应用是什么类型。是移动应用,富客户端,富互联网应用,服务,Web 应用还是其他组合等?
  • 理解部署约束:下面,要理解你的目标部署环境,然后决定它会对你的架构产生什么影响。
  • 确定重要的架构类型:决定在你的设计中要使用哪种架构类型。你会构建一个面向服务的架构,C/S,分层的,消息总线还是其他组合等?
  • 决定相关的技术:最后,根据你的应用类型和其他约束来确定相关技术选型,并决定在架构中你要利用哪个技术。

对于以上提到的所有步骤,文档都提供了建议,下面提供了一个在多个架构类型中做选型的例子:

  • C/S:对系统进行隔离,这样客户端可以从服务器发出请求;
  • 基于组件:将应用设计分解成可复用且接口定义良好的组件;
  • 分层:将系统以分层的形式隔离成功能类似的集合;
  • 消息总线:定义能被所有连接系统使用的已知格式,从而使得它们不需要了解真实接收端之间的区别;
  • 面向对象:一种基于将任务分成可复用对象的编程类型,这些对象包含数据以及和对象相关的动作;
  • 面向服务(SOA):一种使用契约和消息以服务的形式暴露和消费功能的应用。

第四步:关键热点

在这一步,我们应该“确定应用架构中的热点,来理解那些经常犯错的地方。关键热点则可以通过质量特征和横切关注点来组织起来。”文档中提到的众多热点包括:可用性、交互性、可维护性、可靠性、安全等。

第五步:候选方案

确定好关键热点后,架构的初步草案就已经形成了。然后,要回到第二步来评估候选架构,然后根据第三、第四、第五步产生一个新的候选。这个过程迭代重复,通过每个迭代对自己进行优化。

查看英文原文 Practicing Agility in Application Architecture

2008-12-21 23:591178

评论

发布
暂无评论
发现更多内容

2022华为软件精英挑战赛复赛名单公布,快来看看都有哪些优秀赛队晋级

科技热闻

RabbitMQ 实现延时队列(订单定时取消为例)

Ayue、

Rabbit MQ 4月月更

ffmpeg实现web在线转码

lo

4月月更

Kubernetes官方java客户端之四:内部应用

程序员欣宸

Kubernetes client 4月月更

实时数仓建设

五分钟学大数据

实时计算 4月月更

Flink 实践教程-入门(10):Python作业的使用

腾讯云大数据

腾讯云CDW-ClickHouse云原生实践

腾讯云大数据

Clickhouse 云数据仓库

Hoo虎符研究院|从多个方面了解公链Tezos和它的 Ithaca 2 升级

区块链前沿News

Hoo 虎符交易所 研究院 tezos

Flink 实践教程-进阶(11):SQL 关联:Regular Join

腾讯云大数据

flink 流计算 流计算 Oceanus

龙蜥开源Plugsched:首次实现 Linux kernel 调度器热升级 | 龙蜥技术

OpenAnolis小助手

Linux 内核 龙蜥社区 Plugsched

北京市东城区赵海东副区长一行莅临博睿数据参观指导

博睿数据

Ribbon从入门到源码解析

李子捌

微服务 SpringCloud Ribbon

Web 3.0的未来产业趋势

王强

Web 3.0

一个公式告诉你:如何提升团队的研发效率?

凌晞

技术管理 研发效率

恒源云(Gpushare)_如何安装包/pip加速等?技巧大放送3!

恒源云

安装 pip Ubuntu apt

GaussDB(for Redis)助力《余烬风暴》实力上线,给您沉浸式魔幻体验

华为云数据库小助手

GaussDB GaussDB ( for Redis )

百度信誉保障服务架构全解析

百度Geek说

后端

2022首场MASA技术团队黑客松大赛完美落幕!精彩集锦

MASA技术团队

C# .net 微软

Spring 完美导入 IDEA

阿Q说代码

spring IDEA 4月月更

Improvements of Job Scheduler and Query Execution on Flink OLAP

Apache Flink

大数据 flink 编程 实时计算 OLAP

两步实现让antd与IDE和睦相处的处理案例

袋鼠云数栈

大数据 开源

数栈在湖仓一体上的探索与实践

袋鼠云数栈

数据库 大数据 数据湖 湖仓一体

重塑企业数字化能力,端点科技重磅发布Erda2.0

科技热闻

云效制品仓库 Packages,不限容量免费用

阿里云云效

云计算 maven 阿里云 npm 制品仓库

恒源云(Gpushare)_没有你想要的镜像?技巧大放送5!

恒源云

镜像仓库 显卡、gpu

阿里Maven仓库不限容量,免费用

阿里云云效

云计算 阿里云 npm Maven仓库 制品仓库

透过「人月神话」,看清软件开发问题

架构精进之路

软件开发 人月神话 4月日更 4月月更

netty系列之:netty中的核心MessageToMessage编码器

程序那些事

Java Netty 程序那些事 4月月更

打通产销对接,构建新型数智化农副产品供应链

数商云

产业互联网 数字化

恒源云(Gpushare)_JupyterLab/TensorBoard使用问题?技巧大放送4!

恒源云

人工智能 深度学习 PyTorch

衡石BI产品预置明道云数据连接器

明道云

在应用程序架构中实践敏捷_方法论_Abel Avram_InfoQ精选文章