博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么是以及为什么,要把大型Web项目系统逻辑分层和物理分层?
阅读量:5309 次
发布时间:2019-06-14

本文共 2515 字,大约阅读时间需要 8 分钟。

一、逻辑分层

1. 应用层controller

2. 服务层service

3. 数据访问层dao/mapping

4. 数据层databases/Redis/Mongodb

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

详细:

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

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

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

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

 


 

二、物理分层

逻辑分层优缺点:

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

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

 

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

A 更科学的部署

B 节省服务器资源

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

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

【分割】

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

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

优缺点:

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

 

【分布式】

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

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

优缺点:

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

 

【常见分布式方案】

(1)分布式应用和服务

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

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

便于重用性和整体扩展

(2)分布式静态资源

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

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

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

一般会做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.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>