高并发学习笔记--架构分层_林深时见禄的博客-程序员信息网

技术标签: 高并发学习  

高并发学习笔记系列

高并发学习笔记--通用设计方法

高并发学习笔记--架构分层


 

 

什么是分层架构?

软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成 N 个层次,每个层次有独立的职责,多个层次协同提供完整的功能。

我们在刚刚成为程序员的时候,会被“教育”说系统的设计要是“MVC”(Model-View-Controller)架构。它将整体的系统分成了 Model(模型),View(视图)和 Controller(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦,是一种标准的软件分层架构。

另外一种常见的分层方式是将整体架构分为表现层、逻辑层和数据访问层:

  • 表现层,顾名思义嘛,就是展示数据结果和接受用户指令的,是最靠近用户的一层;
  • 逻辑层里面有复杂业务的具体实现;
  • 数据访问层则是主要处理和存储之间的交互。

这是在架构上最简单的一种分层方式。其实,我们在不经意间已经按照三层架构来做系统分层设计了,比如在构建项目的时候,我们通常会建立三个目录:Web、Service 和 Dao,它们分别对应了表现层、逻辑层还有数据访问层。

架构分层的好处

随着业务越来越复杂,大量的代码纠缠在一起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动全身等问题。

分层的设计可以简化系统设计,让不同的人专注做某一层次的事情。

一般的项目分工是比较明确的,前端工程师负责前端页面的搭建,后端工程师负责业务逻辑的代码编写。运维及DBA提供数据库方面支持。如果项目部分层的话,前端逻辑、后台逻辑、数据库操作都在一层甚至一个文件内。那样势必会造成各种代码冲突和混乱不堪。

分层之后可以提高复用

比如,我们有多个不同的地方使用到了同样的逻辑或者数据,虽然View是分开的,但是他们可以调用同一个Service中的逻辑代码。这样一来即使再多页面引用,只要业务逻辑相同,就不必重复操作。

分层架构可以让系统更容易横向扩展

如果系统没有分层,当流量增加时我们需要针对整体系统来做扩展。但是,如果我们按照上面提到的三层架构将系统分层后,那么我们就可以针对具体的问题来做细致的扩展。

比如说,业务逻辑里面包含有比较复杂的计算,导致 CPU 成为性能的瓶颈,那这样就可以把逻辑层单独抽取出来独立部署,然后只对逻辑层来做扩展,这相比于针对整体系统扩展所付出的代价就要小的多了。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaolu1014/article/details/104487536

智能推荐

[转载]【苹果千层派】轻松玩转酥皮_万金油_新浪博客_坑人螺丝钉的博客-程序员信息网

原文地址:【苹果千层派】轻松玩转酥皮作者:千百度的小厨房 早上起床,窗外一片白茫茫,天空中飘起了片片雪花,武汉下雪了。孩子的爷爷,我的公公昨天下午住院了,今天开始我要负责全家的饮食,对我来说是小菜一碟。公公最不爱上医院了,不舒服都要在家吃药打针,这次住院他一百个不乐意,好在住在高干病房,环境很好,我们轮番陪护,让他安心,希望他早日康复。【食材】千层酥皮一份、苹果1个、细砂...

数据结构实验之链表七:单链表中重复元素的删除 SDUT_LqingX的博客-程序员信息网

数据结构实验之链表七:单链表中重复元素的删除 SDUTTime Limit: 1000 ms Memory Limit: 65536 KiBSubmit StatisticProblem Description按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。Input第一行输入元素个数 n (1 <= n <=...

Python瑞士军刀 -- 使用PyQt5构建界面_china_jeffery的博客-程序员信息网

众所周知Qt是一个跨平台的C++开发框架,它包含界面UI、网络、文件、WebKit等部分。而PyQt5就是Qt在Python语言上的绑定实现。一. PyQt5安装使用pip进行安装和卸载:# 安装pip3 install PyQt5# 卸载pip3 uninstall pyqt5 PyQt5官方只提供了针对Python3的二进制文件,对于Python2需要从官网

安卓第一章 了解安卓ADT_青杉de小太阳的博客-程序员信息网_安卓adt

ADT工程结构src:         装着Java代码的资源文件夹 gen:         BuildConfig:创建工程时配置文件         R文件:存放代码资源的id,图片资源id等 assets:存放文件资源,特点:没有id,通过io流获取资源 libs:存放第三方jar包 res:Java代码以外的其他具有id的资源     

关于Arduino IO中断使用的一些技巧_游唱小时候的博客-程序员信息网_arduino io中断

为什么要使用中断?外部中断是单片机实时地处理外部事件的一种内部机制。当外部事件发生后,单片机判断外部事件是否符合条件,如果符合外部中断条件,则停止CPU正在执行的程序,转而进行中断事件的处理;中断处理完毕后,又返回被中断的程序处,继续执行。在项目过程中遇到一个,首先初始化一个端口作为中断服务#define borrow_gpio_in 21然后设置端口为输入,并且下拉电阻,因为我们用3...

AAAI 2020 Accepted 论文 list 及最佳论文奖_Phoenixtree_DongZhao的博客-程序员信息网

AAAI 2020 论文 list 可以从下面链接下载:https://aaai.org/Conferences/AAAI-20/wp-content/uploads/2020/01/AAAI-20-Accepted-Paper-List.pdf最佳论文奖:题目:WinoGrande: An Adversarial Winograd Schema Challenge at Scale作者:Keisuke Sakaguchi、Ronan Le Bras、Chandra Bhagavatu.

随便推点

使用pg_upgrade升级pg数据库的大版本。_没有自制力的天蝎的博客-程序员信息网

pg_upgrade 是 PostgreSQL 提供的一个大版本升级工具,例如将 PG 从版本 9.4 升级到 9.6, 可以跨多个大版本升级, 当然也可以用 pg_dump ,之后再 pg_restore 到新版本 PG 软件的方法, 当数据库比较大时,比如 1 TB 以上,pg_dump/pg_restore 的方法太费时了,这里介绍使用 pg_upgrade 将 PostgreSQL 版本

简易模型计算机设计仿真实践报告,计算机基础实践设计报告.doc_知乎众测的博客-程序员信息网

计算机基础实践设计报告计算机基础实践设计报告学院:信息科学与工程学院专业班级:电气信息1126班学号:0909112618姓名:郑小乐实践日期:2011年12月《倒立摆控制与研究》调研报告一:倒立摆的分类二:倒立摆模型三:倒立摆的控制策略分析四:倒立摆的研究意义五:倒立摆控制研究的过去、现状及发展趋势等一:倒立摆的分类倒立摆一般分为:一级倒立摆、二级倒立摆、三级倒立摆和四级倒立摆等, 多级摆的摆杆...

oracle 游标的优缺点,游标的各种用法和各自特点_AI量化数据之佳的博客-程序员信息网

尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。游标的概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。游标有两种类型:显式...

12种主要的Dropout方法:如何应用于DNNs,CNNs,RNNs中的数学和可视化解释_机器学习算法那些事的博客-程序员信息网

作者:Axel Thevenot编译:ronghuaiyang导读深入了解DNNs,CNNs以及RNNs中的Dropout来进行正则化,蒙特卡洛不确定性和模型压缩的方法。动机在深度机器学习...

国产芯片替代ST很容易,航顺HK32F103RET6替代STM32F103RET6,航顺芯片,航顺MCU_航顺芯片MCU的博客-程序员信息网

手里有几个STM32F103RET6应用的板子,整天被采购问询是否能用国产替代,成本快搂不住了。这次又拿了HK的样片,作为替代,尝试一下。开始没做任何修改,程序下载了就跑起来,让我还抱怨了一番,感觉是不是拿错片子了。后面静下心来,详细测试了使用的各功能模块,还是有点小问题的,不过非常好修改,作为应急替代使用,应该问题不大。所以补写个序,告知下本次替代容易至极,如果有同样需求,放心大胆的干吧!随之而来的悲催就是这几天的工作就大部分的成了拍照,留念,技术内容并不是很多,有ST使用的底子,基本上

推荐文章

热门文章

相关标签