一、逻辑分层
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共享
【缓存】
【异步】异步架构是典型的生产者消费者模式,常见的实现方式是使用消息队列(MQ)