序言

架构这个词在这几年的开发过程中听过很多次,对它也有个大致的印象,比如我们设计的微服务架构把各个模块拆分开解耦,每一个模块都是独立的子系统,相同交互使用dubbo进行通信交互,有管理模块、交易模块、支付模块、评价模块、营销模块、优惠券模块等,各个模块组成的整体的App应用。但这都是别人已经设计好的架构,架构设计的思维方式和写代码有很大差异,我作为架构新手需要学习一点架构设计流程。所以从0开始学习入门。

目录

从5个大方向了解架构设计流程:

  1. 架构基础:阐述架构相关概念以及架构本质;提炼三个架构设计原则;详细描述架构设计的标准流程和步骤;
  2. 高性能架构模式:将介绍高性能数据库集群读写分离、分库分表两种方案,NoSQL方案的典型特征和应用场景,缓存的架构设计三大要点;介绍PPC、TPC、Reactor、Proactor模型提升性能,以及负载均衡的分类与架构、算法与优缺点。
  3. 高可用架构模式:将介绍CAP原理的理解和应用、FMEA分析方法;从主备、主从、主主、集群、分区详解常见的高可用存储架构;给出如何设计高可用计算架构;使用异地多活方案保障业务高可用的技巧和步骤。
  4. 可扩展架构模式:将概述可扩展模式及其基础思想,详解分层架构、SOA架构、微服务及微内核架构。
  5. 架构实战:将理论与案例结合,在实战中落地专栏传递的架构原则、架构流程和架构模式。

架构是什么?

要理解架构是什么,先得把三组容易混淆的概念梳理清楚:
1)系统与子系统
2)模块与组件
3)框架与架构

系统与子系统

维基百科定义的“系统”:

系统泛指由一群有关连的个体组成,根据预先编排好的规则工作,能完成个别元件不能单独完成的工作的群体。

系统的三个素点

  • 关联:必须是有关联的个体放一起才能成为系统。
  • 规则:每个个体有各自的分工和协作方式,按照一定的规则运行。
  • 能力:系统不是个体能力之和,而是产生新的能力。

“子系统”的定义:

也是由一群关联的个体组成的系统,多半是在更大的系统中的一部分。

模块与组件

软件模块在维基百科上的定义:

软件模块(Module)是一套一致而互相有紧密关连的软件组织。它包含了程序和数据结构两个部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开地被编写的单位,能允许广泛人员同时协作、编写及研究不同的模块。

软件组件的定义:

软件组件(Component)定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。从业务逻辑的角度来拆分系统后,得到的单元就是模块。而从物理部署的角度来拆分系统后,得到的单元就是组件。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用

其实,组件的的英文Compoent也可以翻译成中文的“零件”,零件是一个物理概念,并且具备“独立可替换”的特点。

框架与架构

框架是和架构比较相似的概念,且两者有较强的关系,所以在实际工作中,这两个概念可以容易分不清。
先来看维基百科的定义:

软件框架(Software Framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

其中的关键部分说的是框架是组件规范,而架构关注的是建筑结构,定义如下,

软件架构(Software Architecture)是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。

框架和架构可能经常会有一些似是而非的说法,比如基于Spring MVC框架开发或者标准的MVC架构,两种说法都对,只是采用了不同的角度或维度来分解系统。以《学生管理系统》为例,
业务逻辑的角度分解,学生管理系统的架构是:

物理部署的角度分解,学生管理系统的架构师:

开发规范的角度分解,学生管理系统是:

4R架构

参考维基百科的定义,软件系统架构可以定义为4R架构:软件架构指软件系统的顶层(Rank)结构,它定义了系统由哪些角色(Role)组成,角色之间的关系(Relation)和运作规则(Rule)。

Rank指软件架构是分层的,对应“系统”和“子系统”的分层关系。通常情况下,我们只需要关注某一层的架构,最多展示相邻两层的架构,而不需要把每一层的架构全部揉杂在一起。无论是架构设计还是画架构图,都应该采取自顶向下,逐步细化的方式。以微信为例,

Role指软件系统包含哪些角色,每个角色都会负责系统的一部分功能。架构设计最重要的工作之一就是将系统拆分为多个角色。最常见的微服务拆分其实就是将整体复杂的业务系统按照业务领域的方式,拆分为多个微服务,每个微服务就是系统的一个角色。有本比较火的书就叫《领域驱动设计》。

Relation指软件系统的角色之间的关系,对应到架构图中其实就是连接线,角色之间的关系不能乱连,任何关系最后都需要代码来实现,包括连接方式(HTTP、TCP、UDP和串口等)、数据协议(JSON、XML和二进制)以及具体的接口等。

Rule指软件系统角色之间如何协作来完成系统功能。前面解读系统时提到过——系统能力不是个体能力之和,而是产生了新的能力。Rule所要表达的就是如何产生这个新能力,哪些角色参与了这个新能力。Rule时通过系统序列图(System Sequence Diagram)来展示的。
以简化的支付系统为例,支付系统的架构图如下,

扫码支持的核心场景的系统序列图如下所示:

参考引用

该系列文章引用自极客时间《从 0 开始学架构》课程,参考链接:https://time.geekbang.org/column/intro/100006601

从零开始学架构——架构是啥子?相关推荐

  1. 从零开始学Android架构(一)——什么是设计模式?

    前言 不少人会觉得架构师是一个高大上的岗位,只有技术顶尖的人才能胜任,但其实它并没有这么高大上,大部分的架构师,都只是开发经验非常丰富,并且热爱学习,善于知识迁移和总结.应用的架构是一件非常成熟,有非 ...

  2. 关于新技术的引入原则 ——从零开始学架构

    不以解决实际问题引入的技术都耍流氓. 新技术的引入不是为了证明自己,而是为了解决实际项目中遇到的问题.希望诸位能够控制住自己的心魔. 新技术的引入要求应该是解决的问题大于带来的问题. 再引入新技术,请 ...

  3. 从零开始学架构三 高性能

    从零开始学架构三 高性能 读写分离 读写分离的基本实现是: 数据库服务器搭建主从集群,一主一从.一主多从都可以. 数据库主机负责读写操作,从机只负责读操作. 数据库主机通过复制将数据同步到从机,每台数 ...

  4. 从零开始学架构3 - 高可用篇

    从零开始学架构3 - 高可用篇 从0开始学架构.高可用篇 22 | 想成为架构师,你必须知道CAP理论 CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是 ...

  5. 从零开始学架构5 - 实战篇

    从零开始学架构5 - 实战篇 38 | 架构师应该如何判断技术演进的方向? 潮流派? 保守派? 跟风派? 技术演进的动力 1)对于产品类业务,答案看起来很明显:技术创新推动业务发展! 苹果开发智能手机 ...

  6. 从零开始学架构4 - 可扩展篇

    从零开始学架构4 - 可扩展篇 32 | 可扩展架构的基本思想和模式 今天我们进入架构可扩展模式的学习,这部分内容包括分层架构.SOA 架构.微服务和微内核等,先来聊聊架构的可扩展模式. 可扩展的基本 ...

  7. 从零开始学架构2 - 高性能篇

    从零开始学架构2 - 高性能篇 从0开始学架构.高性能篇 14 | 高性能数据库集群:读写分离 读写分离原理 读写分离的基本原理是将数据库读写操作分散到不同的节点上,下面是其基本架构图. 读写分离的基 ...

  8. 从零开始学架构——架构基础

    本文章的内容是根据书籍<从零开始学架构>整理的资料,供作者以及读者查阅. 1. 架构的定义 软件架构指软件系统的顶层架构.详细阐述如下: a. "系统由一群关联个体组成" ...

  9. 从零开始学架构 01-架构基础【笔记】

    从零开始学架构(李运华) pdf下载地址 https://pan.baidu.com/s/1cZJOR3cfpmS1BDfp6gJaBQ 提取码:u2ou 说明:对从零开始学架构这本书看时所做的记录, ...

  10. 【云原生 | 从零开始学istio】二、Istio核心特性与架构

    istio核心特性 Istio 核心特性 断路器 超时 重试 多路由规则 Istio 架构 写在最后 Istio 核心特性 1.流控(traffic management) 断路器(circuit b ...

最新文章

  1. C++逗号运算符与逗号表达式
  2. 关于RMAN几个容易混淆的参数
  3. Matlab和Modelsim联合仿真的配置
  4. 南邮java实验报告,南邮微机原理实验报告精选.doc
  5. 织梦CMS内核宝宝算命取名企业模板
  6. ‘net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
  7. 网络协议及socket
  8. Atitit. Object-c语言 的新的特性  attilax总结
  9. 精进:如何成为一个很厉害的人--作者:采铜
  10. 高等数学 下册 第九章 偏导数 笔记
  11. python练习五——PTA
  12. python用pandas读取excel指定列_Python用Pandas读写Excel
  13. Sdkman运行时INTERNET NOT REACHABLE问题和解决
  14. C/C++ : 12-24小时制转换
  15. 利用Freemarker模板生成doc或者docx文档(转载整理)
  16. 获取某一年的起始时间和结束时间
  17. 网吧无盘系统服务器安装,网吧网络无盘系统的安装方法
  18. 计算机的历史发展和应用
  19. 相似图片搜索、算法、识别的原理解析(下)
  20. 以太坊开发入门-第一个程序

热门文章

  1. 记:《洛克菲勒留给儿子的38封信》-- 29
  2. 亚马逊、ebay、沃尔玛测评自养号大额,退款的卖家需要解决的那些技术原理
  3. qt4phonon播放视频
  4. 微软正版验证补丁的解决方法
  5. 关于微软账户设置别名时添加的新邮箱无法验证的问题
  6. 多媒体实验 Visual Studio 图像显示与处理 对图像进行二值化、求边缘、增强等处理
  7. 点电荷由电场强度推电势公式
  8. php怎么对音乐文件实施分类,对音乐进行分类
  9. 基于golang的Json选择器
  10. 【洛谷P3480】KAM-Pebbles