服务端技术架构演进之路

服务端技术架构演进之路

目录

服务端技术架构演进之路

0.架构中常见概念及理解

1.单机架构

2.应用数据分离架构

3.应用服务器集群架构

4.读写分离/主从分离架构

5.冷热分离架构

6.垂直分库架构

7.微服务架构

8.容器编排架构


       本文以一个 " 电子商务 " 应用为例,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,方便大家对后续知识做深入学习时有一定的整体视野。

0.架构中常见概念及理解

应用( Application / 系统( System
        为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比:为了完成一项任务,而搭建的由一个人或者一群相互配的人组成的团队。
模块( Module / 组件( Component
        当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。生活例子类比:军队中为了进行某据点的攻克,将人员分为突击小组、爆破小组、掩护小组、通信小组等。
分布式( Distributed
         系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成。
集群( Cluster
         被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。生活例子类比:为了解决军队攻克防守坚固的大城市的作战目标,指挥部将大批炮兵部队集中起来形成一个炮兵打击集群。分布式 vs 集群。通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务目标。
主( Master / 从( Slave
         集群中,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。比如 MySQL 集群中,只有其中一台服务器上数据库允许进行数据的写入(增/删/改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为主库,其他数据库称为从库。
中间件( Middleware
         一类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。生活例子类比:一家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变大,成立一个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁。
容器( Docker
         Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。可以理解为一个集装箱,集装箱里面是每个用户的货物,整体打包
容器编排( K8S
         kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效。可以理解为一个货船,安装集装箱的大小,货物情况合理的来组织集装箱完成整体货物的搬运。
评价指标:
可用性( Availability
         考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可用性= 系统正常提供服务时长 / 一年总时长。这里暗含着一个指标,即如何评价系统提供无法是否正常,我们就不深入了。平时我们常说的 4 个 9 即系统可以提供 99.99% 的可用性,5 个 9 是 99.999% 的可用性,以此类推。我们平时只是用高可用(High Availability HA)这个非量化目标简要表达我们系统的追求。
响应时长( Response Time RT
         指用户完成输入到系统给出用户反应的时长。例如点外卖业务的响应时长 = 拿到外卖的时刻 - 完成点单的时刻。通常我们需要衡量的是最长响应时长、平均响应时长和中位数响应时长。这个指标原则上是越小越好,但很多情况下由于实现的限制,需要根据实际情况具体判断
吞吐( Throughput vs 并发( Concurrent
         吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高量。例如一条 2 车道高速公路,一分钟可以通过 20 辆车,则并发是 2,一分钟的吞吐量是 20。实践中,并发量往往无法直接获取,很多时候都是用极短的时间段(比如 1 秒)的吞吐量做代替。我们平时用高并发(Hight Concurrnet)这个非量化目标简要表达系统的追求。

1.单机架构

        单机架构即应用程序访问量不高,对性能没有很高要求,把web服务器软件(Tomcat)和数据库软件(MySQL)放在一个服务器系统上用户在浏览器中输入www.baidu.com,首先经过DNS 服务将域名解析成IP 地址,随后浏览器访问该IP 对应的应用服务。

2.应用数据分离架构

        随着系统访问量的提升,逐渐逼近了硬件性能的极限,此时我们选择将应用和数据分离的做法,以最小的代价提升系统的承载能力。和之前架构的主要区别在于将数据库服务独立部署在同一个数据中心的其他服务器上,应用服务通过网络访问数据。

3.应用服务器集群架构

 随着用户规模的进一步增大,此时单台应用服务器已经无法满足需求了,我们的应用服务器首先遇到了瓶颈,无法同时处理数万名用户的访问。此时我们有两种方法解决这个问题:

  • 垂直扩展:通过购买性能更优、价格更高的应用服务器来应对更多的流量。
  • 水平扩展:通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。

因为随着硬件性能的提高,它的价格是非线性的,意味着提升两倍性能的硬件可能花费超过四倍的价格,考虑成本,我们选择第二种水平扩展的方案,此时我们又遇到了用户流量该向哪台应用服务器分发的问题。没有什么事情是加一层中间件不能搞定的!此时我们就在用户和应用服务直接加入一个新的组件--负载均衡(Nginx)。常见的流量分发算法:

  1. Round-Robin 轮询算法。 即非常公平地将请求依次分给不同的应用服务器。
  2. Weight-Round-Robin 轮询算法。 为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。
  3. 一致哈希散列算法。 通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务。

4.读写分离/主从分离架构

        随着我们把用户请求分发到不同的应用服务器之后,可以承载更多的用户访问了,但随着用户请求的增多,每个用户进行操作都需要从数据库读写数据,此时数据库就成了整个系统的性能瓶颈,并且我们的数据库不能像应用服务器一样通过负载均衡的方式进行扩展,这样会影响数据一致性。 此时我们就要想一个新的解决办法了:

        我们采用的解决办法是这样的,保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。应用中需要对读写请求做分离处理,所以可以利用一些数据库中间件(MyCat,TDDL),将请求分离的职责托管出去。

5.冷热分离架构

        随着访问量的持续增加我们发现业务中百分之二十的数据占据了总数据读取频率的百分之八十,也就是所谓的“二八定律”,我们把这部分数据称为热点数据,与之对应的是冷数据,针对热数据,我们选择使用memcached作为本地缓存,使用Redis 作为分布式缓存,以此来加快对这部分数据读取的响应时间。但可能会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。

6.垂直分库架构

        在上述我们对数据库的处理方案中写数据只在一台机器上进行,没有办法扩展,随着我们的应用逐渐成为爆款,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照业务,将数据分别存储。比如针对评论数据,可按照商品ID进行hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。即实现分库分表。相关实现有Greenplum,TiDB等。

7.微服务架构

        随着人员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理等业务提成公共服务。相关实现有 Spring Cloud Dubbo等。

8.容器编排架构

         随着业务增长,然后发现系统的资源利用率不高,很多资源用来应对短时高并发,平时又闲置,需要动态扩缩容,还没有办法直接下线服务器,而且开发、测试、生产每套环境都要隔离的环境,运维的工作量变的非常大。容器化技术的出现给这些问题的解决带来了新的思路。

        目前最流行的容器化技术是 Docker,最流行的容器管理服务是 Kubernetes(K8S),应用/服务可以打包为 Docker 镜像,通过 K8S 来动态分发和部署镜像。Docker 镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动 Docker 镜像就可以把服务起起来,使服务的部署和运维变得简单。

        到此便形成了目前公司主流的高可用,高并发系统,以上系统架构引进对每个小的模块进行了单独的细分,在公司中,很可能同一时间遇到上述的好几个问题,此时就要根据实际问题实际解决。

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

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

相关文章

Linux_进程控制

一&#xff1a;进程创建 fork()函数创建新进程 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 进程调用fork&#xff0c;当控制转移到内核中的fork代码后&#xff0c;内核做&#xff1a;…

Qt - 地图相关 —— 1、加载百度在线地图(附源码)

效果图 开始加载地图 1、百度地图开发者网站中注册,获取密钥 2、进入开发文档中 将下图内容保存到本地文件中,文件名为"index.html"文件即可。接着将内容中的“您的密钥”改为刚刚创建应用出来的AK密钥即可。 然后双击打开若在浏览器中正常看到下图右侧地图则说明没…

解压包软件下载:选择合适的解压软件

在日常办公和生活中&#xff0c;解压包软件扮演着至关重要的角色。首先&#xff0c;它极大地便利了文件管理。 随着数字化时代的发展&#xff0c;我们每天都会接触到大量的文件&#xff0c;包括文档、图片、音频、视频等。 这些文件如果不进行有效的管理&#xff0c;很容易变…

element plus的el-select分页

摘要&#xff1a; el-select的数据比较多的时候&#xff0c;必须要分页&#xff0c;处理方案有全部数据回来&#xff0c;或者添加搜索功能&#xff0c;但是就有个问题就是编辑的时候回显问题&#xff0c;必须要保证select的数据有对应的id与name匹配回显&#xff01; <el-fo…

如何在 WinCC Runtime Professional 中自动调整画面分辨率适应窗口的大小?

通过在组态中修改窗口和运行设置&#xff0c;可以使在窗口中显示画面的尺寸自动适应新窗口的尺寸。 问题描述 设备硬件改变&#xff0c;例如更换显示器&#xff0c;会引起 WinCC Runtime Professional 分辨率变化。在WinCC Runtime Professional中分辨率的变化会导致画面显示尺…

安装R和RStudio:开始你的数据分析之旅

数据分析是当今世界中一个非常热门的领域&#xff0c;而R语言是进行数据分析的强大工具之一。R是一种编程语言和软件环境&#xff0c;用于统计计算和图形表示。RStudio是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;它为R语言提供了一个更加友好和高效的工作环境。…

架构设计笔记-19-大数据架构设计理论与实践

知识要点 案例分析 1.Lambda架构优缺点 2.web架构设计 3.web系统架构设计相关技术 论文

基于RPA+AI的网页自动填写机器人 | OPENAIGC开发者大赛高校组优秀作品

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

【项目案例】-音乐播放器-Android前端实现-Java后端实现

精品专题&#xff1a; 01.C语言从不挂科到高绩点 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. SpringBoot详细教程 https://blog.csdn.ne…

【中文版】深度学习 deep learning 花书 pdf下载 2017.09.04

中文版pdf&#xff1a;https://pan.baidu.com/s/1s93yluQGSly5uBDAIVAlNg?pwdx6xy github&#xff1a;https://github.com/exacity/deeplearningbook-chinese 目录 第一章 前言第二章 线性代数第三章 概率与信息论第四章 数值计算第五章 机器学习基础第六章 深度前馈网络第七…

2014年国赛高教杯数学建模A题嫦娥三号软着陆轨道设计与控制策略解题全过程文档及程序

2014年国赛高教杯数学建模 A题 嫦娥三号软着陆轨道设计与控制策略 嫦娥三号于2013年12月2日1时30分成功发射&#xff0c;12月6日抵达月球轨道。嫦娥三号在着陆准备轨道上的运行质量为2.4t&#xff0c;其安装在下部的主减速发动机能够产生1500N到7500N的可调节推力&#xff0c;…

【人工智能AIGC术语100条】Shelly聊AI-重磅发布!

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 01 人工智能&AIGC术语100条全网发布 在…

Android ImageView scaleType使用

目录 一、src设置图片资源 二、scaleType设置图片缩放类型 三、scaleType具体表现 matrix&#xff1a; fitXY: fitStart&#xff1a; fitCenter&#xff1a; fitEnd: Center&#xff1a; centerCrop: centerInside&#xff1a; 控制ImageView和图片的大小保持一致…

【日记】可以不用考了,感觉铁过不了(413 字)

正文 可能是上午睡了一整个上午&#xff0c;中午直接睡不着了。不知道为什么&#xff0c;上午特别困&#xff0c;给主管说了一声&#xff0c;去隔壁休息室里开躺。有业务时又出来&#xff0c;脑袋晕晕的。办完又回去睡觉了。 中午玩了会儿&#xff0c;打过了劫波&#xff0c;开…

Qt消息对话框

问题对话框 对应API [static] QMessageBox::StandardButton QMessageBox::question( QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons StandardButtons(Yes | No), QMessageBox::StandardButton defaultButt…

外包干了5天,技术明显退步

我是一名本科生&#xff0c;自2019年起&#xff0c;我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定&#xff0c;但日复一日的重复性工作让我逐渐陷入了舒适区&#xff0c;失去了前进的动力。两年的时光匆匆流逝&#xff0c;我却在原地踏步&#xff0c;技术没有丝毫…

vscode gitlens收费破解

首先打开vscode 插件栏 搜索GitLens 找到对应插件 这里我已经安装完成&#xff0c;如果未安装的点击install 并且下载指定版本V15.1.0 不然后续操作 不生效 找到对应面板 点击查看GitLens 安装完成后&#xff0c;并不能立即使用 显示一下内容&#xff0c;需要付费 这里很关键&…

Mysql 5.7 安装与卸载(非常详细)

一、环境介绍 操作系统&#xff1a;CentOS 7 MySQL&#xff1a;5.7 二、MySQL卸载 # 查看软件 rpm -qa|grep mysql # 卸载MySQL yum remove -y mysql mysql-libs mysql-common rm -rf /var/lib/mysql rm /etc/my.cnf 继续查看是否还有 MySQL 软件&#xff0c;有的话继续删…

uniapp——h5的控制台调试、h5调试

介绍 小程序在调试的时候可以打开调试模式&#xff0c;可以看到console.log的打印情况。 但是H5运行到手机上没有默认的调试的模式&#xff0c;但是可以人为手动加一个。 如何实现 1、main.js文件 import Vconsole from ‘vconsole’ /** 关闭正式环境打印日志&#xff…

C语言之扫雷小游戏(完整代码版)

说起扫雷游戏&#xff0c;这应该是很多人童年的回忆吧&#xff0c;中小学电脑课最常玩的必有扫雷游戏&#xff0c;那么大家知道它是如何开发出来的吗&#xff0c;扫雷游戏背后的原理是什么呢&#xff1f;今天就让我们一探究竟&#xff01; 扫雷游戏介绍 如下图&#xff0c;简…