软件架构的发展历程

一、单体架构

Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能 模块使用同一个数据库。 下图是一个单体架构的电商系统:
在这里插入图片描述特点:
1、所有的功能集成在一个项目工程中。
2、所有的功能打在一个war包部署到服务器。
3、通过部署应用集群和数据库集群来提高系统的性能。
优点:
1、项目架构简单,前期开发成本低,周期短,小型项目的首选。
2、开发效率高,模块之间交互采用本地方法调用。
3、容易部署,运维成本小,直接打包为一个完整的包,拷贝到web容器的某个目录下即可运行。
4、容易测试:IDE都是为开发单个应用设计的、容易测试——在本地就可以启动完整的系统。
缺点:
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
2、版本迭代速度逐渐变慢,修改一个地方就要将整个应用全部编译、部署、启动,开发及测试周期过长。
3、无法按需伸缩,通过集群的方式来实现水平扩展,无法针对某业务按需伸缩。

二、分布式架构

针对单体架构的不足,为了适应大型项目的开发需求,许多公司将一个单体系统按业务垂直拆分为若干系统,系统 之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构称为分布式架构。
在这里插入图片描述
特点:
1、按业务垂直拆分成一个一个的单体系统,此架构也称为垂直架构。
2、系统与系统之间的存在数据冗余,耦合性较大,如上图中三个项目都存在客户信息。
3、系统之间的接口多为实现数据同步,如上图中三个项目要同步客户信息。
优点:
1、通过垂直拆分,每个子系统变成小型系统,功能简单,前期开发成本低,周期短。
2、每个子系统可按需伸缩。
3、每个子系统可采用不同的技术。
缺点:
1、子系统之间存在数据冗余、功能冗余,耦合性高。
2、按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现,比如订单管理和用户管理。

三、SOA架构

SOA是一种面向服务的架构,基于分布式架构,它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好 的接口和协议联系起来。
在这里插入图片描述
特点:
1、基于SOA的架构思想,将重复公用的功能抽取为组件,以服务的方式向各各系统提供服务。
2、各系统与服务之间采用webservice、rpc等方式进行通信。
3、ESB企业服务总线作为系统与服务之间通信的桥梁。
优 点:
1、将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
2、可以针对不同服务的特 点按需伸缩。
3、采用ESB减少系统中的接口耦合。
缺点:
1、系统与服务的界限模糊,会导致抽取的服务的粒度 过大,系统与服务之间耦合性高。
2、虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维 护。

四、微服务架构

基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的 每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等 等,服务的粒度很小,所以称为微服务架构。
在这里插入图片描述
特点:
1、服务层按业务拆分为一个一个的微服务。
2、微服务的职责单一。
3、微服务之间采用RESTful、RPC等轻量级协议传输。
4、有利于采用前后端分离架构。
优点:
1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。
2、可以更加精准的制定每个服务的优化方案,按需伸缩。
3、适用于互联网时代,产品迭代周期更短。
缺点:
1、开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。
2、微服务过多,服务治理成本高,不利于系统维护。

软件架构发展历程与业务需求和技术发展紧密相关。最初存在基于 IBM 主机的单体核心架构,随着银行系统专业化发展,核心系统的服务下移,如额度管理、押品管理等相关服务逐渐从核心系统剥离,形成开放式瘦核心架构。这一演进是随着业务需求引入的,而非单纯为技术技术。目前,云原生、分布式架构的核心建设方兴未艾,其主要驱动因素在于技术安全方面,与互联网行业因业务爆炸式增长而采用新技术解决业务问题有所不同[^1]。 在开发框架方面,前端和后端有不同的发展和特点。后端开发更关注数据服务,前端负责展示和交互。Node.JS 的出现使前后端一起开发成为可能,许多大公司在 2015 年前后进行尝试,用 Node.JS 作为中间数据转接层,让后端更专注于数据服务和治理。关于前端,有其模块化发展历程,但具体未详细提及开发框架 [^3]。 ### 现行开发框架示例: #### 前端框架 - **React**:由 Facebook 开发和维护,是一个用于构建用户界面的 JavaScript 库。它采用虚拟 DOM 提高渲染性能,使用组件化开发模式,便于代码的复用和维护。例如: ```jsx import React from 'react'; import ReactDOM from 'react-dom/client'; function HelloWorld() { return <h1>Hello, world!</h1>; } const root = ReactDOM.createRoot(document.getElementById('root')); root.render(<HelloWorld />); ``` - **Vue.js**:是一个渐进式 JavaScript 框架,易于上手,同时拥有强大的生态系统。它采用响应式原理,通过数据绑定和组件化开发,能高效构建用户界面。示例代码: ```vue <template> <div> <h1>{{ message }}</h1> </div> </template> <script> export default { data() { return { message: 'Hello, Vue!' }; } }; </script> ``` #### 后端框架 - **Django**:是一个基于 Python 的高级 Web 框架,遵循 MVC(实际为 MVT)架构模式,具有强大的内置功能,如自动生成管理界面、ORM 等,能帮助开发者快速搭建 Web 应用。示例代码: ```python # models.py from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) # views.py from django.http import HttpResponse from .models import Book def book_list(request): books = Book.objects.all() output = ', '.join([book.title for book in books]) return HttpResponse(output) ``` - **Spring Boot**:是基于 Java 的开发框架,简化了 Spring 应用的搭建和开发过程。它提供了自动配置和嵌入式服务器等功能,使开发者能更专注于业务逻辑。示例代码: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/") public String hello() { return "Hello, Spring Boot!"; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-乾坤-

????????????????????????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值