【云原生】软件架构的演进以及各个架构的优缺点

news2024/9/21 19:03:23

文章目录

  • 1. 什么是软件架构?
  • 2. 单机架构
  • 3. 应用数据分离架构
  • 4. 应用服务集群架构
  • 5. 读写分离架构
  • 6. 冷热分离架构
  • 7.垂直分库架构
  • 8. 微服务架构
  • 9. 容器编排架构
  • 10. 小结

1. 什么是软件架构?

软件架构是指在设计和构建软件系统时,对系统的组织结构、组件、模块、接口以及它们之间的关系和行为进行规划和定义的过程。它描述了软件系统的整体结构和组成部分之间的关系,以及系统的行为和功能。

软件架构的演进大致可以分为:

  1. 单机架构
  2. 应用数据分离架构
  3. 应用服务集群架构
  4. 读写分离架构
  5. 冷热分离架构
  6. 垂直分库架构
  7. 微服务架构
  8. 容器编排架构

下面为大家一一进行介绍
在这里插入图片描述

2. 单机架构

单机架构是一种简单的技术架构,通常指在一个单独的服务器上运行整个应用程序。在单机架构中,所有的组件和功能都运行在同一个物理或虚拟机上。

出现的原因:在互联网的早期,访问量比较小,单机架构足以满足需求

单机架构的优点:

  1. 部署简单
  2. 成本低

在单机架构中,所有的组件都运行在同一个服务器上,相互之间可以通过本地调用或直接访问来进行通信。这种架构简单、易于部署和管理,适用于小型应用或者不需要高可用性和扩展性的场景。

单机架构的缺点:

  1. 单点故障:由于所有的组件都运行在同一个服务器上,一旦服务器发生故障,整个应用程序将无法访问。
  2. 扩展性有限:单机架构通常只能通过升级硬件来提高性能,无法通过横向扩展来应对高负载。
  3. 难以维护和升级:由于所有的组件都集中在一个服务器上,维护和升级可能会影响整个应用程序的正常运行。
  4. 数据库与应用相互竞争资源

3. 应用数据分离架构

应用数据分离架构是一种将应用程序和数据存储分离的架构设计。在这种架构中,应用程序和数据存储可以运行在不同的服务器或者不同的环境中,通过网络进行通信。

出现原因: 单机架构存在严重的资源竞争,导致站点变慢

应用数据分离架构的优点包括:

  1. 可伸缩性:通过将应用程序和数据存储分离,可以独立地扩展应用程序和数据存储的能力,以满足不断增长的需求。
  2. 可维护性:独立的应用程序和数据存储使得系统的维护和升级更加容易,可以分别进行配置、优化和升级。
  3. 安全性:通过合理的安全和身份验证机制,可以保护数据的安全性和隐私性。
  4. 异构性:应用程序和数据存储可以选择不同的技术和平台,以满足不同的需求和约束条件。

缺点:

  1. 硬件成本变高
  2. 性能有瓶颈,无法应对海量并发

4. 应用服务集群架构

应用服务集群架构是一种将多个应用服务器组成集群的架构方式,旨在提高应用的可靠性、可扩展性和性能。

出现原因: 单个应用不足以支持海量的并发请求,高并发时战点响应变慢

应用服务集群架构的核心概念包括负载均衡、会话共享和故障转移。

  • 负载均衡:通过将用户请求分发到不同的应用服务器上,实现请求的均衡分配,避免单个服务器负载过重,提高整体性能。

  • 会话共享:为了保证用户在不同的应用服务器间的会话一致性,需要将会话信息存储在共享的存储中,例如数据库或缓存中。这样,当用户请求被转发到不同的应用服务器上时,可以保持用户会话的连续性。

  • 故障转移:当某个应用服务器发生故障时,集群中的其他健康服务器可以接管该服务器的工作,确保应用的可用性。这可以通过使用心跳检测、监控和自动故障转移机制来实现。

负载均衡中间件: Nginx,LVS,F5等

优点:

  1. 高可用
  2. 高性能
  3. 具有一定的拓展能力

缺点:

  1. 性能瓶颈,数据库只有一个,架不住海量的并发
  2. 硬件成本变高
  3. 运维工作增多

5. 读写分离架构

读写分离架构是一种将数据库的读操作和写操作分离的架构设计,提高了数据库的性能和可扩展性。

读写分离架构的核心思想是将读操作分发到多个只负责读的从数据库(也称为从库),而写操作则由主数据库(也称为主库)处理。主库负责写入数据并同步到从库,而从库则负责处理读操作。这样可以将读操作的负载均衡到多个从库上,提高读操作的并发性能。

出现原因: 数据库称为性能瓶颈,互联玩一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,因此要把读操作和写操作分离开

使用mycat,tddl等中间件将读和写的请求分离开.使对应的读和写的请求分配给对应的主库/从库

优点:

  1. 数据库的读取性能提高
  2. 读操作被其它服务器分担,写的性能间接提升
  3. 数据库有了从库,数据库的可用性提高(例如:一个服务器挂了,还有其它服务器)

缺点:

  1. 热点数据的频繁读取导致数据库负载很高
  2. 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致
  3. 服务器成本进一步提升

6. 冷热分离架构

冷热分离架构是一种通过引入缓存,将冷数据和热数据分离存储和处理的架构设计,提高了系统的性能和存储效率。

出现的原因: 海量的请求导致数据库负载过高,站点响应再度变慢

在传统的数据库架构中,所有的数据都存储在同一个数据库中,无论数据的访问频率如何。而在冷热分离架构中,根据数据的访问频率将数据分为冷数据和热数据。

冷数据指的是访问频率较低的数据,往往是历史数据或不经常被查询的数据。这些数据可以被迁移到低成本、低性能的存储介质,如磁盘或云存储中。

热数据 指的是访问频率较高的数据,往往是经常被查询和更新的数据。这些数据可以被保留在高性能的存储介质,如内存或快速存储设备中。

缓存常用中间件: Redis

优点:

  1. 大幅降低对数据库的访问请求,性能提升非常明显
  2. 将冷数据存储在低成本的存储介质中,可以节省存储资源和成本。
  3. 将热数据存储在高性能的存储介质中,可以提高数据的读写速度和响应时间,从而提高系统的性能。

缺点:

  1. 带来了缓存一致性,缓存击穿,缓存失败,缓存雪崩等问题
  2. 服务器成本需要进一步增加
  3. 数据库单库太大,单个表体量太大,数据库再次成为性能瓶颈

7.垂直分库架构

垂直分库架构是一种将数据库按照功能或业务模块进行划分的架构设计

在传统的单一数据库架构中,所有的数据都存储在同一个数据库中,无论是哪个业务模块的数据。而在垂直分库架构中,将不同的业务模块的数据存储在独立的数据库中,实现逻辑上的分离。例如一个购物应用的数据库就可以分为: 用户库,商品库,交易库

优点:

  1. 数据库的吞吐量大幅提升,不再是瓶颈
  2. 通过将不同业务模块的数据分散到多个数据库中,可以实现水平扩展,每个数据库可以独立扩展和调整,提高系统的可扩展性。
  3. 将数据分散到多个数据库中,可以简化数据库的管理和维护工作。

缺点:

  1. 跨库join,分布式事务等问题需要方案去解决,目前的mmp都有对应的解决方案
  2. 数据库和缓存结合目前能够抗住海量的请求,但是应用代码整体耦合在一起,修改一行代码需要重新发布

8. 微服务架构

微服务架构是一种软件架构风格,将一个大型应用程序拆分为一组小型、独立的服务,每个服务都专注于执行特定的业务功能。这些服务可以独立开发、部署和扩展,通过轻量级的通信机制进行相互协作,共同构建一个完整的应用系统。

出现原因: 之前的架构有扩展差,持续开发困难,不可靠,不灵活和代码维护困难等弊端

优点:

  1. 灵活性高: 服务独立测试,部署,升级和发布
  2. 独立性高: 每个服务可以自行进行扩展
  3. 提高容错性: 一个服务问题并不会让整个系统瘫痪
  4. 新技术的应用容易: 支持多种变成语言

缺点:

  1. 运维复杂度高: 业务不断发展,应用和服务不断升级,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突问题
  2. 资环使用多: 这些独立运行的微服务都需要占用内存和CPU
  3. 处理故障困难: 一个请求跨多个服务调用,需要查看不同的服务的日志完成问题定位

9. 容器编排架构

容器编排架构是一种用于管理和编排容器化应用程序的架构设计。

容器编排架构提供了一种自动化的方式来部署、扩展和管理容器化应用程序,以实现高度可伸缩、弹性和可靠的部署。

在容器编排架构中可以借助容器化技术(如docker)将应用/服务打包为镜像,通过容器编排工具(如k8s)来动态发布和部署镜像,服务以容器化的方式进行

出现的原因:

  1. 微服务拆分细, 服务多部署工作量大,而且配置复杂,容易出错
  2. 微服务数量多,扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息
  3. 微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突

优点:

  1. 部署,运维简单快速: 一条命令就可以完成几百个服务的部署或者扩缩容
  2. 隔离性好: 容器与容器之间文件系统,网络等相互隔离,不会产生环境冲突
  3. 轻松,支持滚动更新: 版本间切换都可以通过一个命令完成升级或者回滚

缺点:

  1. 技术栈变多,对研发团队要求高
  2. 网络和存储挑战:在容器编排架构中,容器之间需要进行网络通信,并且需要访问共享的存储资源。处理容器之间的网络和存储挑战可能需要额外的配置和管理工作。

10. 小结

软件架构的演进首先解决的是应用和数据库之间的问题,通过将应用和数据库部署到不同的服务器上. 然后再通过负载均衡,处理应用的高并发问题.其次就是对数据库进行优化,通过读写分离,使用缓存,分库分表,分布式数据库来优化数据库. 最后就是在运维方面进行优化.

软件架构是软件开发的重要阶段,在软件生命周期中起到指导和决策的作用。一个好的软件架构可以提供良好的扩展性、可维护性和可重用性,从而降低开发和维护成本,并满足系统的需求和用户的期望。
在这里插入图片描述

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

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

相关文章

数据竞赛复现代码的 Docker 镜像制作指南

文章目录 一、前言二、主要内容1. Docker Desktop?2. VMware17 CentOS Linux Xshell 三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 主要的要求: 通过 Dockerfile 文件创建 Docker 镜像,数据…

Python初学-记录与Java基本语法不同的地方

这里写目录标题 条件与循环If条件语句for循环while循环 数学复数随机数 序列字符串列表与元组一些方法: 字典 条件与循环 If条件语句 在python里基础结构为if,elif,else,并且执行语句是在冒号后面的,Java是if&#x…

(小程序)基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

(小程序)基于uniappvite4vue3搭建跨端项目|uni-appuview-plus模板 版本信息: HBuilderX: 3.8.4 Vite: 4.2.1 uView-Plus: 3.1.31一、创建uniappvue3项目: 点击编辑器的文件 > 新建 > 项目(快捷键CtrlN) 2.选择uni-app项目&…

一点基础、但一直没分清的概念2023/06/28

文章目录 1.export和export default的区别2.npm和cnpm的区别3.npm run dev/serve的区别4.slice、splice和split的区别 1.export和export default的区别 模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输…

【Windows】Windows 如何查看已连接过WiFi的密码

文章目录 方式一、使用命令行查看方式二、使用PowerShell 查看方式三、使用网络适配查看 方式一、使用命令行查看 CtrlShiftEsc 打开任务管理器 打开新建任务对话框 在任务管理器界面,找到第一个菜单文件(F)点击运行新任务(N)。 新建cmd任务 打开(O):cmd     …

SpringBoot+VUE实现文件导入并将其保存到Liunx系统

SpringBootVUE实现文件导入 一、需求二、前端代码实现2.1 显示实现2.1.1 a标签实现2.1.1.1 上传标签实现2.1.1.2 查看标签实现 2.2 上传文件和文件查看界面实现2.2.1 上传文件界面2.2.1.1 上传文件界面展示部分2.2.1.1 上传文件界面逻辑部分 2.2.2 查看文件界面2.2.2.1 查看文件…

一步一步学OAK之二: RGB相机控制

今天我们来实现 RGB相机的控制程序,用来控制彩色相机的曝光、灵敏度、白平衡、亮度/色度降噪、 设备端裁剪、相机触发器等。 目录 Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 全局变量Setup 5: 定义clamp函数Setup 6: 创建pipelineSetup 7:…

Nginx重写跳转

目录 一、rewrite跳转场景 二、rewrite跳转实现 三、rewrite实际场景 四、rewrite正则表达式 五、rewrite命令语法格式 六、location分类 1、location 大致可以分为三类 2、正则匹配的常用表达式 七、location 优先级 八、rewrite和location比较 九、总结 一、rewri…

9 HAL库驱动框架简述(STM32HAL库)

目录 HAL库驱动框架简述 HAL库外设设计思想 HAL库和Cube MX相结合 一、对外设的封装——句柄结构体 二、外设初始化 初始化结构体 初始化的逻辑 三、外设使用逻辑 通用接口函数 初始化函数 I/O操作函数 控制函数 状态参数 扩展接口函数 总结 补充:H…

如何以最小成本通过CMMI评估?评估调查问卷收集中

CMMI评估,我们经常遇到:评估费用高、时间长,CMMI标准过程无法高效落地,那么我们如何以最小的成本通过CMMI评估? CoCode开发云公益直播课即将开播!直播主题:如何以最小成本通过CMMI评估。为了更好…

怎么把文字生成图片?三款ai绘画生成器分享

如果你对ai绘画工具有一定了解的话,你就会知道:市面上大部分ai绘画工具都是收费。再退一步讲,我们暂且不论收费价格的高低,大多数收费的ai绘画工具也不一定能准确匹配我们的需求。 仅仅在学生党和工作党之间,对ai绘画…

python爬虫增加多线程获取数据

Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不…

windows10教育版过期,记录一下重装windows11专业工作站。报错“若要在此计算机上安装windows,请重新启动安装”

准确的来说是重装 windows10或者windows11都有问题,而且卡了很久;最初的问题是 第一步解决问题的方法: 1、修改注册文件: 有些不显示鼠标,记住鼠标按住拖动,这样可以看见矩形的样子,可以知道大…

shardingsphere-proxy 搭建mysql的分库分表

1、docker安装mysql5.7版本 拉取mysql的镜像 docker pull mysql:5.7创建mysql的配置目录,日志目录,数据存储的目录 mkdir -p /home/sunyuhua/docker/mysql/conf mkdir -p /home/sunyuhua/docker/mysql/logs mkdir -p /home/sunyuhua/docker/mysql/dat…

服务器日志处理,文件截取关键字

临近年中述职,需要各种量化参数,服务稳定性是上半年的重中之重,所以需要重点列出说服性指标,因此各种错误吗的统计信息便是重要信息,因为公司的日志采集系统因上云缘故,导致历史数据丢失没法查询&#xff0…

Jetpack Compose实现 验证码输入框

highlight: androidstudio Jetpack Compose 作为 Android 的新一代 UI 开发框架,提供了非常强大的工具来构建用户界面。 今天,我们就利用 Compose 来实现一个炫酷的验证码输入框! 开始的思路是用6个TextField来实现 // 用于存储验证码的长度 val codeLength 6 // 定义一个…

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型

Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型 VScode(Visual Studio Code) 安装模型必要插件VScode 预览自定义关节(articulations)动作VScode 导入 GLB 格式模型VScode 导出 GLB 格式模型 模型渲染作为 …

【什么是iMessage苹果推】怎样来获取设备令牌(Device Token)实现步骤

要获取设备令牌(Device Token),您需要在应用程序中实现以下步骤: 在应用程序中请求用户授权:您需要请求用户授权允许应用程序发送远程通知。这可以通过使用 UNUserNotificationCenter(User Notifications …

Linux学习之以openresty为例学习源码安装软件

https://github.com/openresty/openresty/tags里边有openresty各个版本的源码。 https://openresty.org/en/是官网。 wget https://github.com/openresty/openresty/archive/refs/tags/v1.15.8.1.tar.gz(github网址)或者wget https://openresty.org/download/openresty-1.15.…

6月29日第壹简报,星期四,农历五月十二

6月29日第壹简报,星期四,农历五月十二,早安!坚持阅读,静待花开1. 中国移动元宇宙产业联盟成立,科大讯飞、华为、小米等为首批成员。2. 离岸人民币兑美元跌破7.25关口,创去年11月末来低位。3. 成…