什么是以及为什么,要把大型Web项目系统逻辑分层和物理分层?

news/2024/7/6 5:34:41 标签: 后端, 操作系统, 数据库

一、逻辑分层

1. 应用层controller

2. 服务层service

3. 数据访问层dao/mapping

4. 数据层databases/Redis/Mongodb

特点:逐层调用或者依赖来实现

详细:

A 应用层:负责应用输入输出控制、具体业务视图展示、引用服务层所提供的服务

B 服务层:为应用层提供相关业务模块的具体服务实现、引用数据层所提供的数据实现,如用户服务、角色服务、权限服务、栏目服务

C 数据访问层:为服务层提供相关模块的数据查询服务,主要与底层数据交互,负责常见CRUD等SQL操作

D 数据层:提供数据存储访问服务

 


 

二、物理分层

逻辑分层优缺点:

职责单一、独立性、可复用性

由于分层架构对每层都有严格的职责定义,因此系统会受到一定的约束。因此对于小系统层级分的越多,效率越低。

 

为什么要做物理上的分层?

A 更科学的部署

B 节省服务器资源

C 一定程度上提高系统的高并发

分割、分布式、集群、负载均衡、缓存、异步

【分割】

逻辑上的分层是横向分割,而分割是系统纵向切分。

将一个大的应用系统按照业务模块,进行分割成权限模块、CMS内容管理系统模块、商品模块、订单模块等不同的应用。

优缺点:

遵循高内聚低耦合原则、方便维护开发、方便独立部署(一个未经分割的应用系统在部署时是一个大的单体应用,存在不够灵活、妨碍持续交付的问题)

 

【分布式】

对于大型网站,逻辑分层和分割都是为了将分割后的模块做分布式部署。

不同的模块多节点的部署到不同的服务器,服务和服务之间的调用通过PRC(remote procedure calls远程过程调用)或者其他方式远程调用。

优缺点:

能更加有效的利用性能较低的服务器资源,但分布式架构也会带来系统的复杂性

 

【常见分布式方案】

(1)分布式应用和服务

将大型网战按照业务分割成不同的模块独立开发、部署、维护,

改善网站性能、提高并发性、加快开发、方便分布

便于重用性和整体扩展

(2)分布式静态资源

在实际开发中,一般将静态资源独立出来部署,

部署到擅长处理静态资源的服务器里面(Nginx)

根据颗粒度不同,会给静态资源分配一个独立的域名,应用通过访问这些域名来访问静态资源,可以提升浏览器并发加载的速度(浏览器在一个域名下一次加载的静态文件数量是有限的)

一般会做CNDN(content delivery net word内容分发网络)加速,可以提升系统的性能

(3)分布式数据和存储

数据库往往会成为一个系统的瓶颈,

单个数据库实例(如mysql)所能存储的数据是有限的,

所以这些数据需要分布式存储:分库、分表、NoSQL、HBase等的存储和处理

(4)分布式计算

有些实时数据处理(搜索、数据分析等)需要大量的计算,目前采用Hadoop以及MapReduce、Spark等分布式计算框架来进行批量处理。

 

【集群】负载均衡服务器 多个应用相同的服务器 session共享

分布式是将一个应用拆分成不同的业务模块进行独立部署,分布式部署里面每个模块的工程是不一样的。

集群是对同一个业务模块(较大)进行多机器节点的部署,一个集群里面的应用是完全一样的。

集群里面通过负载均衡的方式对外提供服务。

常见负载均衡算法:
1.轮询算法
将请求按顺序轮流转发到后端服务器,该算法的优点是简单。但不会智能根据每台服务器负载来调整分发
2.随机算法
系统设置随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
随着客户端调用服务端的次数增多,其实际效果接近于平均分配调用量到后端的每一台服务器,也就是轮询
3.加权轮询算法
不同的服务器的资源配置不一样
4.源地址哈希算法
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果就是要访问的那个服务器的序号。
优点是每次请求访问的服务器会是同一台机器。避免了session共享的问题。
确定是假如该请求每次访问的服务器挂了,该客户端请求就会失败。这就是利弊权衡。
 
【常见负载均衡实现方案】
1.DNS域名解析负载均衡
利用DNS处理域名解析请求的同时进行负载均衡
(每次域名解析请求都会根据负载均衡算法计算一个不同的ip地址返回,这样解析配置的多个服务器就构成一个集群,并可以实现负载均衡)
2.数据链路层负载均衡(LVS linux virtual server)
指在通信协议的数据链路层修改mac地址进行负载均衡
3.IP负载均衡(SNAT)
在网络层通过修改请求目标地址进行负载均衡
4.反向代理负载均衡(Ngnix)
保护网站安全,所以互联网的请求都必须经过代理服务器。
(注意,代理服务器还可以配置缓存cache加速web请求,为静态资源。当用户第一次访问静态资源的时候,静态内存被缓存到反向代理服务器上,这样当其他用户访问该静态内容时,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力)

【缓存】

缓存在大型系统中很重要,比如一些不经常变化的资源,
包括基础数据,静态资源都会被缓存起来,避免多次从磁盘中查询获取数据,直接从内存或者缓存中获取数据。
常见缓存使用场景:
1. 数据缓存
mencache, redis,ehcache

2. 静态缓存
将静态资源缓存到指定服务器,做cdn(内容分发网络)加速。
cdn即内容分发网络,将同一份资源部署在多个节点里面。
在用户获取某个静态资源的到时候,从离用户最近的一个网络服务商获取该资源。

3. 反向代理

【异步】异步架构是典型的生产者消费者模式,常见的实现方式是使用消息队列(MQ)

(题外话:操作系统相关书籍有详细解释生产者消费者同步异步互斥问题,也介绍了消息队列MQ)
生产者和消费者之间不存在依赖性,也不存在实时调用性,
对一些实时性要求不高的业务,使用异步的方式能大大提高系统的性能,同时减少系统的耦合。
因为实时性要求进程对于资源是可以抢占式的。

特性:
提高系统可用性
加快网站响应速度
消除并发访问高峰


 

转载于:https://www.cnblogs.com/hoanfir/p/9034873.html


http://www.niftyadmin.cn/n/555199.html

相关文章

uni-request的使用

下载插件: npm install uni-request --saveapi文件夹下封装统一请求request.js文件 /*** Description: 请求接口统一封装* Author liaoxuewu* create 2022/01/25 13:22*/ import uniRequest from ../uni-request/index.js import config from ../config.js// 全局…

px、em与rem之间如何选择

文章目录px特点em特点注意例子rem注意例子px 与 rem 的选择?px px像素(Pixel)。相对长度单位。 像素px是相对于显示器屏幕分辨率而言的。 特点 IE无法调整那些使用px作为单位的字体大小;国外的大部分网站能够调整的原因在于其使…

uni-app实现web-view和App之间的互相通信

1.web-view向App传递消息 官网对于uni-app使用web-view的介绍如下:web-view 注意事项提到postMessage方法,这就是web-view向App传递消息的方法,使用如下: 注意H5本身不支持uni-app里面的方法,所以在项目中引入支持调用uni-app方…

flutter安装过程与遇坑解决方法

目前还处于草稿阶段,先发出来(怕系统把我几个月前截的图给弄丢了),后继将进行排版文字说明。 大神可以根据图片来实现一波,懂得都懂。 https://flutter.dev/docs/get-started/install https://gitee.com/mirrors/Fl…

Java多线程和并发基础

第一:Java多线程面试问题 1:进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被…

面试官:怎么使用css和css3实现水平居中?

文章目录行内或类行内元素示例块级元素示例多个块级元素示例1示例2脱离文档流元素的水平居中absolute绝对定位的元素示例float定位的元素示例行内或类行内元素 例如:文本和链接 在块级父容器中让行内元素居中,只需使用 text-align: center;。 这种方法…

MySQL数据库备份工具mysqldump的使用(转)

说明:MySQL中InnoDB和MyISAM类型数据库,这个工具最新版本好像都已经支持了,以前可能存在于MyISAM的只能只用冷备份方式的说法。 备份指定库: mysqldump -h127.0.0.1 -uroot -p --lock-tables --events --triggers --routines --fl…

讲一下css如何实现垂直居中?

文章目录行内或类行内元素单行示例示例2多行示例1示例2示例3块级元素已知元素的高度示例未知元素的高度示例flexbox示例行内或类行内元素 例如:文本和链接等。 单行 case1 对于单行行内或者文本元素,只需为它们添加等值的 padding-top 和 padding-bo…