# 技术架构演进之路

news2024/11/23 8:18:09

技术架构演进之路

文章目录

  • 技术架构演进之路
    • 单机架构
    • 应用数据分离架构
    • 应用服务集群架构
    • 读写分离架构
    • 冷热分离架构
    • 垂直分库架构
    • 微服务架构
    • 容器编排技术
    • 互联网架构

单机架构

简介应用和服务公用一台服务器
出现原因出现在互联网早期,访问量比较小,单机足以满足需求.
架构工作原理可以通过应用(多个模块)和数据库在一个服务器上完成交互
优点部署简单,成本低
缺点存在严重的性能瓶颈,数据库和服务互相竞争资源.

技术案例:

image-20230608001358366

应用数据分离架构

简介应用服务和数据库服务使用不同的服务器
出现原因单机架构存在严重的资源瓶颈,导致站点变慢
架构工作原理可以看到应用(多个模块)和数据库在各自的服务器上通过网络协调工作.
优点成本相对可控,性能有一定提高,最重要的是数据库单独隔离,有一定的容毁能力
缺点硬件成本较高,任然无法面对海量并发

前两种架构将性能归过于服务器,我们可以通过购买服务器来提高其性能

应用服务集群架构

简介引入了负载均衡,应用以集群的方式运行
出现原因单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢
架构工作原理可以看到应用不是一个,而是多个,通过负载均衡来实现高并发.
优点高可用,支持横向扩展,具有一定的高性能(如果在不访问数据库的情况下)
缺点数据库成为性能瓶颈,无法应对数据库的海量查询,数据库是单点的,没有高可用,硬件成本高,运维工作量大.

技术案例:

image-20230608005414755

读写分离架构

简介将数据库读写操作分散到不同的节点,数据库服务器搭建主从集群,一主一从,一主多从都可以,数据库主机负责写操作,从机负责读操作
出现原因数据库成为瓶颈,而互联网应用一般读多写少,那么我们就可以进行选择,将读操作和写操作分开
架构工作原理可以看到数据库服务器不再是一个,数据库主机负责写操作(也可以配置读),从机负责读操作,主机通过复制的方式将数据发送到从机.
优点:数据库层面的一个高可用,读取性能一定得到提升,写的性能间接提升,
缺点热点数据的频繁读取导致数据库的压力增大,同步服务如果挂点或者网络延迟大,主库和从库数据不一致的问题,成本增大.

技术案例:

image-20230608150248833

冷热分离架构

简介引入缓存,实现冷热分离,将热点数据放入缓存中快响应
出现原因海量的请求导致数据库负载过高,站点响应再次变慢
架构工作原理可以看到多了很多缓存服务器,对于热点数据直接放到缓存服务器中,不常用的数据再到数据库中查找.
优点大幅降低对数据库的访问请求,性能提升非常明显
缺点带来了缓存一致性问题,缓存击穿,缓存失效,缓存雪崩等额问题,服务器成本需要额外增加.业务体力变大后,数据量增大,数据库单库太大,单个表体量也太大,数据查询会很慢,数据库再次成为性能瓶颈.

技术案例:

image-20230608151844514

垂直分库架构

简介数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构
出现原因单机的写库会大道性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力大,需要进行分表,为降低运维难度,业界主键研发了分布式数据库,库表天然支持分布式.
架构工作原理数据库是由多个主从库或者存储集群组成,支持分布式大规模并行处理
优点数据库吞吐量大幅增加
缺点跨库join,分布式事务等问题,这些需要对应的去解决,目前的mmp都有对应的解决方案

技术案例:

image-20230608155850709

微服务架构

简介微服务是一种架构风格,按照业务板块来划分代码,使单个应用的职责更加清晰,相互之间可以做到独立迭代
出现原因扩展性差,因为没改动一行代码,都要重新部署整个系统,浪费时间,持续开发困难难;不可靠,以前的架构,如果整个系统中的某一个功能不可用,直接将导致整个系统瘫痪;不灵活:无法使用不同的编程语言构建单体程序;代码维护难:所有功能耦合在一起,信任不知道如何下手;
架构工作原理电子商城拆分成多个微服务,如用户服务,交易服务,商品服务,各个服务共同协作组件成电子商城应用
优点服务器独立测试,部署,升级;独立扩展;提高容错性;支持多种编程语言
缺点运维复杂度高,应用和服务都会变多,部署会越来越困难,同一台服务器上部署多个应用还需要考虑环境的问题;资源使用变多;处理故障困难;

技术案例:

image-20230627221750420

容器编排技术

简介借助容器化技术将应用/服务打包为镜像,通过容器编排工具来动态发布和部署镜像
出现原因微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错
架构工作原理一个商城应用拆分为商品,用户,交易服务,每个微服务打包到容器中,相互协作完成功能,通过容器编排工具完成部署
优点部署简单;隔离性好,容器与容器之间文件系统,网络相互隔离,不会产生环境冲突;版本切换更为方便;
缺点技术栈变多(docker,k8s);

互联网架构

image-20230627230945659

背锅过程:

image-20230627231727731

docker的核心作用:完成核心打包,让我们进行容器话的一个运行 !

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

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

相关文章

本地新项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮,新建一个项目 新建空白项目 项目名称与本地新建项目名称相同,其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下,右击 git bash here打开命令窗口 初始化…

java代码审查过关的一次总结

**1.for循环中的逻辑都抽出一个方法并且把重要逻辑抽出一个方法 2.参数比较多合并成一个对象 3.避免没必要的if else 例如if判断能直接return就return,避免没必要的else 4.检查代码中是否包含适当的注释,解释代码的目的、实现细节和注意事项。 5.代码格式和命名规…

百炼智能发布垂直模型“爱迪生”,B2B行业的AIGC大潮来了

(图片来源:Pixels) AIGC终于来到B2B行业,企业服务AGI时代已拉开帷幕。 数科星球原创 作者丨苑晶 编辑丨大兔 百炼智能是一家专注B2B行业的智能营销企业。在过去,该行业经历了大数据、人工智能时代的洗礼。随着行业对数…

jupyter中如何管理内核

1、jupyter notebook如何和已有的虚拟环境关联起来: 如果在电脑中某个conda的虚拟环境中已经安装了jupyter,其他虚拟环境想要作为内核在jupyter中使用,分为两个步骤: 第一步:在没有jupyter的环境中下载ipykernel&…

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

T:what Y:why W:how Y $ sudo apt-get install ros-noetic-gazebo-ros 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版&#xff0…

可信数据库大会,不见不散!

由中国信息通信研究院、中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)、InfoQ 极客传媒联合主办的 2023 可信数据库发展大会将于今日在北京国际会议中心隆重召开。 本届大会以“自主 创新 引领”为主题…

【线段树】P6492 [COCI2010-2011#6] STEP

P6492 [COCI2010-2011#6] STEP - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意&#xff1a; 思路&#xff1a; 要维护区间最长子串&#xff0c;就需要维护左起最长子串和右起最长子串 要维护这两者&#xff0c;就得维护区间两端的种类 Code&#xff1a; #include <…

Spark数据倾斜优化-AQE Skewed Join

AQE处理SkewedJoin的原理 Spark Adaptive Query Execution &#xff0c; 简称 Spark AQE&#xff0c;总体思想是动态优化和修改 stage 的物理执行计划。利用执行结束的上游 stage 的统计信息&#xff08;主要是数据量和记录数&#xff09;&#xff0c;来优化下游 stage 的物理…

记一次自建靶场域渗透过程

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 环境搭建02 外网突破03 权限提升并维持&#xff08;1&#xff09;获取 meterpreter 会话&#xff08;2&#xff09;尝试开启远程桌面&#xff08;3&#xff09;Msf 派生 Cobalt Strike shell&#…

TinyStories: How Small Can Language Models Be and Still Speak Coherent English?

本文是LLM系列的文章之一&#xff0c;针对《TinyStories: How Small Can Language Models Be and Still Speak Coherent English?》的翻译。 TinyStories&#xff1a;语言模型能有多小&#xff0c;还能说连贯的英语&#xff1f; 摘要1 引言2 TinyStories数据集的描述2.1 Tiny…

<td>标签内的文字内容换行显示

修改前&#xff1a; 修改后&#xff1a; 代码&#xff1a; table tr td{ word-WRAP: break-word }

CI-持续集成 — 软件工业“流水线”技术实现

1 概述 持续集成&#xff08;Continuous Integration&#xff09;是一种软件开发实践。在本系列文章的前一章节已经对其背景及理论体系进行了介绍。本小节则承接前面提出的理论构想进行具体的技术实现。 《Google软件测试之道》: "每天&#xff0c;Google都要测试和发…

(模拟) 463. 岛屿的周长 ——【Leetcode每日一题】

❓ 463. 岛屿的周长 难度&#xff1a;简单 给定一个 row x col 的二维网格地图 grid &#xff0c;其中&#xff1a;grid[i][j] 1 表示陆地&#xff0c;grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连&#xff08;对角线方向不相连&#xff09;。整个网格被水完…

前端Vue自定义可自由滚动精美tabs选项卡标签栏标题栏 可设置背景颜色,

前端Vue自定义可自由滚动精美tabs选项卡标签栏标题栏 可设置背景颜色&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13313 效果图如下&#xff1a; # cc-scrollTag #### 使用方法 使用方法 <!-- tabChange: tab选…

Vue指令--v-bind、v-model、v-on

常见指令--v-bind/model/on 指令&#xff1a;HTML标签中带有v-前缀的特殊属性&#xff0c;不同指令具有不同含义。例如&#xff1a;v-if&#xff0c;v-for..常见指令 指令 作用 v-bind为HTML标签绑定属性值&#xff0c;如设置href、css样式等v-model在表单元素上创建双向数据…

【网络原理之二】网络层的IP协议、数据链路层的以太协议和MTU

网络层协议IP协议IP协议格式IP地址IPV4IPV6 IP地址规则-地址管理路由选择 数据链路层协议以太网协议协议格式 MTU(最大传输单元)MTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 开放性问题 网络层协议 IP协议 IP协议格式 4位版本号(version)&#xff1a;指定IP协议的…

12-Vue的diff算法

参考回答&#xff1a; 当组件创建和更新时&#xff0c;vue均会执行内部的update函数&#xff0c;该函数使用render函数生成的虚拟dom树&#xff0c;将新旧两树进行对比&#xff0c;找到差异点&#xff0c;最终更新到真实dom对比差异的过程叫diff&#xff0c;vue在内部通过一个叫…

ChatGPT系统源码,全开源支持二开!

ChatGPT是开发的大语言模型之一&#xff0c;具备多领域知识&#xff0c;并且可以提供个性化、准确和有趣的答案&#xff0c;无论是在娱乐、教育还是工作中&#xff0c;都可以帮助我们解决问题、获取信息和提供建议。 技术架构 使用流行的技术栈PHP8、TypeScript、ThinkPHP6、…

7.3基础概念/文件、文件路径/batch_size,length,total/acc、loss计算/ect

一、 一些基础术语&#xff1a; util是utility的缩写&#xff0c;意思为实用工具。一般用于描述和业务逻辑没有关系的数据处理分析工具。 logger &#xff1a;日志 meter : 记录表 使用下划线 _ 表示不需要的变量是一种常见的开发者的约定&#xff0c;&#xff08;Python 解释…

SpringBoot3 事件和监听器

1. 生命周期监听 场景&#xff1a;监听应用的 生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件&#xff1b; 编写SpringApplicationRunListener 实现类在 META-INF/spring.factories 中配置 org.springframework.boot.SpringA…