技术架构的发展

技术架构的演进

主要方向:

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.rhkb.cn/news/343928.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】对应用层协议中HTTPS协议的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

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

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

算法学习笔记(7.7)-贪心算法(Dijkstra算法-最短路径问题)

目录 1.最短路径问题 2.Dijkstra算法介绍 3.Dijkstra算法演示 4.Dijkstra算法的代码示例 1.最短路径问题 图论中的一个经典问题,通常是指在一个加权图中找到从一个起始顶点到目标顶点的最短路径。 单源最短路径问题:给定一个加权图和一个起始顶点&…

Python易错点总结

目录 多分支选择结构 嵌套选择 用match模式识别 match与if的对比 案例:闰年判断 三角形的判断 用whlie循环 高斯求和 死循环 用for循环 ​编辑continue​编辑 whlie与else结合 pass 序列 列表(有序) 元组(有序&…

在虚拟机上搭建 Docker Kafka 宿主机器程序无法访问解决方法

1、问题描述 在虚拟机CentOS-7上搭建的Docker Kafka ,docker内部可以创建Topic、可以生产者数据、可以消费数据,而在宿主机开发程序无法消费Docker Kafka的数据。 1.1、运行情况 [dockerlocalhost ~]$ docker ps -a CONTAINER ID IMAGE COMMAND…

区块链的基本原理和优势

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

使用亮数据代理IP爬取PubMed文章链接和邮箱地址

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

Redis页面优化

文章目录 1.Redis页面缓存1.思路分析2.首先记录一下目前访问商品列表页的QPS1.线程组配置10000次请求2.请求配置3.开始压测1.压测第一次 平均QPS为6122.压测第二次 平均QPS为6153.压测第三次 平均QPS为617 3.然后记录一下访问商品详情页的QPS1.线程组配置10000次请求2.请求配置…

【人工智能】第三部分:ChatGPT的应用场景和挑战

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

Pyinstaller安装与使用

一、Pyinstaller简介 PyInstaller将Python应用程序冻结(打包)独立可执行文件中。它可以构建较小的可执行文件,它是完全多平台的,并且使用OS支持来加载动态库,从而确保完全兼容。 二、Pyinstaller安装 1、下载安装 首先安装“pip install pywin32” 其次“pip install …

亿发软件:信息化与数字化,相互交织的科技双引擎

在现代科技发展的浪潮中,信息化和数字化是两个频繁被提及的关键词。尽管它们在很多情况下被视为同义词,但其实两者有着本质的区别和相互影响的关系。究竟是信息化推动了数字化,还是数字化引领了信息化的进程?本文将深入探讨信息化…

C++第二十五弹---从零开始模拟STL中的list(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、函数补充 2、迭代器完善 3、const迭代器 总结 1、函数补充 拷贝构造 思路: 先构造一个头结点,然后将 lt 类中的元…

10.dockerfile自动构建镜像

dockerfile自动构建镜像 类似ansible剧本,大小几kb 手动做镜像:大小几百M 首先创建一个dockerfile的路径,便于在路径下存在多个路径每个路径下都是dockerfile命名的脚本 注释:文件必须为:dockerfile或者Dockerfile …

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)【已开源】

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)提供模型代码和训练好的模型 前言 目前关于使用深度学习对文本自动添加标点符号的研究并不多见,已知的开源项目也较少,而对该领域的详细介绍更是稀缺。然而&#x…

【vscode-快捷键 一键JSON格式化】

网上有很多JSON格式化工具,也有很多好用的在线json格式化工具。但是其实Vscode里面的可以直接格式化JSON,这里分享一个我常用的小插件 Prettify JSON 未格式化的JSON数据 召唤出命令行,输入prettify JSON 即可! ✿✿ヽ(▽)ノ✿

OpenAI模型规范概览

这是OpenAI对外分享的模型规范文档(Model Spec),它定义了OpenAI希望在API接口和ChatGPT(含GPT系列产品)中模型的行为方式,这也是OpenAI超级对齐团队奉行的行为准则,希望能对国内做RLHF的同学有帮…

力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷(区间合并) 文章目录 力扣爆刷第148天之贪心算法五连刷(区间合并)一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…

安卓约束性布局学习

据说这个布局是为了解决各种布局过度前套导致代码复杂的问题的。 我想按照自己想实现的各种效果来逐步学习,那么直接拿微信主页来练手,用约束性布局实现微信首页吧。 先上图 先实现顶部搜索框加号按钮 先实现 在布局中添加一个组件,然后摆放…

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

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