创建软件架构时应该关注什么?

更新日期: 2019-09-19阅读: 1.9k标签: 架构

软件架构师的首要关注点不是系统的功能,而是软件的品质,软件品质关注点指明了功能呢必须以何种方式交付,才能被系统的利益相关人所接受。作为一个架构师,你应该了解软件产品利益人以及他们的关注点:

  • 投资人,他们想知道项目是否能够在给定的资源和进度约束下完成。
  • 架构师、开发人员、测试人员,他们首先考虑的是最初的构建和以后的维护与演进。
  • 项目经理,他们需要组织团队,制定迭代计划。
  • 市场人员,他们想通过软件产品的品质特点实现与竞争者的差异化。
  • 用户,包括最终用户、系统管理员,以及安装、部署、准备、配置人员。

技术支持人员,他们关注帮助平台电话呼入的数目和复杂性。

架构师第一项任务,就是与利益相关人员协作,理解这些品质关注点和约束,并为它们排列优先级。为什么不从功能需求开始呢?因为通常有许多可能的系统分解方式。例如,从数据模型开始可能得到一种架构,而从业务处理模型开始则可能的得到不同的架构。在极端的情况下,系统没有分解,被开发成单一的软件。这可能会满足所有功能需求,但是可能不会满足品质需求。

一个项目通常情况下会有以下关注点:


功能性

产品向它的用户提供哪些功能?


可变性

软件将来可能需要哪些改变?哪些改变不太可能发生,不需要特别容易进行这些改变?


性能

产品将达到怎样的性能?


容量

多少用户将并发使用该系统?该系统将为用户保存多少数据?


生态系统

在部署的生态环境中,该系统将与其他系统进行哪些交互?


模块化

如何将编写软件的任务分解为工作指派(模块),特别是这些模块可以独立地开发,并能够准确而容易地满足彼此需要?


可构建性

如何将软件构建为一组组建,并能够独立实现和验证这些组建?哪些组建应该复用其他的产品,哪些应该从外部供应商出获得?


产品化

如果产品将以几种变体的形式存在,如何开发一个产品线,并利用这些变体的共性?产品线中的产品以怎样的步骤开发?在创建一条软件产品线时,要进行哪些投资?开发产品线中不同变体的选择,预期会得到怎样的回报?

特别是,是否可能开发最小的产品,然后再添加(扩展)组建,在不改变以前编写的代码的情况下,开发产品线的其他成员?


安全性

产品是否需要用户认证,或者必须限制对数据的访问?数据的安全性如何得到保证?如何抵挡“拒绝服务”攻击或其他攻击?

到这里是不是有点熟悉啊,这其实就是产品经理写的PRD文档中的一份,PRD文档中有关于产品性能指标,安全的指标等等,而架构师很大部分工作就是在拿到PRD的时候把项目进行分解,让其在架构上符合产品设计基本要求。


链接: https://fly63.com/article/detial/6025

微内核架构在大型前端系统中的应用

架构和框架是独立的,本文仅仅是提出一种架构思路,而且这个架构也在百度的某款用户量很大的复杂前端产品中得以应用。基于这一套弹性架构并结合Vue/React的现代化开发理念,可以很好的完成高复杂度的前端系统。

怎么判定web前端架构师的能力高低?

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。传统软件架构描述的对象是直接构成系统的抽象组件,侧重于系统的抽象、拆分、组织方式等

成为一个顶尖架构师

架构师的一个重要职责是,确保团队有共同的技术愿景,以帮助我们向客户交付他们想要的系统。在某些场景下,架构师只需要和一个团队一起工作,这时他们等同于技术引领者。在其他情况下,他们要对整个项目的技术愿景负责,通常需要协调多个团队之间,甚至是整个组织内的工作。

C/S和B/S两种架构区别与优缺点分析

C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据

架构/构建高可用的网站

目的为保证服务器硬件故障时依然可用,数据依然保持并能够访问,手段:数据和服务的冗余备份以及失效转移机制,有状态 :在服务端保留之前的请求信息,用以处理当前请求(例如:session)无状态 :没有特殊状态的服务

大型web系统架构详解

动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。

讲讲亿级PV的负载均衡架构

本来没想写这个题材的,为了某某童鞋能够更好的茁壮成长,临时写一篇负载均衡的。负载均衡,大家可能听过什么3层负载均衡、4层负载均衡、7层负载均衡什么的?那这是怎么分的呢,ok,是根据osi七层网络模型来分的,例如nginx是工作在应用层

朱晔的互联网架构实践心得:品味Kubernetes的设计理念

Kubernetes(k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序。虽然本系列文章讨论的是互联网架构,但是k8s的一些设计理念非常值得深思和借鉴,本人并非运维专家,本文尝试从自己看到的一些k8s的架构理念结合自己的理解来分析 k8s在稳定性

大型网站核心架构要素

一般来说,除了当前的系统功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。性能是网站的一个重要指标,任何软件架构设计档案都必须考虑可能会带来的性能问题。

大型网站技术架构 构建高可用的网站 高可用的服务

本章介绍如何去构建高可用的服务,关键词:服务分级,超时设置,异步调用,服务降级,幂等性设计,一些架构设计中的常用方案,但是需要结合实际业务场景进行设计,没有一套方案能解决所有问题

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!