什么是系统架构设计?

2024-05-05 06:43

1. 什么是系统架构设计?

定义:
一个软件随着功能越来越多,整个软件系统逐渐碎片化,如果不采取有效措施,软件系统就会越来越无序,最终无法维护和扩展。
所以说软件在一段时间的生长后,就需要及时干预,避免越来越无序,架构的本质就是对软件系统进行有序化重构,使软件系统不断进化。

扩展资料:
系统构架是对已确定的需求的技术实现构架、作好规划,运用成套、完整的工具,在规划的步骤下去完成任务。
抽象来说,它是计算机系统结构,或称计算机体系结构,是一个系统在其所处环境中最高层次的概念;它确定一台计算机硬件和软件之间的衔接。
具体地说计算机体系结构指的是计算机系统设计的观念与架构,描述计算机在实做的设计原则。
它确定一个计算机设计的部件功能 ,部件间接口 并且计算机体系结构着重于“负责了计算机架构的中心功能:计算”的中央处理器内部的运行动作与存储器的访问。
参考资料:百度百科:系统构架

什么是系统架构设计?

2. 架构师必看:谈软件架构师如何做好架构设计(

此文转载至:帐前卒
1 前言
软件架构设计是软件设计的一部分,相当于总体设计,是软件设计过程中一个决定性的环节,架构确定了,软件基本也就定型了。而软件架构师则是软件项目的领军人物,是软件设计过程中最具挑战性的角色,从技术角度来讲,他承担了项目的成败责任。
EEEC给“架构师”的定义为“软件架构师是技术主管”,这就意味着他不仅要有高超的技术才能,还要有很好的领导才能,他的领导能力在团队中和软件质量控制中起着十分重要的作用。作为一个架构师,他要掌握整个软件项目的前景,调节各小组间关系,要让所有的项目组成成员了解大家共同的目的和目标,并发布标准和章程;要能正确理解软件过程,要在宏观上拥有专业知识,应该拥有很好的设计技巧;要是一个很好的沟通员和谈判代表,要能做出正确的决策等,除此,还有许多他要具备的其它素质。
2. 做好需求调研和分析
为保证软件的可用性,要从需求出发设计架构,即:做软件先做需求,这是软件业内人士的共识,但这项工作做得好的却很少。根据调查,属于需求分析和软件设计错误与缺陷的约占软件错误与缺陷的64%;而属于程序代码错误的仅占36%;而因软件错误积累与放大效应,造成整个软件项目拖延或失败情况的高达20%~60%。这些数据表明,搞好需求调研和分析是软件设计和开发的第一步。架构师必须要在需求调研的初期就介入,以保证需求获取的及时、可靠、准确,并对下步工作起指导作用。进行需求调研,不能就事论事,对用户的需求调研要全面、细致。需求要进行全局性的分析,需要有全局的观点,而不是分散地、根据具体的应用开发而进行的调研,这样才能系统地、本质地、概括地把握软件的功能结构。在调研过程中,自始至终都要有用户方的业务人员参加,尤其是强调高层管理人员的重视和亲自参与,架构师及其相应的工作小组要有足够的沟通和理解能力,要能使业务人员在需求调研阶段起主导作用,架构师仅起协助和引导作用,并提供需求调研的科学方法和过程。
2.1 熟悉建设单位,定义职能域
在需求调研阶段,架构师首先要全面了解用户中所有人员的需求,首先要了解建设单位的组织机构、业务关系,并根据建设单位中的一些主要业务活动领域,研究定义职能域,这是第一重要任务。职能域是用户功能规划的抽象,应符合建设单位内部各种业务的逻辑关系,而不是现行机构部门的翻版,一经识别,就要保持相对稳定。研制职能域模型时,需要特别注意,要自顶向下规划,并把握好设计职能域的数目;注意用户需求的主次关系,按照重要性、优先级进行权衡取舍。
2.2 详细调研各项业务过程及其功能分解
每个职能域都包括一定数目的业务过程,业务过程可以继续分解为业务活动(对应于未来的软件功能),每个功能再分解为更低层的功能,逐级向下分解,直到产生最基本的、不可再分的最小功能单元。
职能域和业务过程都要独立于当前的组织机构,因为组织机构可能变化,部门的分工也会变化,但整个单位的基本职能和业务相对稳定。职能域或业务过程可能横跨两个或多个业务部门。业务过程的确定可以对照组织机构中各部门负责人的职责来考虑,这样,也可能获得未来软件的操作权限、数据权限的分配和功能模块的划分,这些业务过程是一个单位运作的基本工作,不受报告层次和具体负责人变动的影响。
调研前,架构师要对调研的内容事先准备,针对不同管理层的用户询问不同的问题,列出问题清单,将操作层、管理层、决策层的需求既联系又区分开来,形成一个金字塔,使下层满足上层的需求。调研时,要收集用户工作中涉及的所有内容,如各种单据、报表、处理规则,再将其串成流程图,以流程图为主线,同时把握以下方面: 
(1)该流程中是否存在不必要的环节; 
(2)流程是否可以简化,是否可以省略一些环节; 
(3)流程中的每个处理环节是否起到了增值提效的作用; 
(4)哪些流程可以并行处理。
2.3 在调研具体业务时工作小组要把握的重点
(1)平均频度 
业务发生的频繁程度称为频度,这个数字可以是一个平均值或统计值。频度越高,数据量越大,对响应时间、易操作性等要求就越高。在数据存储时,对大频度的业务或单据要进行充分的考虑。 
(2)高峰期的频度 
必须保证软件在高峰期的响应时间,对软件进行测试时,要模拟高峰期的业务频度。 
(3)单据要求 
单据上的内容也就是单据的属性,它是进行数据结构设计的最基本依据。数据的精度是定义数据库中字段长度的依据;计算生成方法是设计算法的依据;取值范围与计算生成方法是数据完整性检测的依据。 
(4)利于减轻工作量 
减轻人员的工作量是采用新软件的一个目的,花费时间最多、处理方法最复杂的地方往往是软件最关键的地方,也是用户将来验收时最关心的地方。实际上有很多报表由于工作量相当大,用户没有足够的人力与时间来进行处理,这时他便想到了计算机。 
(5)单据报表流程 
要了解单据或报表的来源、单据联数、每联用途、送交单位、送交时间,对来源与去向的追踪可以调查出各个业务、各个单据、各个报表及各个部门之间的联系。 
(6)特殊情况的处理与纠错 
对于特殊情况的处理,体现了软件灵活性,但这其中也隐含着安全危机。用户领域中有很多“合理但不合法,不合理也不合法”的特殊情况,它们出现的机会比较少,在调研时要将这些易遗漏的问题挖掘出来,这些特殊情况有时是软件必须要处理的。 
当用户在某个作业环节出现失误时,手工软件有的采用正规的手续进行纠错,有的则相当随便,这些情况出现的概率也很小,在调研时,可采用穷举的方法,假定在每一个环节都出现失误,逐个环节询问用户的处理方法,防止遗漏。这些细节如果不调研清楚,往往会对软件产生深远的影响。 
(7)考虑长远 
将来用户需求的变化是很正常的现象,如果仅仅着眼于现在,而不对将来有所考虑,软件的寿命便不会长久,要将以后可能的变化考虑在内。需求获取后,务必要将调研的成果编制为文档,可视化需求调研,提供不同的图给不同层次的用户进行确认。对高层领导,可提供总体职能域图或业务流程图,对业务管理人员可提供业务流程图或业务活动图,甚至可以画出用户界面的草图。
3 需求分析与设计
架构师所带领的团队做出的关于软件体系结构的决策,将直接影响软件开发的难度和软件维护的难易度,最终决定软件开发的成败。 
作为一个架构师,在进行架构设计时,必须具备以下基本能力: 
(1)他要把整个团队组织在架构周围,并积极地投入到计划活动上,要把架构转化完成任务的先后顺序,这样才能及时地确定在什么位置用什么技术。 
(2)架构师要在技术上做宏观决策,不必关心细节化的事情,由于技术的变化过于频繁,架构师要时与这些变化同步;架构师必须至少能对各种技术有一个整体上的了解,能够熟知每种技术特点及优缺点,只有这样,架构设计师才能在特定的应用场景下,正确地选择各种技术来设计软件架构。 
(3)架构师要能预测最小化项目中可能出现的风险,因为这直接影响到软件架构的稳定性。 
(4)架构师要能与开发人员保持良好的沟通,确保软件设计的实现。

3. 系统架构设计

WEB发布的系统具有交互性强、更新快捷、方便等优点,基于WEBGIS的河北地质遗迹系统采用Browse/Server体系结构,在逻辑上分为3层:客户机、应用服务器、Web服务器(图6-5)。并在GIS软件支持下开发出了系统应用查询分析模型。客户机负责数据结果的显示和用户请求的提交,IIS-Web服务器负责处理用户的HTML请求,而WEB-GIS地图应用服务器负责响应用户的地图请求。所有的地图数据和应用程序都放在服务器端,客户端只是提出请求,所有的响应都在服务器端完成,只需在服务器端进行系统维护即可。

图6-5系统总体结构图

系统架构设计

4. 程序设计中的架构到底是指什么?

程序设计中的架构是指是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。
软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。
在软件架构所描述的对象就是直接的进行系统抽象组件构成。连接系统的各个组件之间就是做到把组件之间所存在的通讯比较明确与相对细致的实施描述。
处于相应的系统实现环节,那么就会使得细化这些抽象组件成为现实的组件,比如可以是具体的某个类或者是对象。从面向对象领域进行分析,那么各个组件之前实施的连接实现往往是接口。

扩展资料:
程序设计中架构的三种分类:
1、逻辑架构:
软件系统系统当中的各个元件之间所存在的关系,比如外部系统接口、用户界面、商业逻辑元件、数据库等。
2、物理架构:
究竟是怎样做到在硬件当中放置软件元件。例如处于上海与北京进行分布的分布式系统的物理架构,这也就是说全部的元件都是属于物理设备,主要的有主机、整合服务器、应用服务器、代理服务器、存储服务器、报表服务器、Web服务器、网络分流器等。
3、系统架构:
相应的系统存在着性能、强壮性、可扩展性、灵活性、可靠性等这些非功能性特征。设计系统的架构比要让系统架构设计人员存在着过硬的软件与硬件的性能与功能,往往从事这样的工作这是属于设计系统架构环节最为困难的工作。
参考资料来源:百度百科-软件架构

5. 什么是系统架构设计?


什么是系统架构设计?

6. 技术架构和架构设计有什么区别

目前国内对“架构”这个词的使用很混乱。在很多方面、很多层次都可以用“架构”这个词。

你最好弄清楚,这个图是干什么的,用来表现什么意图的内容,在来说这个事。

从字面上解释,技术架构,就是实现某个信息系统所有使用技术的整体展现。架构设计就是干这个的。

7. 怎样的架构设计才是真正的数据仓库架构

一直想整理一下这块内容,既然是漫谈,就想起什么说什么吧。我一直是在互联网行业,就以互联网行业来说。先大概列一下互联网行业数据仓库、数据平台的用途:
整合公司所有业务数据,建立统一的数据中心;
提供各种报表,有给高层的,有给各个业务的;
为网站运营提供运营上的数据支持,就是通过数据,让运营及时了解网站和产品的运营效果;
为各个业务提供线上或线下的数据支持,成为公司统一的数据交换与提供平台;
分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果;比如广告定向精准投放、用户个性化推荐等;
开发数据产品,直接或间接为公司盈利;
建设开放数据平台,开放公司数据;
。。。。。。
上面列出的内容看上去和传统行业数据仓库用途差不多,并且都要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,除了数据量大之外,越来越多的业务要求时效性,甚至很多是要求实时的 ,另外,互联网行业的业务变化非常快,不可能像传统行业一样,可以使用自顶向下的方法建立数据仓库,一劳永逸,它要求新的业务很快能融入数据仓库中来,老的下线的业务,能很方便的从现有的数据仓库中下线;其实,互联网行业的数据仓库就是所谓的敏捷数据仓库,不但要求能快速的响应数据,也要求能快速的响应业务;建设敏捷数据仓库,除了对架构技术上的要求之外,还有一个很重要的方面,就是数据建模,如果一上来就想着建立一套能兼容所有数据和业务的数据模型,那就又回到传统数据仓库的建设上了,很难满足对业务变化的快速响应。应对这种情况,一般是先将核心的持久化的业务进行深度建模(比如:基于网站日志建立的网站统计分析模型和用户浏览轨迹模型;基于公司核心用户数据建立的用户模型),其它的业务一般都采用维度+宽表的方式来建立数据模型。这块是后话。整体架构下面的图是我们目前使用的数据平台架构图,其实大多公司应该都差不多:请点击输入图片描述
请点击输入图片描述
逻辑上,一般都有数据采集层、数据存储与分析层、数据共享层、数据应用层。可能叫法有所不同,本质上的角色都大同小异。我们从下往上看:数据采集数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些简单的清洗。数据源的种类比较多:网站日志:
作为互联网行业,网站日志占的份额最大,网站日志存储在多台网站日志服务器上,一般是在每台网站日志服务器上部署flume agent,实时的收集网站日志并存储到HDFS上;业务数据库:
业务数据库的种类也是多种多样,有Mysql、Oracle、SqlServer等,这时候,我们迫切的需要一种能从各种数据库中将数据同步到HDFS上的工具,Sqoop是一种,但是Sqoop太过繁重,而且不管数据量大小,都需要启动MapReduce来执行,而且需要Hadoop集群的每台机器都能访问业务数据库;应对此场景,淘宝开源的DataX,是一个很好的解决方案(可参考文章 《异构数据源海量数据交换工具-Taobao DataX 下载和使用》),有资源的话,可以基于DataX之上做二次开发,就能非常好的解决,我们目前使用的DataHub也是。当然,Flume通过配置与开发,也可以实时的从数据库中同步数据到HDFS。来自于Ftp/Http的数据源:
有可能一些合作伙伴提供的数据,需要通过Ftp/Http等定时获取,DataX也可以满足该需求;其他数据源:
比如一些手工录入的数据,只需要提供一个接口或小程序,即可完成;数据存储与分析毋庸置疑,HDFS是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。离线数据分析与计算,也就是对实时性要求不高的部分,在我看来,Hive还是首当其冲的选择,丰富的数据类型、内置函数;压缩比非常高的ORC文件存储格式;非常方便的SQL支持,使得Hive在基于结构化数据上的统计分析远远比MapReduce要高效的多,一句SQL可以完成的需求,开发MR可能需要上百行代码;当然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很乐意开发Java,或者对SQL不熟,那么也可以使用MapReduce来做分析与计算;Spark是这两年非常火的,经过实践,它的性能的确比MapReduce要好很多,而且和Hive、Yarn结合的越来越好,因此,必须支持使用Spark和SparkSQL来做分析和计算。因为已经有Hadoop Yarn,使用Spark其实是非常容易的,不用单独部署Spark集群,关于Spark On Yarn的相关文章,可参考:《Spark On Yarn系列文章》实时计算部分,后面单独说。数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和NOSQL数据库;前面使用Hive、MR、Spark、SparkSQL分析和计算的结果,还是在HDFS上,但大多业务和应用不可能直接从HDFS上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据; 和数据采集层到HDFS刚好相反,这里需要一个从HDFS将数据同步至其他目标数据源的工具,同样,DataX也可以满足。另外,一些实时计算的结果数据可能由实时计算模块直接写入数据共享。数据应用业务产品
业务产品所使用的数据,已经存在于数据共享层,他们直接从数据共享层访问即可;报表
同业务产品,报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层;即席查询
即席查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、甚至是部门老大,他们都有即席查询数据的需求;这种即席查询通常是现有的报表和数据共享层的数据并不能满足他们的需求,需要从数据存储层直接查询。即席查询一般是通过SQL完成,最大的难度在于响应速度上,使用Hive有点慢,目前我的解决方案是SparkSQL,它的响应速度较Hive快很多,而且能很好的与Hive兼容。当然,你也可以使用Impala,如果不在乎平台中再多一个框架的话。OLAP
目前,很多的OLAP工具不能很好的支持从HDFS上直接获取数据,都是通过将需要的数据同步到关系型数据库中做OLAP,但如果数据量巨大的话,关系型数据库显然不行;这时候,需要做相应的开发,从HDFS或者HBase中获取数据,完成OLAP的功能;比如:根据用户在界面上选择的不定的维度和指标,通过开发接口,从HBase中获取数据来展示。其它数据接口
这种接口有通用的,有定制的。比如:一个从Redis中获取用户属性的接口是通用的,所有的业务都可以调用这个接口来获取用户属性。实时计算现在业务对数据仓库实时性的需求越来越多,比如:实时的了解网站的整体流量;实时的获取一个广告的曝光和点击;在海量数据下,依靠传统数据库和传统实现方法基本完成不了,需要的是一种分布式的、高吞吐量的、延时低的、高可靠的实时计算框架;Storm在这块是比较成熟了,但我选择Spark Streaming,原因很简单,不想多引入一个框架到平台中,另外,Spark Streaming比Storm延时性高那么一点点,那对于我们的需要可以忽略。 我们目前使用Spark Streaming实现了实时的网站流量统计、实时的广告效果统计两块功能。做法也很简单,由Flume在前端日志服务器上收集网站日志和广告日志,实时的发送给Spark Streaming,由Spark Streaming完成统计,将数据存储至Redis,业务通过访问Redis实时获取。任务调度与监控在数据仓库/数据平台中,有各种各样非常多的程序和任务,比如:数据采集任务、数据同步任务、数据分析任务等;这些任务除了定时调度,还存在非常复杂的任务依赖关系,比如:数据分析任务必须等相应的数据采集任务完成后才能开始;数据同步任务需要等数据分析任务完成后才能开始; 这就需要一个非常完善的任务调度与监控系统,它作为数据仓库/数据平台的中枢,负责调度和监控所有任务的分配与运行。前面有写过文章,《大数据平台中的任务调度与监控》,这里不再累赘。总结在我看来架构并不是技术越多越新越好,而是在可以满足需求的情况下,越简单越稳定越好。目前在我们的数据平台中,开发更多的是关注业务,而不是技术,他们把业务和需求搞清楚了,基本上只需要做简单的SQL开发,然后配置到调度系统就可以了,如果任务异常,会收到告警。这样,可以使更多的资源专注于业务之上。

怎样的架构设计才是真正的数据仓库架构

8. 什么是软件系统架构设计

  软件架构(software
  architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系
  统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向
  对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。
  软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。
  软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。
  在“软件构架简介”中,David Garlan 和 Mary Shaw
  认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结
构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。
  但构架不仅是结构;IEEE Working Group
  on Architecture 把其定义为“系统在其环境中的最高层概念”。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注
重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。
  在Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。
  从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管
  理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑
和流程。
  一般而言,软件系统的架构(Architecture)有两个要素:
  它是一个软件系统从整体到部分的最高层次的划分。
  一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。
  详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。
  所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和
联结器完成某一项需求。
  建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。
  建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。