01-应用扩展和架构演进

news2024/11/15 8:57:53

文章目录

  • 前言
  • 一、项目扩展
  • 二、架构演进
  • 总结


前言

随着项目从使用者范围到用户体积的不断扩大,最原始的单体项目已经无法很好地支撑现代项目所需的要求。因此,项目的架构也随之不断演进。本文将介绍架构的演进过程,初步了解微服务架构。

一、项目扩展

AKF扩展立方体,取自畅销书《The Art of Scalability》,是AKF公司的技术专家对应用扩展的精妙总结。
在这里插入图片描述

这一理论为我们揭示了单体系统无限扩展的三个重要维度。

  • X轴:水平复制
  • Y轴:业务拆分
  • Z轴:数据分片

X轴,通过水平复制,可以增加系统的节点数量,实现负载均衡和故障容忍。这种扩展方法既提高了系统的可用性和可伸缩性,又增强了系统的弹性和可靠性。
Y轴,通过业务拆分,可以将系统拆分成多个服务,实现服务化架构和微服务架构。这种扩展方式可以提高系统的模块化程度,降低系统间的耦合度,从而更好地应对复杂的业务需求和变化。
Z轴,通过数据分片,增加单个节点的处理能力,提高系统的性能和吞吐量。这种扩展方式能够轻松地满足系统的需求,同时也降低了系统复杂度和维护成本。

单纯的定义,可能不是很好理解,这里我们举个例子。大家应该都用过打车软件,比如滴滴。
假设这个打车软件从开始就是一个单体应用。在司机和乘客不多的时候,都可以正常使用。但是到了下班高峰期或者旅游高峰期,数据量忽然增长,打车软件就出现了问题。这个时候就可以通过水平复制来进行处理,多加几套相同的服务,支撑住用户的请求即可。为了让打车软件收益更多,推出了很多招揽司机和给乘客发送红包的促销活动,单个地区的数据量又再次暴涨。这时,就需要将目前的单体应用切分,推出乘客服务模块,司机服务模块,订单模块,投诉模块等等。以此来应对客户的各项需求。但随着用户群体的不断扩大,这个打车软件已经覆盖了不止一座城市,数据量再次增加。这个时候就可以通过地区进行切分,每个地区使用自己独立的数据库。

总之,AKF扩展立方体为我们呈现了一种系统化的应用扩展方法。遵循这三个扩展模式,我们能够构建一个无限扩展的单体系统,从而实现系统的持续增长和优化。

二、架构演进

通过以上的示例可以明显地观察到,在项目的扩展过程中,架构的不断演进是不可避免的。从单体应用到微服务应用,也是ORM到SOA的转变。
在这里插入图片描述
下面看下图中框架的一些基本特点。

ORM框架:

  • 对象关系映射(ORM)框架用于简化应用程序和数据库之间的交互,将对象模型和关系数据库模型进行映射。
  • 提供了编程接口来方便地进行数据库操作,避免了手动编写大量的SQL语句。 增加了开发效率,减少了对数据库操作的重复性工作。
  • 支持对象化的数据访问,降低了数据库操作的复杂性,提高了代码的可维护性。

MVC框架:

  • MVC(模型-视图-控制器)框架是一种软件架构模式,将应用程序分为模型、视图和控制器三个部分。
  • 模型负责处理应用程序的业务逻辑和数据操作,视图负责呈现数据给用户,控制器负责处理用户的输入和控制应用程序的流程。
  • 提供了良好的代码组织和可维护性,使得开发者可以更好地分离关注点,降低了耦合度。 使得前端和后端的开发可以更好地分离,提高了团队协作的效率。

RPC框架:

  • 远程过程调用(RPC)框架是一种用于实现跨网络通信的技术,使得应用程序可以像调用本地函数一样调用远程服务。
  • 提供了透明的远程调用,隐藏了网络通信的细节,使得分布式系统的开发更加简单和高效。
  • 支持多种协议,如HTTP、TCP等,使得不同的系统可以进行跨语言和跨平台的通信。
  • 提供了良好的性能和可靠性,使得分布式系统可以更好地进行扩展和集成。

SOA框架:

  • 面向服务的架构(SOA)框架将应用程序分解为一组小型、相互独立的服务,每个服务都围绕着特定的业务功能进行构建。
  • 提供了松耦合和高内聚的特性,使得系统更加灵活、可维护和可扩展。
  • 支持服务的复用和组合,使得系统可以更好地满足不断变化的业务需求。
  • 提供了良好的可伸缩性和可靠性,使得系统可以更好地适应不同的负载和故障情况。

通过上面打车软件的例子,结合几个框架的特点,不难看出,在项目构建初期,由于用户人数不足、服务过于单一,仅通过简单的ORM架构或者MVC架构就可以满足初期的项目需求。但随着业务扩大,用户增多,RPC架构和SOA架构逐渐取代之前的架构,以便满足更加丰富的用户需求。每个架构的演进,都是为了解决上一个架构带来的问题。

其实,面向服务的SOA架构,已经有了微服务架构的雏形。微服务架构是一种更加轻量化的面向服务的架构风格,它将应用程序划分为一组小型服务单元,每个服务单元都具有自己的独立部署、运行和监控能力。微服务架构的出现是解决SOA架构在大型组织中的复杂性问题。SOA架构演进成为微服务架构的关键是将服务分解为更小的服务单元,并使用容器化的方式进行部署和运行。


总结

通过对AKF扩展立方的阐述,说明了单体系统不断扩展的三个方向。随着项目的扩展,底层框架也在不断演进,来适应新的需求。为了项目有更好的可扩展性、可维护性和可靠性,同时也是为了可以从容应对技术栈的升级,微服务架构也就应运而生,成为云原生中的一员。

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

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

相关文章

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(3)》(19)

《Linux操作系统原理分析之linux存储管理(3)》(19) 6 Linux存储管理6.4 Linux 的分段和分页结构6.4.1Linux 的分段结构6.4.2 Linux 的三级分页结构6.4.3 内核页表和进程页表 6 Linux存储管理 6.4 Linux 的分段和分页结构 本节主…

【滑动窗口】LeetCode2953:统计完全子字符串

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本题其它解法 【离散差分】LeetCode2953:统计完全子字符串 题目 给你一个字符串 word 和一个整数 k 。 如果 word 的一个子字符串 s 满足以下条件,我们称它是 完全字符串: s 中每个字符…

014 OpenCV canny边缘检测

一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、canny原理 OpenCV中的Canny边缘检测算法是一种基于图像处理的计算机视觉技术,主要用于检测图像中的边缘。Canny边缘检测算法的原理是通过计算图像中像素点之间的梯度值来…

导入JDBC元数据到Apache Atlas

前言 前期实现了导入MySQL元数据到Apache Atlas, 由于是初步版本,且功能参照Atlas Hive Hook,实现的不够完美 本期对功能进行改进,实现了导入多种关系型数据库元数据到Apache Atlas 数据库schema与catalog 按照SQL标准的解释,…

【Latex笔记】标题页

整体结构 模板结构如下: \documentclass{book} % 导言区,加载宏包和各项设置,包括参考文献、索引等 \usepackage{makeidx} % 调用makeidx 宏包,用来处理索引 \makeindex % 开启索引的收集 \bibliographystyle{plain} % 指定参考…

OpenCV-Python:图像卷积操作

目录 1.图像卷积定义 2.图像卷积实现步骤 3.卷积函数 4.卷积知识考点 5.代码操作及演示 1.图像卷积定义 图像卷积是图像处理中的一种常用操作,主要用于图像的平滑、锐化、边缘检测等任务。它可以通过滑动一个卷积核(也称为滤波器)在图像…

【C/PTA —— 14.结构体1(课内实践)】

C/PTA —— 14.结构体1(课内实践) 6-1 计算两个复数之积6-2 结构体数组中查找指定编号人员6-3 综合成绩6-4 结构体数组按总分排序 6-1 计算两个复数之积 struct complex multiply(struct complex x, struct complex y) {struct complex product;product.…

Shopify二次开发之三:liquid语法学习(Tags)

目录 Tags 变量声明 assign capture decrement increment 条件语句 if else unless case HTML form表单生成 style Iteration (遍历) for else break continue cycle paginate Theme (主题) render渲染一个snippet,可…

用友NC word.docx接口存在任意文件读取漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、产品介绍 用友 NC Cloud,大型企业数字化平台&#xff…

MySQL笔记-第04章_运算符

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第04章_运算符1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 运算符的优先级拓展:使用正则表达式查询 第04章_运算符 …

轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)

原理简介: 1. 基于rendering pass graph实现。 2. WGSL Shader 基于文件系统和宏机制动态组装。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PBRShadowTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&a…

【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问

1. 前言 现在我们身边的只能设备越来越多,各种智能手机、平板、智能手表和数码相机充斥身边,需要存储的数据也越来越大,一张手机拍摄的照片都可能有十多M,电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…

探索CSS:从入门到精通Web开发(二)

前言 当我们谈论网页设计和开发时,CSS(层叠样式表)无疑是其中的重要一环。作为HTML的伴侣,CSS赋予网页以丰富的样式和布局,使得网站看起来更加吸引人并且具备更好的可读性。本书将通过一系列深入浅出的方式&#xff0…

Java多线程 - 黑马教程

文章目录 Java 多线程一、多线程概述二、 多线程创建方式1、继承 Thread 类创建线程2、实现 Runnable 接口3、实现 Callable 接口三、Thread 常用的方法四、线程安全什么是线程安全问题?线程安全问题出现的原因程序模拟线程安全五、线程同步线程同步方式1:同步代码块线程同步…

GPIO的使用--时钟使能含义--代码封装

目录 一、时钟使能的含义 1.为什么要时钟使能? 2.什么是时钟使能? 3.GPIO的使能信号? 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能&#xff1f…

关于如何解决问题?代码习惯。

警钟长鸣 从师哥身上学到的东西: 关于如何解决问题? 1、沟通:有效的沟通,将问题描述清楚,让老师和师哥明白你出了什么问题,给出建议,很多时候一句良言胜过自己摸索很久 2、出现问题由浅入深地…

国标GB28181安防监控平台EasyCVR录像时间轴优化步骤

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…

Linux系统上RabbitMQ安装教程

一、安装前环境准备 Linux:CentOS 7.9 RabbitMQ Erlang 1、系统内须有C等基本工具 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz socat2、下载安装包 1)首先&a…

Harmony Ble蓝牙App(三)特性和属性

Ble蓝牙App(三)特性使用 前言正文一、获取属性列表二、属性提供者三、获取特性名称四、特性提供者五、加载特性六、源码 前言 在上一篇中我们完成了连接和发现服务两个动作,那么再发现服务之后要做什么呢?发现服务只是让你知道设备…