前言
分层架构遍布生活中的方方面面,无论是我们的计算机网络里面的七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层
,还是网络规划里面的接入层、汇聚层、核心层
。
计算机系统中的存储器通常采用分层的体系 (Memory Hierarchy) 结构:片上缓存、片外缓存、主存和外存
在小编从事过的工作中,大数据领域的数据治理也包含了分层思想,将数据分为接口层、整合层、中间层、汇总层和应用层
。每一层占的维度和高度不一样,数据的展现形式也不一样。
分层思想是一种将复杂问题分解为多个层次,然后逐层解决的方法。这种方法通常用于在设计和开发复杂的系统时,将大型系统分解为多个较小的、更容易管理的子系统,然后逐层解决子系统的问题。
为什么说分层架构非常普遍而且基础呢?因为它比较符合思考问题和解决问题的过程。这体现了逐步解决问题的思维方式。分层次抽象的方式可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。
理论基础
在软件架构中,也包含一种架构叫分层架构的项目组织方式,最常见的软件架构,也是事实上的标准架构。这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口进行通信。分层架构通常明确约定软件一定要分成多少层。
最常见的分层结构是四层结构,包含表现层、业务层、持久层和数据层
,它们的作用分别是:
- 表现层 (Presentation Layer)
- 用户界面,负责视觉和用户互动
- 业务层 (Business Layer)
- 实现业务逻辑
- 持久层 (Persistence Layer)
- 提供数据, SQL语句就放在这一层
- 数据库 (Database Layer)
- 保存数据
下面这幅图展示了常见的四层架构的关系
处于最顶层的是表现层,主要是前端交互部分;然后是业务层,应该就是根据业务需求将数据加工成前端需要格式的接口层,在Java中就是编写Controller接口或者Service到Controller这整个部分;再往下是持久层,这一层主要负责与数据库进行交互;最后一层就是数据库了,用于存储数据。
分层思想的理论思想有点像面向对象设计原则里面的单一职责原则,这里的单一职责就是指的某一层只负责自己做的事儿,明确自己的输入输出是什么,按照预定的格式进行编写即可。
层次式体系结构
分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统机构 清晰,便于提高复用能力和产品维护能力。
层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。
连接 件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最 多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件 重用提供了强大的支持。
软件层次式体系结构是最通用的架构,也被叫作N 层架构模式 (n-tier architecture pattern)。
这也是 Java EE (也称为J2EE) 应用经常采用的标准模式。
这种架构模式非常适合传统的IT 通 信和组织结构,很自然地成为大部分应用的第一架构选择。在分层次体系结构中的组件被划分 成几个层,每个层代表应用的一个功能,都有自己特定的角色和职能。
分层架构本身没有规定 要分成多少层,大部分的应用会分成表现层(或称为展示层)、中间层(或称为业务层)、数据 访问层(或称为持久层)和数据层。
分层架构的一个特性就是关注分离 (separation of concerns)。该层中的组件只负责本层的逻 辑,组件的划分很容易明确组件的角色和职责,也比较容易开发、测试、管理和维护。
缺陷和注意事项
层次式体系结构是一个可靠的通用的架构,对很多应用来说,如果不确定哪种架构适合, 可以用它作为一个初始架构。
但是,设计时要注意以下两点:
要注意的是污水池反模式
所谓污水池反模式 (architecture sinkhole anti-pattern), 就是请求流简单地穿过几个层,每 层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。
比如一些 Java EE例子,业务逻 辑层只是简单的调用了持久层的接口,本身没有什么业务逻辑。每一层或多或少都有可能遇到这样的场景,关键是分析这样的请求的百分比是多少。
二八 原则可以帮助你决定是否正在遇到污水池反模式。如果请求超过20%,则应该考虑让一些层变 成开放的。
需要考虑的是分层架构可能会让你的应用变得庞大
即使你的表现层和中间层可以独立发布,但它的确会带来一些潜在的问题,比如:分布模 式复杂、健壮性下降、可靠性和性能的不足,以及代码规模的膨胀等。
应用实践
在大数据开发工作中,我们常常需要对多源数据进行处理,这些多源数据具备来源不同、结构不同、性质不同的特点。这个时候我们应该如何进行处理呢?
首先,我们需要对整个数据的利用过程进行分层,这里暂时分为数据采集和存储层,数据清洗和归一化层,数据聚合使用层
。对于数据采集和存储层来说,需要做的事儿便是从各个数据源获取到结构化或者非结构化的数据并存储起来;
然后就是数据清洗和归一化层,首先需要利用图像识别和音频识别等技术将非结构化数据转换成结构化数据,然后对这些结构化数据进行领域投影,进而归一化,并将归一化后的原始数据进行入库,入到数据仓库或者大数据平台。
在大数据平台中,我们采用接口层、整合层、中间层、汇总层和应用层
的分层架构的思想,对数据进行逐层治理,接口层是存储的原始数据,整合层会对数据进行初步清理,与接口层的关系近乎是一对一的关系;中间层会按照同主属性进行初步聚合,然后汇总层会构建各种画像层面的内容。最终拿给应用层使用。
NoSql中的分层架构
NoSQL整体框架分为4层,由下至上分为数据持久层 (Data Persistence)
、数据分布层(Data Distribution Model)
、 数据逻辑模型层 (Data Logical Model)
和接口层 (Interface)
, 层次之间相辅相成,协调工作。
数据持久层
定义了数据的存储形式,主要包括基于内存、硬盘、内存和硬盘接口、订制可插拔4种形式。基于内存形式的数据存取速度最快,但可能会造成数据丢失;
基于硬盘的数据存储可能保存很久,但存取速度慢于基于内存形式的数据;内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失;
订制可插拔则保证了数据存取具有较高的灵活性。
数据分布层
定义了数据是如何分布的,相对于关系型数据库, NoSQL可选的机制比较多,主要有3种形式:一是CAP支持,可用于水平扩展;二是多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行;三是动态部署支持,可以在运行着的集群中动态地添加或删除结点。
数据逻辑层
表述了数据的逻辑表现形式。
接口层
为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了5种选择:Rest、Thrift、Map/Reduce、Get/Put、 特定语言API, 使得应用程序和数据库的交互更加方便。
NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很 大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。
MVC 分层体系结构
MVC(Model-View-Controller) 的概念在目前信息系统设计中非常流行,严格来讲, MVC 实际上是上述多层 C/S 结构的一种常用的标准化模式,或者可以说是从另一个角度去抽象这种 多层C/S结构。
在J2EE架构中, View 表示层指浏览器层,用 于图形化展示请求结果;Controller控制器指Web服 务器层, Model 模型层指应用逻辑实现及数据持久 化的部分。
目前流行的J2EE开发框架,如JSF、 Struts、Spring、Hibernate等及它们之间的组合,如 Struts+Spring+Hibernate(SSH) JSP+Spring+Hibernate 等都是面向 MVC架构的。另外, PHP、Perl、MFC等 语言都有MVC 的实现模式。
鸿蒙操作系统架构案例分析
鸿蒙操作系统 (HarmonyOS) 是华为公司研制的一款自主版权的操作系统,是一款“面向 未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。
在传 统的单设备系统能力的基础上, HarmonyOS提出了基于同一套系统能力、适配多种终端形态的 分布式理念,能够支持多种终端设备的能力。
鸿蒙 (HarmonyOS) 整体采用分层的层次化设计,从下向上依次为:内核层、系统服务层、框架层和应用层
系统功能按照“系统”→“子系统”→“功能/模块”逐级展开,在 多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块
内核层
内核层主要由内核子系统和驱动子系统组成。
- 内核子系统
- HarmonyOS采用多内核设计,支持针对不同资源受限设备选用适合的O S 内 核。
- 内核抽象层 (Kernel Abstract Layer,KAL) 通过屏蔽多内核差异,对上层提供基础的内核 能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。
- 驱动子系统
- HarmonyOS 驱动框架 (HDF) 是HarmonyOS硬件生态开放的基础,提供统一 外设访问能力和驱动开发、管理框架。
系统服务层
系统服务层是HarmonyOS的核心能力集合,通过框架层对应用程序提供服务。
该层包含4 个部分:系统基本能力子系统集、基础软件服务子系统集、增强软件服务子系统集和硬件服务 子系统集。
- 系统基本能力子系统集
- 由分布式软总线、分布式数据管理、分布式任务调度、方舟多语言运行时、 公共基础库、多模输入、图形、安全、 A I等子系统组成。
- 为分布式应用在 HarmonyOS多设备上的运行、调度、迁移等操 作提供了基础能力,
- 方舟运行时提供了 C/C++/JS 多语言运行时和基础的系统类库,也为使用方舟编译器静态化的 Java程序(即应用程序或框架 层中使用 Java语言开发的部分)提供运行时。
- 基础软件服务子系统集
- 为HarmonyOS提供公共的、通用的软件服务,由事件通知、电 话、多媒体、 DFX、MSDP&DV 等子系统组成。
- 增强软件服务子系统集
- 为HarmonyOS提供针对不同设备的、差异化的能力增强型软件服 务,由智慧屏专有业务、穿戴专有业务、 IoT专有业务等子系统组成。
- 硬件服务子系统集
- 为HarmonyOS 提供硬件服务,由位置服务、生物特征识别、穿戴专有 硬件服务、 loT专有硬件服务等子系统组成。
根据不同设备形态的部署环境,基础软件服务子系统集、增强软件服务子系统集、硬件服 务子系统集内部可以按子系统粒度裁剪,每个子系统内部又可以按功能粒度裁剪。
框架层
框架层为HarmonyOS的应用程序提供了Java/C/C++/JS等多语言的用户程序框架和Ability 框架,以及各种软硬件服务对外开放的多语言框架API; 同时为采用HarmonyOS 的设备提供了 C/C++/JS 等多语言的框架API, 不同设备支持的 API与系统的组件化裁剪程度相关。
应用层
应用层包括系统应用和第三方非系统应用。
HarmonyOS 的应用由一个或多个 FA(Feature Ability) 或PA(Particle Ability) 组成。
其中, FA有 UI 界面,提供与用户交互的能力;而PA 无UI界面,提供后台运行任务的能力以及统一的数据访问抽象。
基于FA/PA开发的应用,能 够实现特定的业务功能,支持跨设备调度与分发,为用户提供一致、高效的应用体验。
SDN 分层网络架构
软件定义网络 (Software Defined Network,SDN) 是由美国斯坦福大学CLean State课题 研究组提出的一种新型网络创新架构。
其核心思想是通过对网络设备的控制面与数据面进行分 离,控制面集中化管控,同时对外提供开放的可编程接口,为网络应用创新提供极佳的能力开 放平台;而数据面则通用化、轻量化,高效转发,以提升网络的整体运行效能。
具体来说, SDN利用分层的思想,将网络分为控制层和数据层
。
- 控制层
- 可编程控制器, 具有网络控制逻辑的中心
- 掌握网络的全局信息,方便运营商或网络管理人员配置网络和部署 新协议等。
- 数据层
- 哑交换机(与传统的二层交换机不同,专指用于转发数据的设备)
- 仅提 供简单的数据转发功能,可以快速处理匹配的数据包,适应流量日益增长的需求。
两层之间采 用开放的统一接口(如 OpenFlow等)进行交互。
通过此接口控制器向转发设备(如交换机等) 下发统一标准的转发规则,转发设备仅需按照这些规则执行相应动作即可。
相比传统网络设备, SDN技术能够更有效降低转发设备复杂度及卸载不必要的运行负载, 协助网络运营商更好地控制基础设施,降低整体运营成本,同时打破了传统网络设备的封闭性, 因此, SDN是极具前途的网络技术之一。
软考的科目
小编之前发过 计算机软考科目、时间、辅导书汇总
一年一度的双十一活动来临了,对于计算机人来说,除了买电子产品,买书也是一个值得关注的事儿。小编在今年也有好几本心心念念的书,比如李明哲的《网络空间安全体系》、知道创宇出的《网络空间测绘技术与实践》和最新版的《系统架构设计师教程第二版》等等