02:架构分层以及其必要性
2020-02-06 本文已影响0人
浥羽醉悠扬
在系统从0到1的阶段,为了让系统快速上线,我们通常是不考虑分层的。但是随着业务越来越复杂,大量的代码纠缠在一起,会出现逻辑不清、各模块项目依赖、代码扩展性差、牵一发而动全身等问题。
什么是分层架构
软件架构分层在软件工程中是一种常见的设计方式,它是将整体系统拆分成N个层次, 每个层次都有独立的职责,多喝层次协提供提供完整的功能。
我们在刚刚成为程序员的时候,会被“教育”说系统的设计要是MVC架构(Model-View-Controller)架构。它将整体的系统分成了模型,视图和控制器三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好的实现了表现和逻辑的解耦,是一种标准的软件分层架构。
image
另外一种常见的分层方式是将整体架构分为表现层、逻辑层和数据访问层:
- 表现层,就是展示数据结果和接受用户指令的,是最靠近用户的一层;
- 逻辑层里以后复杂业务的具体实现;
- 数据访问层则是主要处理和存储之间的交互。
image
工作中经常用到tcp/ip协议,它把网络简化成了四层,即链路层、网络层、传输层和应用层。每一层各司其职又互相帮助,网络层负责端到端的寻址和建立连接,传输层负责端到端的数据传输等,同时相邻两层还会有数据的交互。这样可以隔离关注点,让不同的层专注做不同的事情。
image
分层有什么好处
- 分层的设计可以简化系统设计,让不同的人专注做某一层次的事情。
- 分层之后可以做到很高的复用。
- 分层架构可以让我们更容易做横向扩展。分层后可以针对具体问题来做细致的扩展。比如业务逻辑里面包含有比较复杂的计算,导致cpu成为性能的瓶颈,那这样可以把逻辑层单独抽取出来独立部署,然后只对逻辑层来做扩展。
如何来做系统分层
当业务逻辑简单时,层次之间的边界清晰,开发新的功能时也知道那些代码要往哪儿写,但是当业务逻辑变得越来越复杂时,边界会变得越来越模糊
分层架构的不足
最主要的一个缺陷就是增加了代码的复杂度。另外一个可能的缺陷时,如果把每个层次独立部署,层次间通过网络来交互,那么多层的架构在性能上会有损耗。这也是为什么服务化架构要比单体架构略差的原因,也是所谓的“多一跳”的问题。
任何方案架构都是有优势有缺陷的,相对于分层架构带来的好处来说,这些都是可以接受的,或者可以通过其他的方案解决。