软考实践之分层架构思想的理论和应用实践

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 软考实践之分层架构思想的理论和应用实践

前言

分层架构遍布生活中的方方面面,无论是我们的计算机网络里面的七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,还是网络规划里面的接入层、汇聚层、核心层

计算机系统中的存储器通常采用分层的体系 (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是极具前途的网络技术之一。


软考的科目

小编之前发过 计算机软考科目、时间、辅导书汇总

一年一度的双十一活动来临了,对于计算机人来说,除了买电子产品,买书也是一个值得关注的事儿。小编在今年也有好几本心心念念的书,比如李明哲的《网络空间安全体系》、知道创宇出的《网络空间测绘技术与实践》和最新版的《系统架构设计师教程第二版》等等

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
7天前
|
API 持续交付 开发者
后端开发中的微服务架构实践与挑战
在数字化时代,后端服务的构建和管理变得日益复杂。本文将深入探讨微服务架构在后端开发中的应用,分析其在提高系统可扩展性、灵活性和可维护性方面的优势,同时讨论实施微服务时面临的挑战,如服务拆分、数据一致性和部署复杂性等。通过实际案例分析,本文旨在为开发者提供微服务架构的实用见解和解决策略。
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
3天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
3天前
|
消息中间件 监控 数据管理
后端开发中的微服务架构实践与挑战####
【10月更文挑战第29天】 在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和易于维护应用程序的首选方案。本文探讨了微服务架构的核心概念、实施策略以及面临的主要挑战,旨在为开发者提供一份实用的指南,帮助他们在项目中成功应用微服务架构。通过具体案例分析,我们将深入了解如何克服服务划分、数据管理、通信机制等关键问题,以实现系统的高可用性和高性能。 --- ###
22 2
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
7天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
35 1
|
3天前
|
Cloud Native API 云计算
云原生架构的深度探索与实践####
本文深入探讨了云原生架构的核心概念、技术特点及其在现代软件开发中的应用实践。通过分析云原生架构如何促进企业数字化转型,提升业务敏捷性与可扩展性,本文旨在为读者提供一个全面而深入的理解框架。我们将从云原生的定义出发,逐步深入到其关键技术组件、最佳实践案例及面临的挑战与解决方案,为开发者和企业决策者提供宝贵的参考与启示。 ####
|
8天前
|
设计模式 人工智能 API
后端开发中的微服务架构实践与挑战#### 一、
本文将深入浅出地探讨微服务架构在后端开发中的应用实践,分析其带来的优势与面临的挑战。通过具体案例,展示如何有效地构建、部署和管理微服务,旨在为读者提供一份实用的微服务架构实施指南。 #### 二、
|
7天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
24 3
下一篇
无影云桌面