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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成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

相关文章
|
5天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
6天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
2天前
|
持续交付 API 开发者
构建高效微服务架构:后端开发的新范式
【4月更文挑战第24天】 随着现代软件系统的复杂性日益增加,传统的单体应用已难以满足快速迭代与灵活扩展的需求。微服务架构作为一种新兴的软件开发模式,以其服务的细粒度、独立部署和弹性伸缩等优势,正在逐渐成为后端开发的重要趋势。本文将深入探讨微服务架构的设计原则、关键技术以及在实际业务中的应用实践,旨在为后端开发者提供构建和维护高效微服务架构的参考指南。
|
3天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。
|
8天前
|
机器学习/深度学习 运维 Prometheus
探索微服务架构下的系统监控策略
【4月更文挑战第18天】在当今快速迭代和持续部署盛行的软件工程实践中,微服务架构因其灵活性和可扩展性受到企业青睐。然而,随着服务的细粒度拆分和网络通信的增加,传统的监控手段已不再适用。本文将探讨在微服务环境中实施有效系统监控的策略,包括日志聚合、性能指标收集、分布式追踪以及异常检测等关键技术实践,旨在为读者提供构建稳定、可靠且易于维护的微服务系统的参考指南。
13 0
|
8天前
|
监控 持续交付 开发者
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第18天】在数字化转型的浪潮中,微服务架构已成为企业提升系统灵活性、加速产品迭代的关键。此文深入探讨了构建高效微服务架构的实践方法,包括服务划分原则、容器化部署、持续集成/持续部署(CI/CD)流程以及监控与日志管理等关键技术点。通过分析具体案例,揭示了微服务在提高开发效率、降低维护成本及促进团队协作方面的显著优势。
|
9天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
4月前
|
Java
在高并发环境下,再次认识java 锁
在高并发环境下,再次认识java 锁
36 0
|
4月前
|
消息中间件 NoSQL Java
Java高级开发:高并发+分布式+高性能+Spring全家桶+性能优化
Java高架构师、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师之路
|
10天前
|
缓存 负载均衡 Java
Java高并发性能指标
Java高并发是指在Java编程环境中,系统能够同时处理大量并发请求或操作的能力。这里的“高”强调的是并发处理的数量级较大,需要系统能够有效地管理多个并发的执行单元,如线程或进程,以确保它们能够高效且正确地执行。
10 0