你好,我是程序员Alan。

在《系统架构设计— 高并发场景微服务实战(三)》一文中,我提了一个问题“系统架构设计为什么要分层?”,这篇文章我会详细说一下我的见解,写的比较浅薄,见笑了。

什么是分层架构

软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成N个层级,每个层级有独立的职责,多个层级协同提供完整的功能。下面给大家分享一些我收藏的分层架构图。

分层有什么好处

如果公司要开发一款小程序但是只有你一个程序员,前后端都要你来写,即使程序很简单但如果你对前端或者后端开发不熟悉,是不是很痛苦。因为你必须是一个通晓全栈开发的程序员,要知道前后端的知识以及各种异常情况的处理。而如果前后端分离,有一个前端或者后端配合你,你只需要专注自己会的领域就可以了,剩下的交给其他同事,是不是就很幸福了。

再以发生在我自己身上的一件事情举个例子吧,在写上一篇文章《系统架构设计— 高并发场景微服务实战(三)》时候,我非常非常想把高并发技术栈和微服务技术栈开发中我所知道的问题全部都讲清楚了但是我的能力又不足以让我在短短的一篇推文中表达清楚矛盾纠结,所以我觉得很痛苦。痛苦的程度,您只要再读一遍我上面这长长的一串不带标点符号的句子就能够深切地感受到了。

为什么会这么痛苦,在写这篇文章时我大概想明白了,主要有两个原因。第一点是我自己能力不够,对各各组件的掌握还不够。第二点是我没有把任务分层解耦,所有的事情都揉在一起来思考,提升了任务的复杂度。总结一下就是自己过于贪大求全了。

我不是一个全才,现在不是,未来也不会是。会遇到很多复杂的问题,这时候需要把问题分层解耦,拆分成一个个小问题去解决。会遇到很多我个人无力解决但又不得不去解决的问题,这个时候需要寻求朋友的帮助,不用非常清楚朋友怎么解决问题的,但要需要知道向哪些朋友寻找帮助以及感恩。

如何来做系统分层

分层架构的优点还有很多很多,那么我们要如何来做分层设计呢,有哪些关键因素需要考虑?

我个人认为,最重要的一点是要理清楚每个层次的边界是什么。即使是层次分明 Web 项目,当业务逻辑复杂后,也会存在边界越来越模糊的问题,举个简单的例子。

大家开发过的系统中应该都有一个用户服务,最基本的接口就是查询用户信息接口,它的请求链路是,DTO -> Controller -> Service . DTO层接收前端传入的请求参数,序列化后传入给 Controller层调用Service层接口。

这个时候如果PO提出一个需求,当查询的用户不存在时,要自动的创建一个用户,并返回。这个时候逻辑层的边界就开始变得模糊了,因为表现层也承担了一部分的业务逻辑(查询用户和创建用户编排起来)。这个时候我们可以怎么处理? 参照阿里发布的《阿里巴巴 Java 开发手册 v1.4.0(详尽版)》,我们 可以将原先的三层架构细化成下面的样子 :

在这个分层架构中增加了Manager层,它与Service层的关系是:Manager层提供原子的服务接口,Service层负责依据业务逻辑来编排原子接口。

以上面的例子来说,Manager 层提供创建用户和获取用户信息的接口,而 Service 层负责 将这两个接口组装起来。这样就把原先散布在表现层的业务逻辑都统一到了 Service 层, 每一层的边界就非常清晰了。

除此之外,分层架构需要考虑的另一个因素,是层次之间一定是相邻层互相依赖,数据的流转也只能在相邻的两层之间流转。

分层架构的不足

虽然分层架构有很多优势,但它也有不少缺陷,它最重要的一个缺陷就是增加了代码的复杂度。这是显而易见的,明明我们可以在接收到请求后直接查询和操作数据库,却偏偏在中间插入了多个层次,并且每个层次可能只是简单的做数据传递,有时候增加一个小小的需求也可能要修改一整个链路上的代码,这个时候如果还增加了同事的负担那一定是会引来不少吐槽的。

另外,如果我们把每个层级独立部署,那么层级之间通过网络来交互,在性能上就会有损耗。

留些问题

  • 你知道什么是单一职责原则吗?
  • 你知道什么是迪米特法则吗?
  • 你知道开闭原则吗?

站在巨人的肩膀上

  • 唐扬—高并发系统设计40问
  • 码闻强—SpringCloud微服务实战
  • 从 0 开始学架构

架构分层—高并发场景微服务实战(四)相关推荐

  1. SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心

    说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...

  2. SpringCloud微服务实战(四)-微服务中的服务拆分

    订单服务源码 https://github.com/Wasabi1234/SpringCloud_OrderDemo 商品服务源码 https://github.com/Wasabi1234/Spri ...

  3. 微服务实战(七):从单体式架构迁移到微服务架构

    http://dockone.io/article/1266 希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂 ...

  4. 微服务实战(六):选择微服务部署策略

    http://dockone.io/article/1066 微服务实战(六):选择微服务部署策略 [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺 ...

  5. java 限流熔断_SpringCloud Alibaba微服务实战五 - 限流熔断

    简介 Sentinel是面向分布式服务框架的轻量级流量控制框架,主要以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度来维护系统的稳定性.在SpringCloud体系中,sentinel主要 ...

  6. .Net微服务实战之技术架构分层篇

    一拍即合 上一篇<.Net微服务实战之技术选型篇>,从技术选型角度讲解了微服务实施的中间件的选择与协作,工欲善其事,必先利其器,中间件的选择是作为微服务的基础与开始,也希望给一直想在.Ne ...

  7. 微服务实战(五):落地微服务架构到直销系统(构建高性能大并发系统)

    在现代系统中,特别是互联网软件,通常会涉及到大量用户的并发访问,我们的系统一定要在架构上支持高性能.大并发的访问.一个高性能的系统通常由很多的方面组成,包括数据库高性能.Web服务器高性能.负载均衡. ...

  8. go语言高并发与微服务实战_go-micro+gin+etcd微服务实战之服务注册与发现

    在构建微服务时,使用服务发现可以减少配置的复杂性,本文以go-micro为微服务框架,使用etcd作为服务发现服务,使用gin开发golang服务. 使用gin 的原因是gin能够很好的和go-mic ...

  9. 微服务接入oauth2_SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法)...

    SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法) 一.概述 在<SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资 ...

最新文章

  1. 解决audio和video在手机端无法自动播放问题
  2. Windows基本路由配置(cmd/route)
  3. 全球及中国偶联单克隆抗体行业深度调研及项目风险评估报告2021-2027年
  4. 条件队列大法好:wait和notify的基本语义
  5. Redox随笔(1)-用Rust语言编写的类UNIX操作系统
  6. linux+++乘法口诀_Shell的九九乘法口诀
  7. Android Studio 生成*.aar文件及使用方法
  8. sqlserver 登录名迁移
  9. 中国大学MOOC行为金融学及答案
  10. 编制职工档案管理程序C语言,职工档案管理系统
  11. Oracle RAC命令
  12. 迎新春 送温暖——郧阳小红花健康守护包发放
  13. 关于网络游戏的影响(腾讯游戏)
  14. C++ 多线程的创建和使用
  15. 简单的博弈问题:牛羊吃草问题(递归解法-暴力解法)
  16. 全面mysql初始化TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defau
  17. 前端证券项目_头条猿辅导瓜子老虎证券等前端面经
  18. 【前端】水平垂直居中的几种方式
  19. 基于java+springboot+mybatis+vue+elementui的准妈妈孕期交流平台
  20. 只有过来的人才知道其中的辛酸,在别人看来只能看到表面的光鲜亮丽

热门文章

  1. mysql重装无法启动
  2. android进度条的图标,Android进度条相关应用技巧解析
  3. 轻松享受音乐nbsp;教你海量同步iPhone歌曲
  4. Codeforces 742B B. Arpa’s obvious problem and Mehrdad’s terrible solution
  5. 计算深度学习评价指标Precision、Recall、F1
  6. 基于 EASI 自适应盲分离的 I/Q 失衡补偿
  7. 香奈儿旗下标志性酒庄将开启酒窖珍藏参与苏富比葡萄酒拍卖盛典
  8. Delphi xe7并行编程快速入门
  9. Django实战教程: 开发餐厅在线点评网站(1)
  10. TCP/IP网络创想