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

news2024/12/23 18:31:18

文章目录

  • 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.coloradmin.cn/o/841047.html

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

相关文章

Python实现GA遗传算法优化Catboost回归模型(CatBoostRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世…

The ‘kotlin-android-extensions‘ Gradle plugin is no longer supported.

Android使用kotlin开发,运行报错 The kotlin-android-extensions Gradle plugin is no longer supported. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.an…

FPGA优质开源项目 - UDP RGMII千兆以太网

本文介绍一个FPGA开源项目:UDP RGMII千兆以太网通信。该项目在我之前的工作中主要是用于FPGA和电脑端之间进行图像数据传输。本文简要介绍一下该项目的千兆以太网通信方案、以太网IP核的使用以及Vivado工程源代码结构。 Vivado 的 Tri Mode Ethernet MAC IP核需要付…

HTTP——九、基于HTTP的功能追加协议

HTTP 一、基于HTTP的协议二、消除HTTP瓶颈的SPDY1、HTTP的瓶颈Ajax 的解决方法Comet 的解决方法SPDY的目标 2、SPDY的设计与功能3、SPDY消除 Web 瓶颈了吗 三、使用浏览器进行全双工通信的WebSocket1、WebSocket 的设计与功能2、WebSocket协议 四、期盼已久的 HTTP/2.01、HTTP/…

antv/l7地图,鼠标滚动,页面正常滑动-- 我们忽略的deltaY

背景 在官网项目中,需要使用一个地图,展示产品的分布区域及数量。希望的交互是,鼠标放上标点,tooltip展示地点和数量等信息。鼠标滚动,则页面随着滚动。但是鼠标事件是被地图代理了的,鼠标滚动意味着地图的…

yum出现Could not retrieve mirrorlist解决方法

Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release6&archi386&repoos error was 14: PYCURL ERROR 6 - “Couldn’t resolve host ‘mirrorlist.centos.org…

revit建模理解

关于Revit族的理解 Revit 和族术语实心和空心形状几何图形类型 Revit 和族术语 图元 - Revit Architecture 项目中的任何内容。(斜体图元可在族编辑器中创建和编辑。) 模型图元 - 代表建筑的实际几何图形的内容。 主体图元 - 可以接收/支持其他模型图元…

Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境

Ansible是一种自动化工具,基于Python写的,原理什么的就不过多再说了,详情参考:https://www.itwk.cc/post/403.html https://blog.csdn.net/qq_34185638/article/details/131079320?spm1001.2014.3001.5502 环境准备 HOSTNAMEIP…

apple pencil性价比高吗?比较好用的电容笔

从压力感、充电器、接口、以及价格上来看,这种平替电容笔都要比原装电容笔的要好得多。平替的电容笔只能给人一种倾斜的压感功能,但苹果的电容笔却是既拥有着倾斜压感功能,又拥有着重力的压感。另外,由于技术的不断发展&#xff0…

SpringBoot3---核心特性---2、Web开发III(模板引擎、国际化、错误处理)

星光下的赶路人star的个人主页 夏天就是吹拂着不可预期的风 文章目录 1、模板引擎1.1 Thymeleaf1.2 基础语法1.3 属性设置1.4 遍历1.5 判断1.6 属性优先级1.7 行内写法1.8 变量选择1.9 模板布局1.10 devtools 2、国家化3、错误处理3.1 默认机制3.2 自定义错误响应3.3 最佳实战 …

string类函数--深入浅出了解

目录 1.为什么学习string类1.1C语言中的字符串1.2OJ题中的优势 2.标准库中的string类3.string类的常用接口函数3.1string类对象的常见构造3.2string类对象的容量操作3.3string类对象的访问及遍历操作3.4string类的修改操作3.5string类的非成员函数 总结 1.为什么学习string类 …

【《深入浅出计算机网络》学习笔记】第1章 概述

内容来自b站湖科大教书匠《深入浅出计算机网络》视频和《深入浅出计算机网络》书籍 目录 1.1 信息时代的计算机网络 1.1.1 计算机网络的各类应用 1.1.2 计算机网络带来的负面问题 1.2 因特网概述 1.2.1 网络、互联网与因特网的区别与关系 1.2.1.1 网络 1.2.1.2 互联网 …

[LitCTF 2023]Http pro max plus

打开环境后提示说,只允许在本地访问,本地访问,还是想到了XFF字段 好家伙的,直接被嘲讽,还是了解太少了,都不知道还有没有其他方式可以控制ip地址信息 经过查看wp,得知一种新的方式 Client-IP …

【flink】Checkpoint expired before completing.

使用flink同步数据出现错误Checkpoint expired before completing. 11:32:34,455 WARN org.apache.flink.runtime.checkpoint.CheckpointFailureManager [Checkpoint Timer] - Failed to trigger or complete checkpoint 4 for job 1b1d41031ea45d15bdb3324004c2d749. (2 con…

Spring Boot集成EasyExcel实现excel导入导出操作

文章目录 Spring Boot集成EasyExcel实现excel导入导出操作0 简要说明简单使用读操作excel源文件实体类监听器业务代码 写操作*实体类*excel示例业务代码根据参数指定列导出指定哪几列导出复杂头导出 关于数值型,日期型,浮点型数据解决方案实体类接收字符…

ElasticSearch:全文检索及倒排索引原理

1.从全文检索说起 首先介绍一下结构化与非结构化数据: 结构化数据将数据具有的特征事先以结构化的形式定义好,数据有固定的格式或有限的长度。典型的结构化数据就是传统关系型数据库的表结构,数据特征直接体现在表结构的字段上,…

【数据结构OJ题】消失的数字

原题链接:https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一:排序遍历(下一个数不等于上一个数1,这个下一个数就是消失的数字)。 时…

吃透这款最流行的数据库,技术生涯就稳了

名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 用好 MySQL 是技术人的基本盘 打稳底盘:学会使用 MySQL 成为高手:摸透底…

GraphGT: Machine Learning Datasets for Graph Generation and Transformation

一、文章来源 > Du Y, Wang S, Guo X, et al. Graphgt: Machine learning datasets for graph generation and transformation[C]//Thirty-fifth Conference on Neural Information Processing Systems Datasets and Benchmarks Track (Round 2). 2021.二、概述 1、文章提出…

使用docker搭建GPT服务

不用ChatGPT账号,不用API,直接免费使用上官方原版的GPT4.0! 这个操作主要使用的是GitHub上的一个开源项目freegpt。 通过docker把这个项目打包到本地电脑上,直接就能使用上原版GPT4.0。 第一步:下载Docker 下载网址:docker.com 根据自己的电脑系统下载对应的版本即可 下…