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

简介: 软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成N个层级,每个层级有独立的职责,多个层级协同提供完整的功能。

你好,我是程序员Alan,很高兴遇见你。

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

什么是分层架构

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

分层有什么好处

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

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

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

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

如何来做系统分层

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

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

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

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

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

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

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

分层架构的不足

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

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

留些问题

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

站在巨人的肩膀上

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

如果对您有帮助,欢迎关注我的微信公众号和我交流:ProgrammerAlan

相关文章
|
12月前
|
人工智能 监控 前端开发
支付宝 AI 出行助手高效研发指南:4 人团队的架构迁移与提效实战
支付宝「AI 出行助手」是一款集成公交、地铁、火车票、机票、打车等多项功能的智能出行产品。
1714 21
支付宝 AI 出行助手高效研发指南:4 人团队的架构迁移与提效实战
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1546 3
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
2057 0
|
10月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
10月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1460 2
Spring Boot 3.x 微服务架构实战指南
|
11月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
1700 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
11月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
1132 7
|
11月前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。