一般初创软件,为快速上线,几乎不考虑分层。但随业务越发复杂,就会导致逻辑复杂、模块相互依赖、代码扩展性差等各种问题。
架构分层迫在眉睫。
1 什么是架构分层?
软件工程中常见的设计方式,将整体系统拆分成N个层次,每个层次有独立的职责,多个层次协同提供完整的功能。
初学 JavaWeb 时一般要求设计成 MVC 架构。另外一种常见的分层方式是将整体架构分为
- 表现层(Web)
展示数据结果和接受用户指令的,是最靠近用户的一层; - 逻辑层(Service)
复杂业务的具体实现; - 数据访问层(Dao)
主要处理和存储之间的交互。
这就可以隔离关注点,让不同的层专注做不同的事情。其它分层案例,比如OSI网络七层模型,TCP/IP协议网络四层模型。
2 分层有什么好处?
简化设计
各司专职,而不必将自己活成全才。
高复用
比如在设计某系统时,发现某层具有通用性,就可把它抽取独立出来,在设计其它系统时使用。
横向扩展
可以让我们更容易做横向扩展。如果系统没有分层,当流量增加时我们需要针对整体系统来做扩展。但是,如果我们按照上面提到的三层架构将系统分层后,就可以针对具体的问题来做细致的扩展。
比如业务逻辑里面包含有比较复杂的计算,导致CPU成为性能的瓶颈,那这样就可以把逻辑层单独抽取出来独立部署,然后只对逻辑层来做扩展,这相比于针对整体系统扩展所付出的代价就要小的多了。
架构分层究竟和高并发设计的关系是怎样的?我们知道横向扩展是高并发设计思想之一,既然架构分层可方便横向扩展, 那么高并发系统一定是分层的。