干货:软件架构详解 (5)

如果一个使用 Java 的简单单体项目代码超过 100 万行,那么在一台笔记本电脑上修改了代码后执行自动编译,可能需要等待十分钟以上,并且内存可能不够编译过程使用,这是非常难以忍受的。

第四,简单单体模式打包后的部署结构可能过于庞大,导致业务系统启动很慢,进而也会影响系统的可用性。

这一条也是所有单体架构的系统都有的问题。

第五,扩展性受限,也是所有单体架构的一个问题。

如果任何一个业务存在性能问题,那么都需要考虑多部署几个完整的实例的集群,或者再加上负载均衡设备,才能保证整个系统的性能可以支撑用户的使用。

所以,简单单体模式比较适用于规模较小的系统,特别是需要快速推出原型实现,以质量换速度的场景。

单体架构:MVC 模式

MVC 也是一个非常常见的 3 层(3-Tier)结构架构模式,它把每个模块划分为模型层(Model Layer)、视图层(View Layer)、控制器层(Controller Layer)等部分。

模型层:代表业务数据实体部分;

视图层:代表前端的展示部分;

控制器层:代表请求分发,处理调度部分。

更一般地,我们可以添加数据操作层(Data Access Layer)等,形成一个 N 层(N-Tier)结构模型。

整个系统由多个模块组成,每个模块又由这种不同的部分组成。这样一来,我们就把整个系统拆解成了很多粒度较小的零件。这种方式之所以流行开来,主要是因为:

简单,直观,可以非常有效的上手,作为 Web 系统设计的一般方法,这一点是 MVC 模式被普及的基础条件;

经过上面过程的横割竖切,我们已经把系统拆解为一个个的小单元,非常有利于分配开发工作,投入大量的工程师进行大规模的工程化开发,这一点非常重要,在软件行业高速发展的今天,适合工程化的方式才是最具有生产力的办法;

不同的模块和分层结构,本身就可以作为一个开发层面的子项目拆分结构,这样我们就可以把系统拆分成多个不同的子项目;

基于 MVC 模式,又陆续发展了 ORM 等简化数据操作层的技术与框架,以及相应的代码生成工具等,极大的提供了软件开发效率。

当然,MVC 模式也存在定义不够明确,对于简单的业务场景拆解过细导致复杂度增加等问题,需要在实践中不断摸索和总结应用经验。

基于单体架构下的 MVC 模式依然解决不了单体架构本身存在的问题,特别是对于可用性和扩展性的影响。

单体架构:前后端分离模式

传统的 Web 系统都是 BS 结构的。

一般的 JSP 或页面标签 Tag 技术、后端 FreeMaker 或 Velocity 等模板技术导致 HTML/CSS/JavaScript 等前端技术与后端的处理逻辑和数据耦合到一起,这种方式明显不符合现代工程化的专业领域细分原则。

特别是随着富网络应用程序(Rich Internet Application,RIA)概念的兴起,Ajax 和 JQuery 框架,前端 UI 组件技术的大行其道,程序员们在浏览器端写了很多逻辑处理和界面处理的 JavaScript 代码。

后来越来越多的业务逻辑需要在浏览器端实现,前端技术逐渐发展到了一个百花齐放的阶段,特别是近年来基于 NodeJS 前端技术栈的成功应用,最终使前端技术成为了一个与后端技术领域并驾齐驱的领域。

其实早在 2006 年,ExtJS 作为当时的前端解决方案集大成者,已经实现了前端代码逻辑和界面全部都由 JavaScript 完成,后端只提供基于 URL 的 JSON 数据接口。

这样 Web 系统就由原来的 BS 系统,变成了提供 UI 和交互的前端 B 系统,提供数据接口的后端 S 系统,从而达到了前后端分离的目标。

自从,越来越多的系统采用前后端分离的模式,并且进一步影响了研发团队的组成:前端团队负责前端系统开发,后端团队负责后端系统开发,两个团队一起制定前后端系统的数据接口。

只要数据接口保持稳定不变,那么前后端系统可以各自独立发展和维护。这一条准则不仅仅是单体架构独有的,所有的 Web 系统都可以按照这种方式进行设计。

前后端分离模式一直影响到现在的系统架构方法,成为了当下的一种最佳实践。目前最主流的三种前端开发框架(React、AngularJS、Vue),都遵循着这种设计理念。

分布式架构:面向服务架构(SOA)

服务与 SOA

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsswfs.html