三层架构的优缺点
来源:互联网 发布:纱窗修补胶带 淘宝 编辑:程序博客网 时间:2024/05/29 17:09
三层架构
三层架构一般包含:控制层,业务逻辑层,数据访问层。
从历史角度考虑优缺点
单一应用结构
优势
- 结构简单 - 性能高
劣势
- 业务杂糅。代码杂糅的不同的业务,要求开发人员能理解所有的细节,维护费时间。
面临什么问题?
- 当处理的业务越来越多时? - 代码变得庞杂,需要重构。 - 当需要有共同的业务处理的任务时,需要抽取公共类。 - 如不重构,会出现很多重复的代码段。改动一个地方,很多地方相同的代码都需要改动,既提升了产生bug的风险,又让修改时间变长,对开发人员细心程度高。 - 当代码中需要添加日志,事务,权限控制,数据监控,会增加诸多重复的、相似的代码块 - 当参与的人员越来越多时,不同的风格代码结构会造成理解上的困难。
改进
- 提取公共类 - 抽取公共的模型类 - 抽取帮助类或者utils类 - 大类变小类 - 大的业务处理的类,根据业务聚焦的不同,划分成几个业务处理类 - 使用组合和继承(设计模式)的方式,让结构具有可扩展性,可复用性 - 使用责任链模式,策略模式,访问者模式等模式让的业务处理类得到有效的利用
垂直应用架构(三层架构)
优势
- 层次清晰,每个层次都提供了接口定义 - 很容易用新的实现替换原来的层次实现。例如对sql进行性能优化,并不会影响其他层的代码结构。有利于后期维护。 - 有利于实现切面编程,减轻业务的复杂程度,加快编码效率。 - 每个层次的定位明晰,业务处理的内容明确。依据层次,可以划分不同的分工。开发人员可以只关注整个结构的其中某一层。 - 接口定义也提供了良好的可扩展性。例如数据库从mysql切换到oracle,只需要通过配置来切换。 - 降低了代码之间,层与层的依赖关系 - 复用性:利于各层代码逻辑的复用 - 安全性:接口设计需要符合对扩展开发,对修改关闭的原则,增强了系统的安全性
缺点
- 降低了系统的性能。使用中间层访问数据库,对数据进行转换等等都需要计算时间。 - 新增业务处理时,需要在各个层增加功能。- 面临的问题 - 不同的层次对接口规范理解的层次不一样,对接口维护,调用,监控都会产生影响 - 当用户访问量增大时,性能会遇到瓶颈。 - 单点服务问题 - 部署会造成服务中断 - 服务挂了之后,需要人工及时的处理,给用户和公司带来损失
改进
- 明确良好的接口规范,团队内部统一接口规范 - 使用缓存减轻服务的性能压力 - 转向分布式架构:将服务改造成无状态的分布式服务,通过集群来增强计算能力。
案例:Spring
- 优点:为开发者实现了中间层次的共同的逻辑,让开发者更多的关注业务实现,而不是代码结构,提升开发效率。
分布式服务架构
优势
- 通过集群(负载均衡,分布式调度服务,分布式应用,分布式存储),MQ,noSql,流处理等技术来提升计算、存储的性能
劣势
- 系统结构变得复杂 - 新增一项业务,可能涉及到不同的分布式应用,造成调试成本的增加 - 部署一套服务包含很多过程
面临的问题
- CAP只能同时满足其中两个 - 业务拆分、数据拆分的问题 - 集群的节点越多,意味着更高的成本 - 集群治理问题凸显 - 状态如何在多个服务器上共享 - 不同的服务器处理性能不一,造成某些服务器压力大,某些服务器压力小 - 越来越大的数据量吞没更多的存储
改进
- 使用持续集成技术,一键部署 - 使用领域驱动设计划分不同的业务领域,为业务拆分、数据拆分奠定基础 - 优化代码性能,减少计算服务器的数量;通过压缩技术,减少存储服务器的数据。 - 使用dubbo,spring cloud的技术增加分布式服务治理功能
阅读全文
0 0
- 三层架构的优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点
- 三层架构优缺点
- 三层架构及其优缺点
- 三层架构及其优缺点(收藏)
- 分布式架构的优缺点
- Serverless架构的优缺点
- MVVM架构的优缺点
- spring 架构的优缺点
- 三层架构的优势
- 三层架构的解释
- 标准的三层架构
- 三层架构的开发
- 数据库的三层架构
- 服务器上的日志文件不打印e.printStackTrace();信息
- MyBatis源代码--数据源(dataSource)
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
- 如何恢复Mac的OS X系统?
- python 中 sorted() 和 list.sort() 的用法
- 三层架构的优缺点
- AOP拦截常用请求内容
- Git
- 前端常用技术中文文档地址
- css设计页面-用户行为
- http,servlet,jsp-java web后台知识简单总结
- 堆排序算法
- QML文件之间的参数互相调用问题
- Java检测文件编码