精华内容
下载资源
问答
  • 系统架构设计师考试32小时通关.pdf。该书2018年出版,作者:薛大龙,李海龙,吴芳茜,邹月平,黄俊玲 著。51CTO学院的书。考系统架构设计师的可以拿去参考
  • Zip包中软考高级系统架构设计师所需要的所有资料,包括清华版本(官网采用)的系统架构设计师教程以及希赛第4版本的教程、系统架构设计师考试大纲(2009版)也就是清华版本的以及系统架构设计师历年真题及答案解析...
  • 系统架构设计师考试全程指导 第2版,软考高级考试必备。
  • 系统架构设计师考试全程指导.pdf 带目录
  • Microsoft.NET企业级应用架构设计 第二版 扫描版的
  • 一、软件架构设计 软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。 软件系统架构是关于软件系统的 结构、行为和属性 的高级抽象。指定了软件...

    一、软件架构设计

    软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。

    软件系统架构是关于软件系统的 结构、行为和属性 的高级抽象。指定了软件系统的组织结构和拓扑结构

    软件架构是可传递可复用的模型,架构就是体系结构。架构设计介于需求分析和软件设计之间。架构设计就是需求分配,即满足,需求的职责分配到组件上。

    软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。架构设计能够满足系统的性能、可维护性等品质;能够使得不同的利益相关人(stakeholders)达成一致的目标;能够支持项目计划和项目管理等活动;能够有效地管理复杂性;等等。然而系统架构的给出必须建立在需求明确的基础上。

    软件架构能够在设计变更相对容易的阶段,考虑系统结构的可选方案,便于技术人员与非技术人员就软件设计进行交互,能够展现软件的结构、属性与内部交互关系。但是软件架构与用户对系统的功能性需求没有直接的对应关系。

    二、架构的模型 4+1视图

    在这里插入图片描述
    逻辑视图:主要支持系统的功能需求,即系统提供给最终用户的服务。(用户关注)

    开发视图:也称为模块(实现)视图,主要侧重于软件模块的组织和管理。(程序员)

    进程视图:侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。(并发,集成人员)

    物理视图:主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结构、系统安装、通信等问题。(软件到硬件,系统工程人员)

    场景:可以看作是那些重要系统活动的抽象,它使四个视图有机地联系起来,从某种意义上说,场景是最重要的需求抽象。(用例图)

    逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。

    三、软件架构风格

    软件架构风格是描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式;惯用模式则反映众多系统共有的结构和语义特性强调对软件设计的重用

    架构风格定义一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。对软件架构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。例如,如果某人把系统描述为“客户/服务器”模式,则不必给出设计细节,我们立刻会明白系统是如何组织和工作的。

    1. 数据流风格
    在这里插入图片描述

    1. 批处理序列

      强调数据作为一个整体(数据必须是完整的,以整体的方式传递)

    2. 管道和过滤器

      每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流. (构件–>过滤器;连接件–>管道) (数据流的形式)

    2. 调用/返回风格

    在这里插入图片描述

    1. 主程序/子程序

      计算构件作为子程序协作工作,由一个主程序顺序地调用这些子程序,构件通过共享存储区交换数据. 曾经作为结构化开发方法的主要选择,具有结构清晰,维护方便的特点,缺点是主子程序划分缺乏标准,较难实现不同设计人员间设计的子程序复用。

    2. 面向对象风格

      面向对象在类的层次实现高度内聚,整个系统通过不同类的组合调用实现不同功能,便于类的复用,只是面向对象是一个通用风格,类的划分不同设计人员设计结果有很大不同,对实际架构设计指导意义不大。

    3. 层次结构风格

      分层结构将整个系统按照抽象层次不同分为多层,每个层次的程序只需要负责与相邻的上下两层打交道,简化了系统中调用关系复杂度。允许每层用不同的方法实现,为软件重用提供了强大的支持。(二层C/S、三层C/S、MVC、MVP、MVVP、RIA富互联网应用)

    3. 独立构件风格
    在这里插入图片描述

    1. 进程通讯

      进程通讯架构将系统建设成一个个独立构件,构件间采用命名的消息传递来实现沟通与协作。

    2. 事件系统子风格(隐式调用 )

      事件驱动架构风格与进程通讯风格类似,也是将系统分各个为独立的构件,不同的是不同构件间通讯不采用命名的消息,而是采用隐式调用的方式,先将一个个构件的过程注册到某个事件中,当这个事件发生时,所有注册到该事件的过程自动被触发执行。这类风格的好处是独立构件间耦合度进一步降低,方便构件修改及替换,缺点是触发事件放弃了对被触发执行程序组的控制。

    4. 虚拟机风格
    在这里插入图片描述

    1. 解释器

      具有运行时系统行为 (自)定义与改变能力 。如专家系统。

    2. 基于规则的系统

      基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存。(一般用在人工智能领域和DSS中)

    5. 仓库风格
    在这里插入图片描述
    在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。

    1. 数据库系统

      构件主要有两大类,一个是中央共享数据源,保存当前系统的数据状态,另一个是多个独立处理元素,处理元素对数据元素进行操作。中央数据库管理系统通过自身机制如数据排它锁,共享锁等,实现数据高速访问,数据一致性,数据完整性。同时各独立数据处理单元之间互相不受约束。 (如编译器,传统编译器采用批处理架构,现代编译器采用数据共享架构风格。分析树是共享数据。)

    2. 超文本系统

      主要应用于静态网页。

    3. 黑板风格

      由一个作为全局共享数据的黑板,一个控制单元和多个知识源组成,主要应用与专家问题解决系统。通过专家知识和反馈逐步得到正确结果. (如语音识别)

    6. 闭环控制架构

    1. 过程控制

      工业中的过程控制是指以温度、压力、流量、液位和成分等工艺参数作为被控变量的自动控制。过程控制也称实时控制,是计算机及时的采集检测数据,按最佳值迅速地对控制对象进行自动控制和自动调节,如数控机床和生产流水线的控制等。(比如空调制冷,温度大于设定温度制冷,小于等于时停止,一旦大于继续运作)

    2. C2
      在这里插入图片描述

      通过连接件绑定在一起按照一组规则运作的并行构件。

      1. 构建和连接件都有一个顶部和一个底部
      2. 构建的顶部都要连接连接件的底部,构建的底部都要连接连接件的顶部,构建 之间不允许直连。
      3. 一个连接进行直接连接时,必须有其中一个的底部到另一个的顶部。

    四、分层C/S架构风格演化

    1. 二层 C/S
    在这里插入图片描述

    1. 二层 C/S 结构为单一服务器且以局域网为中心,所以难以扩展至大型企业广域网或Internet;(使用范围)
    2. 软、硬件的组合及集成能力有限;(扩展性)
    3. 服务器的负荷太重,难以管理大量的客户机,系统的性能容易变坏;(性能)
    4. 数据安全性不好。因为客户端程序可以直接访问数据库服务器,那么,在客户端计算机上的其他程序也可想办法访问数据库服务器,从而使数据库的安全性受到威胁。(安全)

    2. 三层C/S架构

    在这里插入图片描述

    1. 表现层(Web层)
      负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求 web,web层需要接收 http请求,完成http响应。
      表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
      表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
      表现层的设计一般都使用 MVC 模型。 MVC 是表现层的设计模型,和其他层没有关系。
    2. 业务层 (Service层)
      它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖Web层。
      业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。 (事务应该放到业务层来控制)
    3. 持久层 (dao 层)
      负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口;业务层需要通过数据访问层将数据持久化到数据库中。
      持久层就是和数据库交互,对数据库表进行增删改査的。

    优点:

    (1)允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,从而使整个系统的逻辑结构更为清晰,能提高系统和软件的可维护性和可扩展性。(逻辑独立清晰, 可维护性/可扩展性)

    (2)允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。(可升级性/开放性)

    (3)三层C/S架构中,应用的各层可以并行开发,各层也可以选择各自最适合的开发语言。使之能并行地而且是高效地进行开发,达到较高的性能价格比;对每一层的处理逻辑的开发和维护也会更容易些。(开发维护成本/速度/技术门槛)

    (4)允许充分利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,这就为严格的安全管理奠定了坚实的基础;整个系统的管理层次也更加合理和可控制。(安全)

    3. 三层B/S架构
    在这里插入图片描述

    用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。(客户端)

    基于B/S架构的软件,系统安装、修改和维护全在服务器端解决。(服务端)

    B/S架构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。(开放性)

    缺点:

    1. B/S架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
    2. B/S架构的系统扩展能力差,安全性难以控制。
    3. 采用B/S架构的应用系统,在数据查询等响应速度上,要远远地低于C/S架构。(性能)
    4. B/S架构的数据提交一般以页面为单位,数据的动态交互性不强,不利于OLTP应用.

    五、MVC的架构风格

    在这里插入图片描述

    MVC 全名是 Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,它是分层架构风格的一种。主要解决 将与 UI 相关的逻辑都定义在针对视图的相关元素的事件上 的问题。

    MVC 中各个部分的分工与协作:

    1. Model 是对应用状态和业务功能的封装,我们可以将它理解为同时包含数据和行为的领域模型。Model 接受 Controller 的请求并完成相应的业务处理,在状态改变的时候向 View 发出相应的通知。
    2. View 实现可视化界面的呈现并捕捉最终用户的交互操作(例如鼠标和键盘的操作)。
    3. View 捕获到用户交互操作后会直接转发给 Controller,后者完成相应的 UI 逻辑。如果需要涉及业务功能的调用,Controller 会直接调用 Model。在完成 UI 处理后,Controller 会根据需要控制原 View 或者创建新的 View 对用户交互操作予以响应。

    六、MVP 的架构风格

    在这里插入图片描述

    MVP 是从经典的模式 MVC 演变而来,它们的基本思想有相通的地方:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。

    当然 MVP 与 MVC 也有一些显著的区别,MVC 模式中元素之间“混乱”的交互主要体现在允许 View 和 Model 直接进行“交流”,这在 MVP 模式中是不允许的。在 MVP 中 View 并不直接使用 Model,它们之间的通信是通过 Presenter (MVC 中的 Controller)来进行的,所有的交互都发生在 Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不是通过 Controller,从而避免了 View 和 Model 之间的耦合。

    扩展:

    1. MVVM架构

    在这里插入图片描述
    2. 富互联网应用(RIA)

    在这里插入图片描述
    3. 分布式架构

    客户机/服务器系统开发时可以采用不同的分布式计算架构:

    1. 分布式表示架构是将表示层和表示逻辑层迁移到客户机,应用逻辑层、数据处理层和数据层仍保留在服务器上(类似三层CS架构的两层应用);
    2. 分布式数据架构是将数据层和数据处理层放置于服务器,应用逻辑层、表示逻辑层和表示层放置于客户机(类似两层CS架构);
    3. 分布式数据和应用架构数据层和数据处理层放置在数据服务器上,应用逻辑层放置在应用服务器上,表示逻辑层和表示层放置在客户机(类似三层CS架构)。

    4. ANSI

    在ANSI/IEEE 1471-2000标准中,系统是为了达成利益相关人(Stakeholder)的某些使命(Mission),在特定环境(Enviroment)中构建的。每一个系统都有一个架构(Architecture)。架构(Architecture)是对所有利益相关人的关注点(Concern)的响应和回答,通过架构描述(Architecture Description)来说明。每一个利益相关人都有各自的关注点。这些关注点是指对其重要的,与系统的开发、运营或其他方面相关的利益。架构描述(Architecture Description)本质上是多视图的。每一个视图(View)是从一个特定的视角(Viewpoint)来表述架构的某一个独立的方面。试图用一个单一的视图来覆盖所有的关注点当然是最好的,但实际上这种表述方式将很难理解。视角(Viewpoint)的选择,基于要解决哪些利益相关人的哪些关注点。它决定了用来创建视图的语言、符号和模型等,以及任何与创建视图相关的建模方法或者分析技术。一个视图(View)包括一个或者多个架构模型(Model),一个模型也可能参与多个视图。模型较文本的表述的好处在于,可以更容易的可视化、检查、分析、管理和集成。

    5. 需求和架构

    需求和软件架构设计面临的是不同的对象:一个是问题空间;另一个是解空间。保持两者的可追踪性和转换,一直是软件工程领域追求的目标

    6. 架构风格和设计模式的区别

    1. 架构风格往往是从全局的角度来考虑问题,他是一种独立于实际问题的通用组织结构。例如,常用的B/S架构,在很多不同的系统中,都有应用。

    2. 而设计模式着眼于解决某一特定的局部问题,是一种局部解决方案的应用。例如,在很多的软件系统中,创建对象时,希望有统一的机制对这些对象的创建进行管理,所以出现了工厂模式,创建者模式等设计模式。比如java内存垃圾的回收机制也做成了一种设计模式。

    7. 软件架构需求

    软件架构需求是指用户对目标软件系统在功能、行为、性能和设计约束等方面的期望。需求过程主要是获取用户需求,标识系统中所要用到的构件,并进行架构需求评审。其中标识构件又详细分为生成类图、对类图进行分组和将类打包成构件三步。软件架构需求并不应该包括设计构件的过程。

    8. 面向构件的编程(COP)

    面向构件的编程(COP)关注于如何支持建立面向构件的解决方案。一个基于一般 OOP 风格的 COP 定义如下(Szyperski,1995): “面向构件的编程需要下列基本的支持:

    1. 多态性(可替代性);
    2. 模块封装性(高层次信息的隐藏);
    3. 后期的绑定和装载(部署独立性);
    4. 安全性(类型和模块安全性)。”

    系统构件组装分为三个不同的层次:定制( Customization)、集成(Integration)、扩展(Extension)。这三个层次对应于构件组装过程中的不同任务。

    9. OMG接口定义语言IDL

    IDL 是一种接口定义语言,具体的定义会涉及到接口以及相关部分。文件包含的主要元素有:接口描述、模块定义、类型定义、常量定义、异常、值类型。接口描述是IDL文件中最核心的内容。

    由于IDL只是一种接口定义语言,最终还是要落地与语言对接的,所以IDL的数据类型要与实现语言进行映射。以Java为例,IDL接口映射为Java类,而该接口的操作映射为相应的成员函数。模块定义映射为Java 语言中的包 (Package)或C++的namespaces。

    9. 扩展知识

    一个软件的架构设计是随着技术的不断进步而不断变化的。以编译器为例,其主流架构经历了管道-过滤器到数据共享为中心的转变过程。早期的编译器采用管道-过滤器架构风格,以文本形式输入的代码被逐步转化为各种形式,最终生成可执行代码。早期的编译器采用管道-过滤器架构风格,并且大多数编译器在词法分析时创造独立的符号表,在其后的阶段会不断修改符号表,因此符号表并不是程序数据的一部分。现代的编译器采用以数据共享为中心的架构风格,主要关心编译过程中程序的中间表示。现代的编译器采用以数据共享为中心的架构风格,分析树是在语法分析阶段结束后才产生作为语义分析的输入,分析树是数据中心中重要的共享数据,为后续的语义分析提供了帮助。

    展开全文
  • 架构的定义      软件架构仍在不断发展中,还没有形成一个统一的、公认的定义,这里仅举出几个较为权威的定义。 软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件...

    架构的定义

         软件架构仍在不断发展中,还没有形成一个统一的、公认的定义,这里仅举出几个较为权威的定义。

    1. 软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。

    2. 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式的约束组成。

    3. 软件架构是指一个系统的基础知识,它具体体现在:系统的构件,构件之间、构件与环境之间的关系,以及指导其设计和演化的原则上。(IEEE1471-2000)


      从技术角度看,软件架构的重要性

      1. 项目关系人之间交流的平台

      2. 早期设计决策。从软件生命周期来看,软件架构是所开发系统的最早设计决策的体现。
        表现为: (1)架构明确了对系统实现的约束条件;(2)架构影响着系统的质量属性;(3)架构可以用来预测系统的质量;(4)架构为维护的决策提供依据;(5)架构有助于原型开发。

      3. 在较高层面上实现软件复用

      4. 架构对开发的指导与规范意义不容忽略

         基于架构的软件开发模型则明确地把整个软件过程划分为:架构需求、设计、文档化、评审(评估)、实现、演化等 6 个子过程。

    架构的模型

    最常用的是结构模型和动态模型。

    1. 结构模型。这是一个最直观、最普遍的建模方法。这种方法以架构的构件、连接件和其他概念来刻画结构,并力图通过结构来反应系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质。研究结构模型的核心是架构描述语言
    2. 框架模型。框架模型于结构模型类似,但它不太侧重描述结构的细节而更侧重于整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应问题的机构。
    3. 动态模型。动态模型是对结构或框架模型的补充,研究系统“大颗粒”的行为性质。例如,描述系统的重新配置和演化。动态可能指系统总体结构的配置、建立或查出通信通道或计算的过程。
    4. 过程模型。过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本的结果。
    5. 功能模型。该模型认为架构由一组功能构件按层次组成,且下层向上层提供服务。它可以看做是一种特殊的框架模型。

    “4+1”视图模型从 5 个不同的视角包括逻辑视图、进程视图、物理视图、开发视图、场景视图来描述软件架构。每一个视图只关心系统的一个侧面,5 个视图结合在一起才能反应系统的软件架构的全部内容。如下图所示:

    在这里插入图片描述

    视图名称功能关注点关注人员
    逻辑视图主要支撑系统的功能需求描述系统功能用户
    开发视图(模块视图、实现视图)主要侧重于软件模块的组织和管理描述系统配置、装配编程人员
    进程视图侧重于系统的运行特性,一些非功能性的需求描述系统性能、吞吐系统集成人员
    物理视图主要考虑如何把软件映射到硬件上描述系统安装、拓扑结构、通信等系统工程师
    场景视图(用例视图)使四个视图有机得联系起来描述人机互动的系统行为分析人员和测试人员

    在这里插入图片描述

    软件质量属性


    案例分析常考
    属性子属性作用及要点应对策略
    性能效率指标:处理任务所需时间或单位时间内的处理量增加计算资源、减少计算开销、引入并发机制、资源调度
    可靠性容错出现错误后仍能保证系统正常运行,且自行修正错误主动冗余
    健壮性错误不对系统产生影响,按既定程序忽略错误
    可用性正常运行时间比例心跳、Ping/Echo、主动冗余、被动冗余、选举
    安全性系统向合法用户提供服务并组织非法用户的能力侵入检测、用户认证、用户授权、追踪审计、限制访问
    可修改性可维护性局部修复故障对架构的负面影响最小化软件模块泛化、限制模块之间通信、使用中介和延迟绑定、运行时注册、接口实现分离、信息隐蔽
    可拓展性因松散耦合更易实现新特性/功能,不影响架构
    结构重组不影响主体进行的灵活配置
    可移植性适用于多样的环境(硬件平台、语言、操作系统)
    功能性需求的满足程度构建协作
    可变性总体架构可变预先定义规则,作为相关产品基础
    互操作性通过可视化或接口方式提供更好的交互操作体验交互作用
    可测试性软件发现故障并隔离,定位其故障的能力特性记录回放

    软件架构风格

    这部分内容比较多,我又总结了另一篇文章
    软考-系统架构设计师(软件架构风格)

    层次系统架构风格

    二层C/S架构

    提出的原因:C/S架构是基于资源不对等,且为实现共享而提出来的

    结构:C/S结构将应用一分为二,服务器(后台)负责数据管理,客户机(前台)完成与客户的交互任务。

    优点:C/S软件架构具有强大的数据操作和事物处理能力,模型思想简单,易与人们理解和接受。

    局限: (1)二层C/S结构为单一服务器且以局域网为中心,所以难以扩展至大型企业广域网或Internet;
                (2)软、硬件的组合及集成能力有限;
                (3)服务器的负荷太重,难以管理大量的客户机,系统的性能容易变坏;
                (4)数据安全性不好。

    三层C/S架构

    结构:将应用功能分成表示层、功能层和数据层三个部分

    • 表示层:是应用的用户接口部分,它负担着用户与应用间的对话功能。它用于检查用户 从键盘等输入的数据,并显示应用输出的数据。在变更用户接口时,只需修改显示控制和数据检查程序,而不影响其他两层。检查的内容也只限于数据的形式和取值的范围,不包括有关业务本身的处理逻辑。
    • 功能层:相当于应用的本体,它是将具体的业务处理逻辑编入程序中。而处理所需的数据则要从表示层或数据层取得。表示层和功能层之间的数据交互要尽可能简洁。
    • 数据层:就是数据库管理系统,负责管理对数据库数据的读写。数据库管理系统必须能迅速执行大量数据的更新和检索。因此,一般从功能层传送到数据层的要求大都使用 SQL 语言。

    在这里插入图片描述

    解决方案:对这三层进行明确分割,并在逻辑上使其独立。原来的数据层作为数据库管理系统已经独立出来,所以,关键是要将表示层和功能层分离成各自独立的程序,并且还要使这两层间的接口简洁明了。一般情况下是只将表示层配置在客户机中,如果将功能层也放在客户机中,与二层 C/S 结构相比,其程序的可维护性要好得多,但是其他问题并未得到解决。客户机的负荷太重,其业务处理所需的数据要从服务器传给客户机,所以系统的性能容易变差。如果将功能层和数据层分别放在不同的服务器中,则服务器和服务器之间也要进行数据传送。但是,由于在这种形态中三层是分别放在各自不同的硬件系统上,所以灵活性很高,能够适应客户机数目的增加和处理负荷的变动。

    B/S 架构风格

    使用技术:B/S 结构主要是利用不断成熟的 WWW 浏览器技术,结合浏览器的多种脚本语言,用通用浏览器就实现了原本需要复杂的专用软件才能实现的强大功能,并节约了开发成本。

    在这里插入图片描述

    优点:基于 B/S 架构的软件,系统安装、修改和维护全在服务器端解决(零客户端),很容易在运行时自动升级。也可以更加充分利用网络上的各种资源,同时应用程序维护的工作量也大大减少。

    不足:(1)B/S 架构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能;
               (2)采用 B/S 架构的应用架构,在数据查询等响应速度上,要远远地低于 C/S 架构;
               (3)B/S 架构的数据提交一般以页面为单位,数据的动态交互性不抢,不利于在线事务处理(OnLine Transaction Processing,简称 OLTP )应用。

    MVC架构风格

    定义:全名是 Model ViewController,是模型(model)- 视图(view)- 控制器(controller)的缩写,分层架构的一种。

    分工协作

    • Model 是对应用状态和业务功能的封装。Model 接受 Controller 的请求并完成响应的业务处理,在状态改变的时候向 View 发出相应的通知。
    • View 实现可视化界面的呈现并捕捉最终用户的交互操作(例如鼠标和键盘的操作)。
    • Controller 会根据需要控制原 View 或者创建新的 View 对用户交互操作予以响应。View 捕获到用户交互操作后直接转发给 Controller,后者完成相应的 UI 逻辑。如果需要涉及业务功能的调用,Controller 会直接调用 Model。

    在这里插入图片描述

    MVP架构风格

    定义:全称为 Model-View-Presenter。MVP 是从MVC 演变而来。

    与MVC的相同点:基本思想有相通的地方:Model 提供数据,View 负责显示,Controller/Presenter 负责逻辑的处理。

    与MVC的不同点:MVC模式中元素之间“混乱”的交互主要体现在允许 View 和 Model 直接进行“交流”,这在MVP 中是不允许的。在 MVP 中 View 并不直接使用 Model,它们之间的通信是通过 Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不是通过 Controller。

    缺点:由于对视图的渲染放在了 Presenter 中,所以视图和 Presenter 的交互会过于频繁。还有一点需要明白,如果 Presenter 过多的渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么 Presenter 也需要变更了。

    优点:(1)模型与视图完全分离,我们可以修改视图而不影响模型;
               (2)可以更高效的使用模型,因为所有的交互都发生在一个地方——Presenter 内部。
               (3)我们可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;
               (4)如果我们把逻辑放在 Presenter 中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

    面向服务的架构(SOA)

    典型的定义:(1)W3C 的定义:SOA 是一种应用程度架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
                          (2)Service-architecture.com 的定义:服务是精确定义、封装完善、独立于其他服务所处环境和状态的函数。SOA 本质上是服务的集合,服务之间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务之间需要某些方法进行连接。
                          (3)Gartner 的定义: SOA 是一种 C/S 架构的软件设计方法,应用由服务和服务使用者组成,SOA 于大多数通用的 C/S 架构模型不同之处,在于它着重强调构件的松散耦合,并使用独立的标准接口。

    **概述:**SOA是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)模型的方法。由于 SOA 考虑到了系统内的对象,所以虽然 SOA 是基于对象的,但是作为一个整体,它却不是面向对象的。

    在这里插入图片描述
    服务的基本结构:

    在这里插入图片描述

    SOA 设计原则:

    1. 明确定义的接口
    2. 自包含和模块化
    3. 粗粒度
    4. 松耦合
    5. 互操作性、兼容和策略声明

    SCA 服务构件于传统构件的区别:服务构件往往是粗粒度的,而传统构件以细粒度居多;服务架构的接口是标准的,主要是服务描述语言接口,而传统构件常以具体 API 形式出现;服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;服务构件可以通过构件容器提供 QoS 的服务,而传统构件完全由程序代码直接控制。

    SOA 的关键技术:这些技术都是以 XML 为基础而发展起来的。

    UDDI统一描述、发现和集成数据模型;API;注册服务
    WSDLWeb 服务描述语言服务实现定义包含:服务、端口;服务接口定义包含:绑定、端口类型、消息、类型
    SOAP简单对象访问协议定义了服务请求和服务提供者之间的消息传输规范。SOAP包含:封装、编码规则、RPC表示、绑定。SOAP消息包含:封装(信封)、SOAP 头、SOAP体。
    REST表述性状态转移是一种只使用 HTTP 和 XML 进行基于 Web 通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。

    SOA 的实现方法:

    1. Web Service

    在这里插入图片描述

    1. 服务注册表

    (1)服务注册
    (2)服务位置
    (3)服务绑定

    1. 企业服务总线(ESB)

    内容:ESB 提供了一种基础设施,消除了服务请求者与服务提供者之间的直接连接,使得服务请求者和服务提供者进一步解耦。EJB 是由中间件技术实现并支持 SOA 的一组基础架构 ,是传统中间件技术于 XML、Web Service 等技术结合的产物,是在整个企业集成架构下的面向服务的企业应用集成机制。

    功能:(1)支持异构环境中的服务、消息和基于事件的交互,并且具有适当的服务级别和可管理性;(2)通过使用 ESB ,可以在几乎不更改代码的情况下,以一种无缝的非侵入方式使现有系统具有全新的服务接口,并能够在部署环境中支持任何标准;(3)充当缓冲的 ESB 与服务逻辑相分离,从而使不同的系统可以同时使用同一个服务,不用在系统或数据发生变化时,改动服务代码;(4)在更高的层次,ESB 还提供诸如服务代理和协议转换等功能;(5)头攻可配置的消息转换翻译机制和基于消息内容的消息路由服务,传输消息到不同的目的地。

    优势:(1)扩展的、基于标准的连接;(2)灵活的、服务导向的应用组合;(3)提高复用率,降低成本;(4)减少市场反应时间,提高生产率。

    微服务

    优势:(1)技术异构性;(2)弹性;(3)扩展;(4)简化部署;(5)与组织结构相匹配;(6)可组合型;(7)对可替代性的优化

    挑战:(1)分布式系统的复杂度;(2)运维成本;(3)部署自动化;(4)DevOps 与组织结构;(5)服务间依赖测试;(6)服务间依赖管理

    微服务与 SOA :
    在这里插入图片描述

    架构设计

    在这里插入图片描述

    软件架构文档化

    内容: 一是过程,编档过程能促使架构设计师进一步思考,使得架构更加完善;二是结果,描述架构的文档将作为架构开发的成功,供项目关系人使用。

    架构文档的使用者:架构的项目关系人。编写技术文档最基本的原则之一是要从读者的角度来编写。

    编档规则:

    1. 从读者的角度编写文档
    2. 避免出现不必要的重复
    3. 避免歧义
    4. 使用标准结构
    5. 记录基本原理
    6. 使文档保持更新,但更新频率不要过高
    7. 针对目标的适应性对文档进行评审

    视图编档:

    在这里插入图片描述

    软件架构评估

    方法:

    1. 基于调查问卷或检查表的方式(依赖于评估人员的主观推断)
    2. 基于场景的方式:应用在架构权衡分析法(ATAM)和软件架构分析方法(SAAM)中。它是通过分析软件架构对场景的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。
    3. 基于度量的方式:建立在软件架构度量的基础上

    架构权衡分析法(ATAM)

    步骤:

    • ATAM 方法的表述:评估负责人向参加会议的项目代表介绍 ATAM
    • 商业动机的表述
    • 架构的表述
    • 对架构方法进行分类
    • 生成质量属性效用树
    • 分析架构方法
    • 集体讨论并确定场景的优先级
    • 分析架构方法
    • 结果的表述

    分析得到的信息:

    • 已编写了文档的架构方法
    • 经过讨论得到的场景集合及其优先级
    • 效用树
    • 所发现的有风险决策
    • 已编成文档的无风险决策
    • 所发现的敏感点和权衡点
    展开全文
  • Saas系统架构的思考,多租户Saas架构设计分析

    万次阅读 多人点赞 2019-06-14 13:39:35
    ToBSaas系统最近几年都很火。...最近一年,有幸架构一个Crm saas 系统,上线了几个月来,各方面都比满意。整个系统创建过程,踩了很多坑,收获也比较多。总结一下Saas系统架构一些特点: Saas系统分...

            ToB Saas系统最近几年都很火。很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统。很多Saas创业公司也拿了大额风投。毕竟Saas相对传统软件的优势非常明显。   

    最近一年,有幸架构一个Crm saas 系统,上线了几个月来,各方面都比满意。整个系统创建过程,踩了很多坑,收获也比较多。总结一下Saas系统架构一些特点:

    Saas系统分级

    SaaS系统架构成熟度模型的5个级别——从“混乱”到“乌托邦“

    第0级(混乱):每次新增一个客户,都会新增软件的一个实例。
    第1级(受控的混乱):所有客户都运行在软件的同一个版本上,而且任何的定制化都通过修改配置来实现。
    第2级(多租户[multi-tenant]、高层建筑[Highrise]):所有的客户都已经可以在软件的同一个版本上运行了,而且他们都在同一个“实例”上运行。
    第3级(多租户, 扩建[Build-Out]):此时你已经拥有了多租户、单一版本的软件模型。不过你还是可以通过硬件扩展(scale-out)的方式来进行扩充。
    第4级(乌托邦):如同第3级,除非你可以找出有效的方式,以在不同的“实例”上运行不同版本的软件

    应用程序必须支持多租户:

        多租户可以分为几个不同的类别(如列表下方的图所示):
        1.1,云中的简单虚拟化,其中只对硬件进行共享。
        1.2,共享应用程序,对每个租户使用不同的数据库。
        1.3,共享应用程序和数据库(效率最高,真正的多租户)。

    1.分层设计

    Saas系统分层大概是:

    Saas系统分层
    Saas系统分层

     

    Saas系统分层:租户识别>应用层>数据访问层>缓存层>数据库

    业务代码都是写在应用层。

    租户识别可以用spring拦截器实现,然后使用ThreadLocal传递给后端

    数据库和缓存层对应用层应该是透明的。程序员在写代码的时候,只关心业务逻辑,不应该担心多租户的问题。

     

    2.数据隔离要透明

    saas系统说起来很简单,任何系统似乎加个tenant_id(租户id)就变成saas系统了。比如原来的用户登录是:

    select username,password from users where email='abc@qq.com'

    改成

    select username,password from users where email='abc@qq.com' and tenant_id =1;

    对于复杂业务的saas系统,这样做法非常危险,而且开发效率很低。你想想如果那个程序员写sql时候忘了加 “ and tenant_id =1” . 结果不堪设想。

    比较好做法是在数据库访问层对SQL进行改写。

    TenantContext.exec("select username,password from users where email='abc@qq.com' ");

    在连接池根据TenatnContext改写Sql. 

    这样做好处是,一来程序猿最多把系统搞down了,也不至于信息串了互相泄露。二来将来做分表分库也很方便,上层应用不用修改。

    3. 租户识别方案

    比较好做法是通过url识别租户。系统是给租户生成一个随机的三级域名,比如 abc.crm.baidu.com.   如果客户想使用自己的域名,可以在cname到我们生成的三级域名,并在管理系统里面做绑定。

    这样一个租户可以有两个域名,访问saas,一个随机生成的三级域名,另外一个租户自己的域名.代码里面可以根据过来的域名,判断是那个租户然后初始化TenantContext.

    如果不想通过域名来做,也可以通过登录名来判断。这种方式要涉及到租户切换问题。

    4. 智能DNS

    以后补充。

    5. 租户管理系统(计费,订购,定制,充值,催缴)

    Saas系统是必须考虑计费系统和租户控制系统。这个系统需要都是独立设计。比如那个租户购买了那些模块,一个月多少钱。租户可以创建最多的用户数。计费到期邮件提醒等功能。

    计费方式一般有两种,周期性计费,类似月租方案,和使用量计费,用多少付多少。 周期性计费比较简单。也可以两者结合起来。

    6. 定制化开发

    SAAS的优势在于一套系统多人使用,似乎和定制化开发有冲突。比如A客户想要A功能,B客户不想要。但定制化开发是无法避免的,比如CRM系统这样复杂的系统,不可能一套系统满足所有公司的要求。定制化开发尽可能分系统,分模块去做。然后通过控制台中配置不同租户订购不同模块,那些模块可以在前端页面上显示。不同的子系统需要分开部署。前端可通过nginx根据url分发,比如 abc.crm.baidu.com/bi/xxx/xx这个地址,就分发到BI子系统。不要尝试OSGI去搞模块化,这个是个大坑。

    还有开发和产品,现有需求一定要分析清楚,不要一上线发现后患无穷。新功能尽量做的独立可以配置。

    7. 灰度升级

    SAAS付费企业客户对系统问题都特别敏感。 为了减少升级可能出现问题的影响范围,一般都采用灰度升级策略。如果使用了url来区分不同租户,灰度升级配置就会很方便。可以配置nginx 来根据域名做分发,比如租户A(aaa.com)到实例1(版本1.0),租户B(bbb.com)到实例2(版本). 当需要域名配置非常多的时候,nginx配置文档会乱。这块时候可以考虑使用nignx_lua来写一些扩展模块。

    8. 容量估计

     

    9. Saas平台架构分层分析

    Saas平台架构需要完成从用户申请链接saas到用户对自己购买的功能模块的应用整个过程,用户用起saas看似简单快捷,但这个过程却需要saas平台架构默默完成的非常复杂的处理过程。通过对saas平台架构的了解,可以清晰的分化数据的处理过程,让用户也可以明白saas平台架构处理数据的优势。下面介绍:saas平台架构分为哪几部分。

     

    saas平台架构之呈现层:

    saas平台架构的呈现层可以使用的客户端可能都浏览器或本地客户端。如果是浏览器则需要Web界面技术、交互技术等技术(如:HTMl5技术、CSS3技术、Ajax技术等)的支持,如果是软件客户端则需要远程桌面技术、软件交互技术等技术支持。

    saas平台架构之调度层:

    saas平台架构的调度层体现分布式系统的特性之一。调度层首先负责识别并通过AAA认证每个用户请求,然后根据业务处理器的负载、业务特征进行合理的调度。通过应用这样的架构SaaS平台可以横向扩展。此外在存储、缓存等方面为了满足平台的横向扩展需求,调度层也必须具有良好的可扩展性。

    saas平台架构之业务层:

    saas平台架构的业务层负责接收调度层转发过来的请求,而且还要通过对接受到的请求执行真正的业务逻辑。一般来说业务逻辑的执行使用一台服务器就够了。因此业务层实际是由一排对等的服务器组成的,每台服务器都执行相同的业务逻辑。

    saas平台架构之数据层:

    saas平台架构的数据库集群用于处理存储关系性很强并且对事务性要求很高的业务数据,这类数据目前还要用传统的数据库集群技术来解决,saas平台架构的数据库集群主要是根据业务特征制定数据拆分方案。同时分布式数据库用于存放海量但关系性不强的数据(如:用户的操作日志等)。

    以上是对“Saas系统架构的思考,多租户Saas架构设计分析”的介绍,从saas平台架构处理数据可以看出saas平台的应用有很强的优势,如用户使用saas非常方便简单只要浏览器或本地客户端接口,saas平台处理数据要经过层层认证saas产品安全可靠,saas平台优化处理数据提高saas性能。

    多租户Saas系统架构还应该满足以下需求:

    编号需求描述
    1软件授权云平台付费授权机制,可按时间、功能、数量等进行付费授权
    2组织入驻允许组织主动申请加入平台
    3实名认证个人实名认证、组织实名认证
    4资质审核个人和组织的资质审核,如对获得的证书或荣誉进行审核
    5组织绑定个人账户绑定组织,与组织建立关联关系
    6组织解绑个人账户与组织进行解绑
    7账户注销个人账户注销,并销毁所有个人资料和档案
    8统一登录即 SSO
    9统一注册提供统一的用户注册页面

    部分资料整理自:

    http://www.ruanally.com
    ​​​​​​​http://qk.gam7.com
    ​​​​​​​​​​​​​​http://www.ruanbe.com

     

    展开全文
  • 微信技术总监分享架构设计高清完整PDF版

    万次下载 热门讨论 2012-05-15 09:17:26
    在技术架构上,微信是如何做到的?日前,在腾讯大讲堂在中山大学校园宣讲活动上,腾讯广研助理总经理、微信技术总监周颢在两小时的演讲中揭开了微信背后的秘密。
  • 大型分布式网站架构设计与实践

    千次下载 热门讨论 2016-08-21 15:46:16
    《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了...
  • 架构师之路二-架构设计方法论

    千次阅读 2020-03-19 19:33:37
    本系列文章教你怎么样成为一名架构师,本篇文章目的是让你掌握一套架构方法论,掌握规范的设计方法,设计出更好、更稳定的架构设计

     

    概念解析

    在文章开始之前需要先理解几个概念:

    • 什么是方法论?
      我们拿到一个输入,然后根据这个输入预期一个输出,把中间这个过程描述出来就是方法论。所以我们本篇讲的架构师方法论就是架构师先拿到经过需求分析出来的输入,然后完成架构设计,这个过程就是架构设计方法论。

    • 什么是设计?
      设计是实现意图的书面表现形式,而非口头的东西;设计是要让实现者能理解设计者的意图,是给别人看而非自己看;设计是要让不同的实现着做出来的东西差不多;设计是严肃的,后续实现者不能随意偏离设计

    • 什么是系统架构师
      作为系统架构师你需要跳出代码层面的设计,站在更加宏观的角度进行把握。你关注的是整个系统而不是其中的一两个查询模块,你看到的元素更多的是 :人 、硬件 、软件 、网络。

    业务分析

    业务分析概述

    • 业务分析是在系统开发之前对系统要解决的业务领域的研究过程,目的是搞清楚该业务领域的概念以及业务的运转过程

    • 开发系统的目的一般是为了优化业务流程,使业务运转得更加高效、经济

    • 系统的价值主要在于实施后能够帮助客户带来多少业务价值

    • 不管有无系统,业务通常是不变的

    业务分析阶段活动模型

    业务分析阶段是由业务分析师 基于自身的业务知识和类似产品的参考,再结合客户、领域专家的咨询和指导输出业务分析阶段的成果,主要包括   领域模型业务模型

    领域模型

    领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。概念比较深奥,其实说白了就是我们把基于对业务的理解画成一个类图,并画出这些类之间的关系(面向对象),下面我们看一个实际的领域模型然后加深一下理解。

    在领域模型绘制时经常会出现下面两种典型错误:
    • 将待开发系统也放在领域模型里面
    待开发系统要不要出现在领域模型中取决于你的业务离开待开发的系统能不能玩的转。举个例子:如果开发的是共享单车的信息系统,共享单车离开信息系统肯定玩不转,所以这时候信息系统需要出现在领域模型。
    • 概念划分不清,关系没有画到位
    比如属性画成了类,继承关系搞错

    领域模型的作用

    领域模型可以整理业务中的概念以及关系,帮助团队中的成员对业务的理解保持一致;往后可以指导数据库设计、系统功能设计、指导开发。

    现在有种开发模式是基于UI指导开发,根据UI进行数据库数据库设计、代码编写,我们称之为“急功近利式”开发模式。因为UI是系统表面性的东西,是异变的,不稳定的,这种模式下UI变化后我们的的设计可能也需要跟着变。

    而右边是基于领域驱动开发,在开发前先去思考业务的本质,先把领域层分析出来,再根据分析出来的领域层进行界面设计、架构设计、代码开发,这是由内而外的设计,这样做出来的系统就会比较稳定。

    业务模型

    前面讲的领域模型是基于静态的关系,要理解业务其实更多的需要从动态的角度来了解业务运转的过程,所以这时候就需要做业务模型。理解业务模型需要先理解以下几个概念:

    业务对象

    业务主体主要有 业务执行者、业务工人、业务实体。
    要理解这三个对象,我们首先需要知道什么是业务,业务是指一个组织可以向组织外的人提供服务。
    业务执行者(Business Actor)组织外的人,来享受这个服务的人就称为业务执行者
    业务工人(Business worker) :提供业务的组织的内部支撑人员
    业务实体(Business Entity) :提供业务的组织的内部信息系统

    理解这几个概念还是有点拗口,我们来看看下面一张图,一个餐厅对象的业务建模

    右边大的黑框是提供业务的组织,是餐厅;图的左边是个业务执行者,是顾客;而在餐厅内部又分为业务工人(领位员、点餐员、厨师等),业务实体(餐厅点餐管理系统)我们在做业务建模时需要注意,所有业务对象在圆圈的右下方需要有个斜线,这是一个建模规范

    业务用例

    概念:组织对外提供的业务服务

    一个银行是一个提供业务的组织,这就是业务用例,考察的对象是银行这个组织而不是系统。

    业务流程

    业务用例是最基本的定义,而要分析业务动态的过程就需要业务流程,我们一般用时序图来表示。

    餐厅现状的业务流程这时候所有的动作步骤全部靠人参与

    建设系统后的业务流程

    有了系统后系统可以承担一部分工作,有了系统能改善业务流程、提高价值、降低成本,这就是 建设系统的价值以及意义 ,否则就没必要做系统建设了。

    业务流程分析的作用

    • 动态表达业务运转的过程

    • 只有很好的理解了业务流程,才能设计出更好的支持该业务的系统

    • 通过对比系统实施前后的流程变化,分析优化点,评估系统价值

    小结

    在准备做一个系统之前需要先分析业务,将业务理解清楚。理解业务既有静态的理解(领域模型)又有动态的理解(业务流程),只有将业务理解清楚才能做出良好的系统。

    需求分析

    需求分析是需求工程的环节,整个需求工程分为两大块

    前期主要是做需求开发,包括需求调研、需求分析、需求定义;后期需要做需求管理,包括需求确认、需求跟踪、需求变更控制。咱们架构师主要聚焦在 需求分析需求定义 两个环节。

    需求分析阶段活动模型

    需求分析阶段是由系统分析师 基于业务分析师输出的领域模型、业务模型 再结合 需求调研成果 输出需求分析阶段的成果,主要包括   系统上下文功能型需求(用例模型)非功能性需求(性能等)

    系统上下文

    系统上下文是指系统与周边用户和其它系统之间的关系

    系统上下文的绘制很简单,就是将准备开发的系统画在中间,把用户和对接的周边系统画出来这就叫系统上下文。

    系统用例

    系统用例是指系统被使用的案例,主要是从业务流程中推导出来,系统用例的命名规范主要是使用动词短语,如:添加用户、查询话费等短语。

    我们可以对系统用例细化,如上对登记入座信息这一用例进行细化

    系统用例与业务用例的区别与联系

    • 业务用例是描述组织对外提供的能力,系统用例是描述系统对外提供的能力,两者考察的对象不一样

    • 系统用例是业务用例相应流程中对系统的一个操作

    功能与用例的区别和联系

    • 用例是需求分析的产物,描述的是某种用户使用系统完成什么业务

    • 功能是设计阶段的产物,是根据系统用例和架构中的组件推导出来的

    • 功能是静态的,用例是动态的

    • 从语法角度来说,用例是动词短语,功能是名词短语 例:用例命名(查询空位),功能命名(空位查询)

    • 常见的错误:描述需求时拿出一份功能清单

    非功能性需求

    主要是确定一些非功能性需求,比如:可用性性能安全性、 经济性、可扩展性、 可伸缩性、可移植性等等 可用性、性能、安全性是需要重点关注的内容,我们后期专门拿出来讲。

    架构设计(重点)

    前面的业务分析与需求分析一般是由其他专人来做,那么这一块的内容则是架构师的工作,需要重点关注。

    在系统简单时我们需要从 功能角度 对系统进行分解和拆分,这个时候我们只要做下概要设计和详细设计就可以。在复杂系统时我们需要从 组件角度 对系统进行分解和拆分,这个时候我们就需要做架构设计与概要设计

    组件、功能、模块

    组件是架构设计阶段考虑的单元(进程级别),功能、模块是概要设计、详细设计考虑的单元;一个组件可包含多个模块,涉及多个功能;一个功能的实现可能需要多个组件中的相应模块来协作完成

     

    我们用一张图来理解他们三者之间的关系:
    前后端分离的一个项目从进程角度划分出三个组件,分别是web前端、后端接口服务、后台服务,
    为了实现用户查询这个功能必须要在相应组件里都需要有响应的模块
    一个组件里可以有多个不同的模块,各个组件里的模块相互协作完成某一个功能

    架构

    如果用一句话来描述什么是架构,那应该可以这样定义:架构是系统的内部结构(组件以及它们之间的关系)还要包含系统的技术要素。做架构设计其实就是干这两件事。

    架构设计有两个目标:

    • 满足功能性需求

    • 满足非功能性需求

    架构设计阶段活动模型

    架构设计阶段是由系统架构师 参照需求分析的产物(SRS),再通过对系统分析师、项目经理的咨询输出架构设计阶段的成果,主要包括   架构工作计划逻辑架构物理架构开发组件一览表部署组件一览表技术选型一览表

    如何来衡量一个架构的设计好坏呢?
    在设计完成时我们可以通过设计资料的规范性以及设计思路、方案决策、技术选型的合理性来校验
    在系统实现后可以通过功能性和非功能性需求的满足程度来校验

    逻辑架构设计(非技术型)

    • 将系统从非技术角度分解成若干逻辑组件,并建立它们之间的关系,以满足系统需求。关系分静态和动态,其中静态关系用组件图表示,动态关系用序 列图表示。

    • 逻辑架构中,组件名称使用母语以便理解

    • 逻辑架构不涉及技术元素,只是纯概念上的表述

    • 逻辑架构的读者可以是非技术人员

    • 逻辑架构设计完成后应和系统分析师、产品经理等人员一起确认,检查是否满足需求

    我们看一个典型的逻辑架构

    物理架构设计(技术型)

    • 将逻辑架构中的组件转换为技术性的物理组件,名称使用英文,在实现时应遵循这些命名

    • 物理组件粒度有大有小,可表现为子系统、进程、对象等多种形式

    • 物理架构还需要解决非功能性需求

    • 物理架构还要和后续设计和实现进行衔接

    • 非技术人员可能难以理解

    我们看一个典型的物理架构

    小结

    架构设计为系统的总体设计,决定了系统的组件划分、关键技术方案决策、技术选型 架构设计上接需求,下接进一步的设计和实现,是决定系统实现的质量、效率、成本的关键阶段

    概要设计与详细设计

    概要设计

    概要设计阶段的主要内容是进行功能模块划分以及接口定义(接口名称、功能概要、参数、返回值)

    概要设计阶段活动模型

    概要设计阶段是由开发组长 基于系统用例、开发组件一览表 再结合对架构师和系统分析是师的咨询输出概要设计阶段成果,主要包括  功能一览表接口说明书

    详细设计

    详细设计阶段的主要内容是描述内部模块实现、界面设计以及数据库设计

    详细设计阶段活动模型

    详细设计阶段可能会根据工作内容进行分工,主要结合之前的产出输出详细设计阶段的成果,主要包括  界面设计模块内部设计数据库设计

    后续工程阶段

    开发阶段活动模型

    开发阶段主要是由开发人员结合架构设计的产物以及详细设计的产物编写相应代码。

    测试阶段活动模型

    image.png

    测试阶段主要是由测试人员结合架构设计的产物以及详细设计的产物进行功能测试,包括功能性需求以及非功能性需求,需要对外输出 测试计划测试用例 以及 测试报告

    部署阶段活动模型

    部署阶段主要是由部署人员结合架构设计的产物以及跟开发人员的咨询进行组件部署,这一阶段需要输出部署计划部署方案部署手册部署脚本部署实施

    运维阶段活动模型

    运维阶段主要是由运维人员结合架构设计的产物进行系统运维,需要输出运维计划运维方案运维手册运维脚本运维报告

    好了,各位朋友们,本期的内容到此就全部结束啦,能看到这里的同学都是优秀的同学,下一个升职加薪的就是你了!
    如果觉得这篇文章对你有所帮助的话请扫描下面二维码加个关注。"转发" 加 "在看",养成好习惯!咱们下期再见!

     

    热文推荐

    ☞ 数据库优化之SQL优化
    ☞ 数据库优化之实例优化
    ☞ Docker基础与实战,看这一篇就够了!
    ☞ Docker-Compose基础与实战,看这一篇就够了!
     OAuth2.0最简向导(多图预警)
    ☞ 构建三维一体立体化监控体系
    ☞ SpringCloud Alibaba系列

     

    展开全文
  • 架构设计(1)-谈谈架构

    万次阅读 多人点赞 2017-10-17 11:18:15
    1、什么是架构架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这...
  • 架构设计(8)—高可用架构设计

    千次阅读 2019-01-14 17:58:37
    高可用架构设计总结: 前言:海恩法则和墨菲定律 海恩法则 · 事故的发生是量的积累的结果。 · 再好的技术、再完美的规章 , 在实际操作层面也无法取代人自身的素质和责任心 。 墨菲定律 · 任何事情都没有...
  • 2020软考系统架构设计师总结

    千次阅读 多人点赞 2020-12-29 10:03:42
      大概是从12月底到4月底,仔细读了遍《系统架构设计师教程(第4版)》(希赛版,清华官方版的09年就没更新了太老),看完了整本书。之后又看了遍《系统架构设计师考试全程指导(第2版)》,从4月底到7月中看完,...
  • 模块化架构设计

    千次阅读 2020-09-02 18:10:39
    架构设计是一个不断演变的过程,当项目较小,或者项目刚刚起步的阶段,我们往往不需要关注架构设计,只有当软件膨胀到一定程度,我们才会针对当前业务,设计出适合当前阶段的架构。所以有的项目就会出现不断膨胀,...
  • 四个架构设计案例及其思维方式

    千次阅读 2019-02-11 12:45:51
    在本篇《架构之道~四个架构设计案例及其思维方式》中,我会通过四个案例,讲解如何综合运用这些武器,分别对小型系统,中型系统,基础架构,甚至是组织技术体系进行架构和设计。 二、小型系统案例~...
  • 微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 ...
  • 必看!软考系统架构设计师考试详情与备考攻略

    千次阅读 多人点赞 2019-06-12 17:40:39
    温馨提示一下,此文章很长,但内容很丰富,包括了备考系统架构设计师考试需要了解的全部内容,请大家认真看完,觉得不错的话可以点赞支持下,我还会更新其他软考考试的相关内容,如果有兴趣的话可以关注我。...
  • 《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了...
  • 常见的大数据平台架构设计思路

    千次阅读 2020-02-16 21:17:15
    如果缺乏有效的数据整体架构设计或者部分能力缺失,会导致业务层难以直接利用大数据大数据,大数据和业务产生了巨大的鸿沟,这道鸿沟的出现导致企业在使用大数据的过程中出现数据不可知、需求难实现、数据难共享等一...
  • 软件架构设计的几点理解

    千次阅读 2018-09-23 17:33:21
    与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。从和目的、主题、材料和结构的联系上来说,软件架构...
  • 架构总结:架构设计要点

    千次阅读 2018-05-26 21:36:34
    架构中五个重要的核心指标,分别是性能、可用性、伸缩性、扩展性和安全性这5个架构指标一、性能性能就是核心要素之一,不然我为什么架构设计?随随便便一个lowlow的系统上线就好了。所以性能优化是很多小公司卖不去...
  • 架构设计——架构知识体系

    万次阅读 多人点赞 2018-08-23 13:45:58
    架构设计——架构知识体系   1、什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。 我们主要针对互联网服server系统...
  • 系统架构设计

    千次阅读 2018-11-29 15:20:35
    首先明确应用架构的定义,从百度百科上即可了解到何为应用架构: 应用架构(Application Architecture)是描述了IT系统功能和技术实现的内容。应用架构分为以下两个不同的层次: 企业级的应用架构:企业层面的...
  • 系统架构设计师考查重点

    千次阅读 2018-07-05 17:13:36
    系统架构设计师考试属于全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个高级考试。考试不设学历与资历条件,不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次...
  • 架构实战:架构设计文档模板

    千次阅读 2019-06-11 11:24:14
    在前面的专栏里,有同学留言说想看看具体的架构设计文档。由于信息安全的原因,再加上稍微复杂的系统,设计文档都是几十页,因此专栏无法直接给出详细的文档案例。但我认为提供一个架构设计文档模板还是很有必要的,...
  • 微服务架构设计实践 目 次1 序言2 微服务3 软件架构设计思想4 微服务架构设计实践4.1 项目概述4.2 架构准备阶段4.3 概念架构阶段4.4 细化架构阶段4.4.1 业务架构4.4.2 数据架构4.4.3 应用架构4.4.4 技术架构4.4.5 ...
  • LabVIEW软件架构设计

    热门讨论 2010-05-13 09:34:11
    LabVIEW软件架构设计LabVIEW软件架构设计LabVIEW软件架构设计LabVIEW软件架构设计LabVIEW软件架构设计
  • 软件架构设计---软件架构概述

    万次阅读 2018-09-17 21:25:54
    通俗地讲,软件架构设计就是软件系统的“布局谋篇”。  人们在软件工程实践中,逐步认识到了软件架构的重要性,从而开辟了一个崭新的研究领域。软件架构的研究内容主要涉及软件架构描述、软件架构设计、软件架构...
  • 在不同的架构设计方法中出现的软件架构视图种类很多,本文介绍最常用的两种架构视图——逻辑架构视图和物理架构视图,并通过具体案例的分析说明如何运用它们进行架构设计。 当观察和描述事物大局的时候,逻辑架构和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,139,419
精华内容 455,767
关键字:

架构设计