技术架构的发展

news2025/1/21 9:27:36

技术架构的演进

主要方向:

1.提高单位时间内的吞吐量,提高并发度;

2.对应用服务代码进行解耦合,使得开发效率得到提高;

3.运维成本降低;

4.成本降低,如购买云厂商资源,降低资源闲置可能性;

一、八大架构演进

​ 分别是单机架构应用数据分离架构应用服务集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构

二、单机架构

简介:应用服务和数据库服务共用一台服务器,即所有的服务都部署在一个服务器上

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

架构工作原理:以电子商城为例,可以看到通过应用(划分了了很多个模块)和数据库在单个服务器协作完成业务运行;

架构的优缺点:优点:部署简单并且成本低;缺点:存在严重的性能瓶颈;另外数据建库和应用服务在互相竞争资源;

在这里插入图片描述

三、应用数据分离架构

简介:应用服务和数据库服务使用不同的服务器;

出现原因:单机架构存在严重的资源竞争;

架构工作原理:应用服务和数据库服务在不同的服务器通过网络进行协作;

架构的优缺点:优点:数据库单独隔离,不会因为应用导致数据库破坏;缺点:还是无法应对海量数据;

​ 解决方式:数据库服务和应用服务部署在不同的服务器上;

在这里插入图片描述

四、应用服务集群架构

简介:引入了负载均衡,应用集群方式进行运作;

出现原因:单个应用不足以支持海量的高并发请求;

架构工作原理:应用服务不在是一个,而是变成了多个,即将多个应用服务部署在多个服务器上,可以通过负载均衡实现海量的高并发;典型的负载均衡组件有Nginx(上限是50000并发),LVS支持几十万的并发,F5支持百万至千万级的并发,前面两种是软件,最后一种是一种硬件设备;DNS可以抗住上亿级的并发;最终通过不断横向扩展和负载均衡分层,实现上亿级别的并发;

​ 当DNS也扛不住时,请求达到百亿级别时,可以本地配置IP地址,不通过访问DNS来判断IP地址,提高并发;一般说来,使用了三层负载均衡;第一层是DNS,通过多个IP的返回实现;第二层是LVS/F5实现;第三层是Nginx实现;

架构的优缺点:优点:服务高可用,多个应用服务,防止一个服务挂掉,使得整个服务站点无法使用;应用服务已经具备一定的高并发,不经过数据库可以支持海量请求的快速响应;应用服务有一定的扩展能力,需要使用一定的中间件才能实现快速扩展;缺点:数据库成为了性能瓶颈,无法应对海量数据,单个数据库服务,没有高可用,运维工作增多,需要研发运维中间件进行快速地部署,硬件成本也增加了;

​ 解决方式:搭建应用服务集群,使用横向扩展与负载均衡;

在这里插入图片描述

五、读写分离/主从分离架构

简介:将数据库的读写操作分散到不同的数据库服务节点上,搭建主从集群,主机负载写,从机负责读,同时还需要进行同步;

出现原因:随着架构的发展,数据库已经成为了高并发性能瓶颈;

架构工作原理:在应用集群架构的基础上,对数据库服务实现集群化,一个主机负责写,多个从机负责读,主机完成写之后同步给从机,应用与数据库中间还需要一层判断读写逻辑,常用的组件有mycat、tddl等;

架构的优缺点:优点:数据库的读取性能提高;由于读操作被其他服务器承担,间接地提高了写性能;多个从库,支持高可用;缺点:热点数据频繁读取会导致数据库负载较高;存在一定的同步延迟;

​ 解决方式:对数据库服务使用读写分离与集群化,提高了并发度;

在这里插入图片描述

六、冷热分离架构

简介:引入缓存,实现冷热分离,将热点数据放入到缓存中,冷数据放入到数据库中,实现数据库的快速响应;

出现原因:之前的架构已经可以保证一定程度的并发,但是支持的并发量还是不够,还是会有海量的数据请求导致数据库负载过高,降低了站点响应速度,如秒杀产品的场景;

架构工作原理:由于秒杀场景会同一时间有大量的人员使用,这个数据请求就是热点数据,需要在缓存服务器和存储服务器中都进行写入,但是会存在不都成功的请款给,需要使用代码保证都成功;当进行秒杀查询时,会直接查询缓存服务器,不经过存储服务器直接返回响应,其他冷数据查询时,就会先查询缓存服务器,判断是否存在,不在就查询存储服务器,然后返回响应;常见的缓存组件:Redis内存级数据库;缓存服务器也是集群化的;

架构的优缺点:优点:降低了数据库的访问请求,提高性能,数据都是存放在内存中;缺点:产生了缓存一致性、缓存击穿、缓存失效、缓存雪崩等问题;数据库中所保存的数据量过大,导致查询的速度过慢;

​ 解决方式:引入缓存数据库用来存放热点数据,不再需要和数据库进行交互,间接地提高数据库的并发性能;

在这里插入图片描述

七、垂直分库架构/分布式数据库架构

简介:数据库的数据被拆分,数据分布式存储,分布式处理,分布式查询,换句话说不再是一个服务器处理一个请求,而是多个服务器处理一个请求;

​ 分库分表:由于数据存储量过大,先是将负责业务数据库垂直拆分成简单业务数据库,然后分配到多个服务器中,随着数据不断增加,将简单数据库水平拆分到多个服务器中,每个数据库中存放部分表结构;然后发现表太大,此时进行分表,使用哈希运算进行拆分多个子表,便于后续数据整合;但是执行语句的时候会导致需要发送多个语句的然后将数据进行合并的问题,此时就需要设计中间件负责打包完成这个过程;

​ 分布式数据库:分库分表与打包执行中间件的设计实现分布式数据库;

出现原因:单个库存放在单个服务器中,大量的数据存储,减少了索引、IO等效率;

架构工作原理:在前面架构的基础上,添加多个存储集群,存放一个库中的多个表结构,每个集群都是主从集群;还需要在多个集群之上添加中间件,负责多个sql的执行和数据的合并打包,然后就实现了分布式数据库;常见的分布式数据库:Greenplum、TiDB、Postgresql XC、HAWQ 等,商用的如南大通用的 GBase、 睿帆科技的雪球 DB、华为的 LibrA 等

架构的优缺点:优点:数据库吞吐量大幅提升;缺点:产生分布式相关的跨库问题;由于应用代码整体耦合在一起,每次修改,都要将整个站点暂停,重新进行部署发布;

​ 解决方式:数据库服务和应用服务部署在不同的服务器上;

模拟实现分布式数据库:

在这里插入图片描述

垂直分库架构:

在这里插入图片描述

八、微服务架构

简介:按照业务板块来划分应用代码,使得板块之间做到独立升级迭代,便于上层开发出来新应用服务来复用微服务;

出现原因:扩展性差(添加新功能,每次都要重新构建整个系统)、持续开发困难( 一个小的代码改动也需要重新部署整个应用)、不可靠(一个功能失效,导致整个系统失效)、不灵活(不支持多个语言进行开发不同功能)、可维护性差(代码耦合度高,修改起来不方便);

架构工作原理:在先前架构的基础上,将应用服务的开发转变为微服务的开发和使用微服务构建大型服务(起其实是大型服务调用微服务),需要考虑到微服务之间的协作和与缓存服务器集群,分布式存储服务器集群的交互;常见的微服务框架:Spring Cloud、Dubbo;

架构的优缺点:优点:开发效率高;支持多语言开发,因为http、rpc等协议支持跨语言;缺点:运维难度提高(运维量提高,复杂度提高),如某些微服务不使用了,需要停止服务,可以使用一些自动化运维的工具提高运维效率,还有一个服务器上部署多个微服务要解决环境冲突问题,此外对于动态扩缩容场景,需要在新增的服务上部署环境;使用的资源增多,多个微服务创建的进程增加;排查故障困难;

​ 解决方式:开发微服务模块,支持上层大型应用服务的开发;

在这里插入图片描述

九、容器编排架构

简介:借助容器化技术(docker)将应用和服务打包成一个镜像,然后使用容器编排工具(k8s)来动态分发和部署镜像服务,以容器化方式运行;

出现原因:运维成本较高;

架构工作原理:在原有架构的基础上,创建多个k8s集群,内部使用了不同的容器部署在不同的服务器上,不同的k8s集群分层通过通信来实现一个大型服务的实现;

架构的优缺点:优点:部署运维简单快速;隔离性好,多个容器不会相互影响;滚动性好,可以形成不同版本的部署方案,实现版本替换;缺点:技术栈增多,要求高;当大促来时,需要大量的服务器设备,结束时就会造成资源闲置,所以可以使用购买云服务器的方式,防止造成资源闲置;

​ 解决方式:容器化技术docker、容器编排技术k8s,使用云厂商的技术,解决资源浪费问题;

在这里插入图片描述

十、互联网实战架构

在这里插入图片描述

缓存数据:内存中存放的热点数据;

对象存储:负责存储非层级结构的数据;

基础数据:存放层级结构数据,如文本文件;

ES集群:一种优秀的搜索引擎集群;

MongoDB集群:评论和描述都是大段文字,使用文档数据库存储比较方便;

Hadoop集群:对于数据量大且数据有价值的数据使用大数据分析;

​ 由于不同的数据特征,需要调用不同的数据集群,会使用到大量的API,过程过于繁琐,此时就需要创建一个中间件,抽象出来一个统一数据服务层,屏蔽底层的差异,来快速地访问对应数据集群;

​ 1.最后两层统一叫做数据层;2.向上使用k8s搭建不同的服务部署管理系统构成服务层,服务对外开放需要网关进行管理,所以每一个服务集群都可以配一个API网关进行管理;3.再向上使用负载均衡技术进行请求和响应的控制分发;4.再向上就是防火墙保证后端数据出入安全;5.之后就是DNS层提供域名转IP和负载均衡;6.最后一层就是用户使用的客户端/浏览器;

​ 之后加入AI就需要在各层使用新的技术;

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

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

相关文章

计算机SCI期刊,IF=9.657,1区TOP,2周内出版

一、期刊名称 Neural Networks 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:7.8 中科院分区:1区TOP 三、期刊征稿范围 神经网络提供了一个论坛,用于发展和培养对神经网络的各个方面感兴趣的学者…

Scala 练习一 将Mysql表数据导入HBase

Scala 练习一 将Mysql表数据导入HBase 续第一篇:Java代码将Mysql表数据导入HBase表 源码仓库地址:https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍二、依赖三、测试结果四、源码 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化…

项目-基于LangChain的ChatPDF系统

问答系统需求文档 一、项目概述 本项目旨在开发一个能够上传 PDF 文件,并基于 PDF 内容进行问答互动的系统。用户可以上传 PDF 文件,系统将解析 PDF 内容,并允许用户通过对话框进行问答互动,获取有关 PDF 文件内容的信息。 二、…

java自动化测试之03-08java基础之条件判断

java基础之条件判断 java中表示判断语句有三个,分别为if语句、switch语句和三元运算 if语句 1.1 只含有一个if if(布尔表达式){ //如果布尔表达式为true将执行的语句 } 代码举例如下 public class ConditionStudy {public static void main(String[] args) …

Java现在还适合入门吗?

计算机技术在当今的社会,已经变得越来越热,充斥着我们生活的方方面面。人们的工作或是休闲,离不开互联网和电脑,这既受益于各类软件的诞生,也与时下的技术息息相关。Java作为编程界赫赫有名的语言,在最近几…

Java——JVM

前言 JVM.即Java虚拟机.用来解释执行Java字节码. 一、JVM中的内存区域划分 JVM其实也是一个进程,进程运行过程中,要从操作系统这里申请一些资源(内存就是其中的典型资源) 这些内存空间,就支撑了后续Java程序的执行. JVM从系统中申请了一大块内存,这一大块内存给Java程序使…

数据结构笔记2 栈和队列

为什么在循环队列中,判断队满的条件是(Q.rear1)模maxqsize? 取模运算(%)在循环队列中起到关键作用,主要是因为它能确保索引值在数组的有效范围内循环。具体来说,取模运算有以下几个重要作用&am…

Linux进程间通信之System V

目录 认识system V: system V共享内存: 共享内存的基本原理: 共享内存的数据结构: 共享内存的建立与释放: 共享内存的建立: 共享内存的释放: 共享内存的关联: 共享内存的去关联…

驱动开发之 input 子系统

1.input 子系统介绍 input 就是输入的意思,input 子系统就是管理输入的子系统,和 pinctrl、gpio 子系统 一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等 等这些都属于输入设备,不同的输入…

区块链的基本原理和优势

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

数据结构_手撕八大排序(计数,快排,归并,堆排,希尔,选择,插入,冒泡)

✨✨所属专栏:数据结构✨✨ ✨✨作者主页:嶔某✨✨ 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序…

Docker:认识镜像仓库及其命令

文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…

[线程与网络] 网络编程与通信原理(六):深入理解应用层http与https协议(网络编程与通信原理完结)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

【java】速度搭建一个springboot项目

使用软件:IDEA,mysql 使用框架:springboot mybatis-plus druid 坑点 使用IDEA搭建一个springboot项目的时候,需要考虑一下IDEA版本支持的JDK版本以及maven版本。否则再构建项目,引入pom的时候就会报错。 需要检查…

C++全栈聊天项目(21) 滚动聊天布局设计

滚动聊天布局设计 我们的聊天布局如下图 最外层的是一个chatview(黑色), chatview内部在添加一个MainLayout(蓝色),MainLayout内部添加一个scrollarea(红色),scrollarea内部包含一个widget&…

Linux shell编程学习笔记57:lshw命令 获取cpu设备信息

0 前言 在Linux中,获取cpu信息的命令很多,除了我们已经研究的 cat /proc/cpuinfo、lscpu、nproc、hwinfo --cpu 命令,还有 lshw命令。 1 lshw命令的功能 lshw命令源自英文list hardware,即列出系统的硬件信息,这些硬…

UI 自动化分布式测试 -Docker Selenium Grid

分布式测试Selenium Grid 对于大型项目或者有大量测试用例的项目,单机的测试环境往往无法快速完成所有测试用例的执行,此时自动化测试执行效率将会成为最大的瓶颈,Selenium Grid 可以通过多机的分布式架构允许测试用例并行运行,大大缩短了测试时间。 Selenium Grid 提供了多…

限时限量!6.18云服务器大促盘点,错过一次,再等一年!

随着云计算技术的飞速发展,云服务器已成为企业和个人构建和扩展在线业务的首选平台。特别是在大型促销活动如618年中大促期间,云服务提供商纷纷推出极具吸引力的优惠,以降低用户上云的门槛。以下是对当前市场上几个主流云服务提供商的优惠活动…

JavaScript入门宝典:核心知识全攻略(下)

文章目录 前言一、获取标签元素二、操作标签元素属性1. 属性的操作2. innerHTML 三、数组及操作方法1. 数组的定义2. 数组的操作 四、循环语句五、字符串拼接六、定时器1. 定时器的使用3. 清除定时器 七、ajax1. ajax的介绍2. ajax的使用 前言 JavaScript是前端开发不可或缺的技…

C++| 一维线性插值、imadjust函数

前言:最近要从Matlab代码改C代码,不能直接用Matlab生成的C代码,因为需要嵌入到已有项目中。Matlab本身有很多很方便的数学公式,但是在C里没有相关的库的话,需要自己实现。 一维线性插值、imadjust函数 一维线性插值原理…