关于微服务:架构分层高并发场景微服务实战四

39次阅读

共计 1699 个字符,预计需要花费 5 分钟才能阅读完成。

你好,我是程序员 Alan,很快乐遇见你。
在《零碎架构设计— 高并发场景微服务实战(三)》一文中,我提了一个问题“零碎架构设计为什么要分层?”,这篇文章我会具体说一下我的见解,写的比拟肤浅,见笑了。
什么是分层架构
软件架构分层在软件工程中是一种常见的设计形式,它是将整体零碎拆分成 N 个层级,每个层级有独立的职责,多个层级协同提供残缺的性能。上面给大家分享一些我珍藏的分层架构图。

分层有什么益处
如果公司要开发一款小程序然而只有你一个程序员,前后端都要你来写,即便程序很简略但如果你对前端或者后端开发不相熟,是不是很苦楚。因为你必须是一个精通全栈开发的程序员,要晓得前后端的常识以及各种异常情况的解决。而如果前后端拆散,有一个前端或者后端配合你,你只须要专一本人会的畛域就能够了,剩下的交给其余共事,是不是就很幸福了。
再以产生在我本人身上的一件事件举个例子吧,在写上一篇文章《零碎架构设计— 高并发场景微服务实战(三)》时候,我十分十分想把高并发技术栈和微服务技术栈开发中我所晓得的问题全副都讲清楚了然而我的能力又不足以让我在短短的一篇推文中表白分明矛盾纠结,所以我感觉很苦楚。苦楚的水平,您只有再读一遍我下面这长长的一串不带标点符号的句子就可能深切地感触到了。
为什么会这么苦楚,在写这篇文章时我大略想明确了,次要有两个起因。第一点是我本人能力不够,对各各组件的把握还不够。第二点是我没有把工作分层解耦,所有的事件都揉在一起来思考,晋升了工作的复杂度。总结一下就是本人过于贪大求全了。
我不是一个全才,当初不是,将来也不会是。会遇到很多简单的问题,这时候须要把问题分层解耦,拆分成一个个小问题去解决。会遇到很多我集体无力解决但又不得不去解决的问题,这个时候须要寻求敌人的帮忙,不必十分分明敌人怎么解决问题的,但要须要晓得向哪些敌人寻找帮忙以及感恩。
如何来做零碎分层
分层架构的长处还有很多很多,那么咱们要如何来做分层设计呢,有哪些关键因素须要思考?
我集体认为,最重要的一点是要理分明每个档次的边界是什么。即便是层次分明 Web 我的项目,当业务逻辑简单后,也会存在边界越来越含糊的问题,举个简略的例子。
大家开发过的零碎中应该都有一个用户服务,最根本的接口就是查问用户信息接口,它的申请链路是,DTO -> Controller -> Service . DTO 层接管前端传入的申请参数,序列化后传入给 Controller 层调用 Service 层接口。
这个时候如果 PO 提出一个需要,当查问的用户不存在时,要主动的创立一个用户,并返回。这个时候逻辑层的边界就开始变得含糊了,因为体现层也承当了一部分的业务逻辑(查问用户和创立用户编排起来)。这个时候咱们能够怎么解决? 参照阿里公布的《阿里巴巴 Java 开发手册 v1.4.0(详尽版)》,咱们 能够将原先的三层架构细化成上面的样子 :

在这个分层架构中减少了 Manager 层,它与 Service 层的关系是:Manager 层提供原子的服务接口,Service 层负责根据业务逻辑来编排原子接口。
以下面的例子来说,Manager 层提供创立用户和获取用户信息的接口,而 Service 层负责 将这两个接口组装起来。这样就把原先分布在体现层的业务逻辑都对立到了 Service 层,每一层的边界就十分清晰了。
除此之外,分层架构须要思考的另一个因素,是档次之间肯定是相邻层相互依赖,数据的流转也只能在相邻的两层之间流转。
分层架构的有余
尽管分层架构有很多劣势,但它也有不少缺点,它最重要的一个缺点就是减少了代码的复杂度。这是不言而喻的,明明咱们能够在接管到申请后间接查问和操作数据库,却偏偏在两头插入了多个档次,并且每个档次可能只是简略的做数据传递,有时候减少一个小小的需要也可能要批改一整个链路上的代码,这个时候如果还减少了共事的累赘那肯定是会引来不少吐槽的。
另外,如果咱们把每个层级独立部署,那么层级之间通过网络来交互,在性能上就会有损耗。
留些问题
你晓得什么是繁多职责准则吗?
你晓得什么是迪米特法令吗?
你晓得开闭准则吗?
站在伟人的肩膀上
唐扬—高并发零碎设计 40
问码闻强—SpringCloud 微服务实战
从 0 开始学架构

正文完
 0