【架构】Java 系统架构演进的思考

文章目录

  • 1 前言
  • 2 单体应用架构
  • 3 垂直应用架构
  • 4 分布式架构
  • 5 SOA 架构
  • 6 微服务云架构
  • 7 总结

1 前言

随着移动互联的发展,网站、H5、移动端的应用规模也不断扩大,不管是应用的数量还是质量都得到了指数级的提升。开发者的数量与日俱增,应用的复杂度也在不断提高,如何快速的完成功能的交付,并且协调众多的开发者一起进行分工合作,这是一个复杂的系统工程。互联网从萌芽到现在,系统架构大体经历了几个过程:单体应用架构、垂直应用架构、分布式架构、SOA架构、微服务云架构。在本文中,将介绍架构的演进过程以及自己的思考。

2 单体应用架构

在互联网发展的早期,其网站应用的流量较小,所有的功能代码以及数据存储都是一台服务器之上,这样的做法可以减少开发、部署和维护项目的成本。在这个阶段,一般都是前后端不分离的阶段,一个 tomcat 下部署多个应用服务。常见的技术栈包括 spring+mybaits+jsp 或者 spring+mybaits+freemaker。该种方式的优点是单人维护,开发节奏快,缺点是不适合大型项目,模块之间耦合较大,单点容错率低。

在这里插入图片描述

3 垂直应用架构

垂直应用架构出现的背景是网站的访问量越来越大,单一应用还可以增加节点来应对,但是并不是所有的模块都需要增加服务能力,所以需要对服务按照功能进行拆分,对用户访问量大的模块进行扩容。系统的拆分分担了流量,解决了并发的问题,还可以针对不同的功能模块进行分工和优化,此外一个系统的问题不会影响其它的系统,提高了系统间的容错率,这是垂直应的优点,同时各个系统之间无法调用,会存在重复的功能代码,另外对于管理系统来说,session 的会话保持也是一个巨大的问题,这种模式下,一般采用 tomcat session 复制的模式,对资源的消耗比较大。
在这里插入图片描述

4 分布式架构

在分布式系统中,会将系统中重复的代码单独抽离出来作为独立的服务,原来的垂直系统分成了独立的服务层和具体业务的展现层,该种架构下提高了代码的复用性,但是系统间的复杂度和耦合度增加,项目维护难度较大。

在这里插入图片描述

5 SOA 架构

对于 SOA 架构,就是在分布式的架构基础之上引入了一个服务注册中心,用来解耦展现层和服务层,极大的解决了系统的运维难度。在 SOA 的架构下,ssm 框架 + dubbo + zk 的结构可谓是风靡一时。在 SOA 的架构下,服务进一步的拆分,可以尽可能的发挥人员的效力,在此种架构下,同时也实现了前后端的分离,使得开发效率进一步的提高,后端和前端都各自专注于自己的领域,系统的复杂度进一步提高。
在这里插入图片描述

6 微服务云架构

在万物互联,万物上云的时代,微服务的架构应运而生。微服务的架构进一步的拆分服务,并引入各种系统组件,用于服务治理,服务监控,链路追踪,鉴权与授权。在此种场景下,各个服务组件更加专业化,不仅仅是服务的注册与发现,还有配置中心,链路追踪等,微服务全家桶(springcloud springcloud alibaba)。
SOA 的架构与微服务的架构服务能力对比:

SpringCloud 各个组件可选的技术方案。

在这里插入图片描述

7 总结

在本文中,主要介绍了是近10年来服务架构的演进路径,以及每一种架构的优点和缺点。现在是万物互联,万物上云的时代,微服务是目前十分流行的大型项目的解决方案。但是在实际的项目开发中,也要考虑实际情况,要考虑项目的定位和发展情况不能过度开发,最流行的解决方案不一定是最好的,而是要选择与业务场景最适配的架构,这样才可以保证项目的交付与迭代更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/25406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPENCV C++(六)canny边缘检测+仿射变换+透射变换

图像的缩放 resize(image, image, Size(round(image.cols * 0.5), round(image.rows * 0.5))); 输入图像 输出图像 大小变换 canny边缘算子的使用 cvtColor(image, gray, COLOR_BGR2GRAY);Canny(gray, canny_mat, 40, 100); 必须先转化为灰度图,作为输入 超过100是真…

利用docker run -v 命令实现使用宿主机中没有的命令

利用docker run -v 命令实现使用宿主机中没有的命令 使用容器中的jar命令解压jar包,并将解压内容输出到挂载在宿主机中的目录里 使用容器中的jar命令解压jar包,并将解压内容输出到挂载在宿主机中的目录里 docker run -it --name java -v /www/temp/java…

docker安装ES

拉取镜像文件 sudo docker pull elasticsearch:7.12.0 创建容器挂载目录 sudo mkdir -p /home/elasticsearch/config sudo mkdir -p /home/elasticsearch/data sudo mkdir -p /home/elasticsearch/plugins elasticsearch.yml http.host: 0.0.0.0 创建容器 sudo docker r…

.net core ConfigureServices和Configure

在.NET Core应用程序中,ConfigureServices和Configure方法在Startup类中起着重要的作用。 ConfigureServices方法用于进行依赖注入的配置。在该方法内,你可以注册应用程序所需要的各种服务、中间件和其他依赖项。它接收一个IServiceCollection参数&…

九、用 ChatGPT 提高算法和编程能力

目录 一、实验介绍 二、背景 三、LeetCode 刷题带来的问题 四、ChatGPT 如何帮助刷题 五、ChatGPT 推荐学习资源

SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 REST 一、REST简介1.1REST风格简介 二、RESTful入门案例2.…

memcpy、memmove、memcmp、memset函数的作用与区别

一、memcpy与memmove 1、memcpy 作用:从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来);destination和source…

机器视觉工程师,代码键盘侠们你们真的懂键盘吗?

机器视觉-基本知识-中英通用术语 键盘是用于操作计算机设备运行的一种指令和数据输入装置,也指经过系统安排操作一台机器或设备的一组功能键(如打字机、电脑键盘)。键盘也是组成键盘乐器的一部分,也可以指使用键盘的乐器,如钢琴、数位钢琴或电子琴等,键盘有助于练习打字。…

笛卡尔积文本的python处理

一 背景 大致背景是这样的,笔者在做数据处理时,遇到一个棘手的事情,主要遇到如下字符串拼接变动的场景,场景主要为,需要考虑如下两张表的组合: 表1-原始文本样式 序号文本样式1A变量B2A变量C3A变量CD4E变…

java的String类详解

目录 不可变字符串字符串常量池 String类的继承关系String类的底层实现创建String对象字符串拼接常见面试题 String的常用方法字符串是否相等获取子串返回字符串的长度字符串的比较返回给定值的索引转换大小写返回给定索引的字符字符串替换把字符串转换为字符数组去字符串空白字…

ant.design 组件库中的 Tree 组件实现可搜索的树: React+and+ts

ant.design 组件库中的 Tree 组件实现可搜索的树,在这里我会详细介绍每个方法,以及容易踩坑的点。 效果图: 首先是要导入的文件 // React 自带的属性 import React, { useMemo, useState } from react; // antd 组件库中的,输入…

如何使用 reqwest 包

GET 请求 向连接发起一个 GET 请求:https://hacker-news.firebaseio.com/v0/topstories.json,并解析返回的内容。 尝试发起请求 因为是 GET 请求,可以先在浏览器中进行查看,浏览器可以正常显示一个 id 列表,如下所示…

Anaconda安装

目录 1.Anaconda 安装前是否需要安装Python 2.Anaconda 都包含了什么 3.Anaconda官网下载地址

《Linux从练气到飞升》No.08 Linux的版本管理工具 git

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

复现沙箱逃逸漏洞

什么是沙箱(sandbox) 在计算机安全性方面,沙箱(沙盒、sanbox)是分离运行程序的安全机制,提供一个隔离环境以运行程序。通常情况下,在沙箱环境下运行的程序访问计算机资源会受到限制或者禁止,资源包括内存、…

【大模型】大模型在软件特性设计中的应用

创建业务对象 1、已有的业务对象可以放入向量数据库 2、如果没有新的业务对象需要创建,直接跳过 3、新的业务对象由用户手动创建 提示词 假设你是一名 Java 软件技术专家,根据如下 yaml 格式生成对应的实体对象,其中 1、最顶层为对象名 2、…

Visual ChatGPT:Microsoft ChatGPT 和 VFM 相结合

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Visual ChatGPT? Visual ChatGPT 是一个包含 Visual Foundation 模型 (VFM) 的系统,可帮助 ChatGPT 更好地理解、生成和编辑视觉信息。VFM 能够指…

前端如何设置表格边框样式和单元格间距?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 实现思路⭐ 代码演示⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴…

C++ 派生类成员的标识与访问——作用域分辨符

在派生类中,成员可以按访问属性分为以下四种: (1)不可访问成员。这是从基类私有成员继承下来的,派生类或是建立派生类对象的模块都无法访问到它们,如果从派生类继续派生新类,也是无法访问的。 &…

Python魔法解析:探索变量类型的丰富多彩世界!

在Python这个魔法般的编程语言中,变量是连接你与计算机世界的神奇桥梁。然而,这些变量并不是单一的,它们有着丰富多彩的类型。无论你是刚刚踏入编程的大门,还是想要深入了解Python的高级特性,本篇博客将带你探索变量的…