一、逻辑分层
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.随机算法
4.源地址哈希算法
根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果就是要访问的那个服务器的序号。
1.DNS域名解析负载均衡
(每次域名解析请求都会根据负载均衡算法计算一个不同的ip地址返回,这样解析配置的多个服务器就构成一个集群,并可以实现负载均衡)
2.数据链路层负载均衡(LVS linux virtual server)
在网络层通过修改请求目标地址进行负载均衡
4.反向代理负载均衡(Ngnix)
【缓存】
常见缓存使用场景:
1. 数据缓存
mencache, redis,ehcache
2. 静态缓存
将静态资源缓存到指定服务器,做cdn(内容分发网络)加速。
3. 反向代理
【异步】异步架构是典型的生产者消费者模式,常见的实现方式是使用消息队列(MQ)
特性:
提高系统可用性
加快网站响应速度
消除并发访问高峰