高并发挑战?盘点这些架构优化篇技巧,让你的系统焕发新生!

news2024/12/23 20:46:08

高并发挑战?试试这些垂直优化技巧,让你的系统焕发新生!

  • 背景介绍
  • 性能优化
    • 优化方向
    • 架构演进历程
      • 第一阶段:单体架构
        • 弊端
        • 瓶颈
        • Tomcat与数据库独立部署
          • 瓶颈
      • 第二阶段:缓存架构
        • 结合本地缓存和分布式缓存
          • 瓶颈
      • 第三阶段:反向代理实现负载均衡
        • 通过DNS轮询实现机房间的负载均衡
          • DNS轮询的工作原理
            • 缺点和弊端
        • 使用LVS或F5/A10来使多个Nginx负载均衡
        • 瓶颈:反向代理的利与弊
      • 第四阶段:数据库读写分离架构
        • 瓶颈
      • 第五阶段:数据库按业务分库
        • 瓶颈
      • 第六阶段:大应用拆分为小应用
        • 瓶颈
  • 总结归纳

背景介绍

随着业务的不断扩展,高并发问题成为了一个必须面对的挑战。为了应对这一挑战,我们可以从多个方面入手进行优化。我们可以考虑使用负载均衡技术。负载均衡可以将请求分发到多个服务器上,从而分散单个服务器的压力。这样不仅可以提高系统的并发处理能力,还能提高系统的可用性和稳定性。

性能优化

性能优化是一个综合性的过程,涵盖了从整体到细节的多个层面。在整体层面,负载均衡是关键,它能有效地分散请求,保证各节点的负载均衡,从而提高整体性能。此外,中间件的异步化处理也是重要的一环,通过将部分操作异步化,可以减少等待时间,提高系统的响应速度。存储优化同样不可忽视,通过优化数据存储方式、使用高速存储设备等手段,可以显著提升数据读写性能。
在这里插入图片描述

优化方向

在追求高并发的征途上,性能无疑是基石中的基石。它不仅是高并发场景的核心支撑,更是一个涉及面极为广泛的领域,要求我们研发团队投入更多的精力去打磨。个人总结性能优化主要集中在以下这几个方面:
在这里插入图片描述

  • 架构层面
    • 负载均衡:分散请求,确保各节点均衡负载。
    • 中间件异步化:减少等待时间,提高系统响应速度。
    • 存储优化:提升数据读写性能,如优化存储方式或使用高速设备。
  • 可用性优化
    • 服务治理:统一服务标准,规范服务调用。
    • 服务保护:确保服务在遇到问题时能够迅速恢复。
    • 可靠性保障:通过容错、备份等机制提高系统稳定性。
      水平扩展提升
    • 分层架构:按功能和性能需求划分层次,便于扩展和管理。
    • 弹性架构:能够自适应地调整资源,应对突发的高并发需求。
    • 服务拆分:将大服务拆分为小服务,简化逻辑,提高扩展性。

接下来,我将为大家深入剖析并详细介绍我所总结的整体架构的发展与演进历程。在这个过程中,我们将一起探讨架构的演变轨迹,以及各个阶段的关键特性和创新点。希望能够为大家带来更清晰的认识和更深入的理解。

架构演进历程

第一阶段:单体架构

互联网软件架构中的单机架构,是指将系统的所有代码和服务都部署在一台服务器上,整个项目的所有服务都由这台服务器提供。这种架构在系统的访问业务量较小时非常适用,因为它具有部署灵活、容易实现和方便管理的优点。开发者以及运维人员只需要关注这一台服务器即可。
在这里插入图片描述

弊端

单机架构也存在一些明显的弊端。首先,系统的可靠性不高,一旦这台服务器宕机,将会导致整个数据的丢失。其次,单机架构处理数据的能力有限,当业务增长到一定程度时,单机的资源将无法满足业务需求。此外,当数据出现快速增长时,会对服务器的处理能力造成巨大压力,这可能给生产环境以及数据安全带来很大的风险。

瓶颈

随着用户数量的不断增长,Tomcat与数据库之间的资源竞争逐渐凸显,导致单机的性能无法满足业务需求。这一瓶颈限制了系统的高效运行和业务的进一步发展。为了应对这一挑战,我们需要考虑分布式架构或云计算等解决方案,以实现资源的高效利用和系统的可扩展性。通过Tomcat与数据库分开部署,我们可以突破这一瓶颈,为业务提供更为稳定、可靠和高性能的支持。

Tomcat与数据库独立部署

在这里插入图片描述

瓶颈

在用户规模不断扩大的情况下,数据库的并发读写能力成为了限制系统性能的关键因素。为了解决这一问题,我们可以采用缓存机制,利用诸如Redis、Memcached等缓存技术,将热点数据缓存起来,以减轻数据库的读写压力。这种做法可以有效提高数据库的并发读写能力,从而缓解系统性能受限的问题。

第二阶段:缓存架构

随着数据量和用户请求的不断增长,传统的单机架构逐渐暴露出性能瓶颈。为了提升系统的响应速度和处理能力,我们引入了本地缓存和分布式缓存技术。

  • 本地缓存:在单机服务器上,能够迅速响应大部分的常见请求,减少了对后端数据库的访问压力。
  • 分布式缓存:在网络中多个节点上存储和共享数据,实现了数据的横向扩展,大大提高了系统的并发能力。
结合本地缓存和分布式缓存

这种架构既保留了单机架构的简单性和可管理性,又通过缓存技术有效缓解了性能瓶颈。这种融合本地和分布式缓存的单机架构,为系统的持续发展和性能优化奠定了坚实的基础。
在这里插入图片描述

瓶颈

缓存系统成功地承受了绝大多数的访问请求,但随着用户数量的不断增长,单机Tomcat服务器开始面临越来越大的并发压力,其性能表现逐渐变得力不从心,难以应对日益增长的负载需求。这种压力使得Tomcat服务器的响应速度逐渐下降,甚至可能出现服务中断的情况,对整体系统的稳定性和可用性构成威胁。为了解决这一问题,我们需要考虑如何对系统进行优化和升级,以应对未来的挑战。

第三阶段:反向代理实现负载均衡

通过Nginx的反向代理的能力,接收客户端的请求,并将这些请求转发给内部Tomcat的Web服务器。客户端并不直接与目标服务器通信,通过反向代理与目标服务通信。反向代理隐藏了真实的服务器信息,提供了额外的安全性和负载均衡功能。 使用负载均衡技术,将数据库的读写请求均衡分配到多台服务器上,提高系统的整体性能和稳定性。
在这里插入图片描述
常见的实现方案,其实从上面的演进链路中也已经可以基本了解到各个方案适用的发展阶段和应对常见,这里再系统的总结下:
在这里插入图片描述

通过DNS轮询实现机房间的负载均衡

通过DNS轮询实现机房间的负载均衡是一种常见的方法,主要用于将客户端的请求分散到多个服务器或机房上,以提高系统的可用性和性能。以下是对这种方法的详细分析:

DNS轮询的工作原理
  1. 域名解析:当用户尝试访问一个域名时(例如 www.example.com),他们会向DNS服务器发送一个查询请求,以获取与该域名相关联的IP地址。
  2. 返回多个IP地址:如果DNS服务器配置为进行轮询,它会返回与该域名相关联的多个IP地址,而不是仅返回一个。这些IP地址通常代表位于不同服务器或机房上的服务。
  3. 客户端选择:客户端(如用户的浏览器)会从返回的IP地址列表中随机选择一个,并尝试与其建立连接。
  4. 负载均衡:由于DNS查询通常是由客户端发起的,因此这种方法能够在不同的服务器或机房之间实现负载均衡。客户端的每次新请求都有可能连接到不同的服务器,从而分散了流量。
缺点和弊端
  1. 不健康的服务器:如果某个服务器出现故障或性能下降,DNS轮询不会主动将其从轮询列表中移除,这可能导致客户端仍然尝试连接到不健康的服务器。
  2. 会话不连续性:由于每次新的DNS查询都可能返回不同的IP地址,这可能导致用户的会话在不同的服务器之间跳转,从而中断用户体验。
  3. 不适用于所有应用:DNS轮询对于需要持久连接或长时间会话的应用(如在线游戏或实时聊天应用)可能不太适合。

通过DNS轮询实现机房间的负载均衡是一种简单而有效的方法,适用于某些特定的场景和需求。

使用LVS或F5/A10来使多个Nginx负载均衡

对于需要更复杂负载均衡功能的应用,可能需要考虑使用硬件负载均衡器或软件负载均衡解决方案,例如:使用LVS或F5/A10来使多个Nginx负载均衡。如下图所示:
在这里插入图片描述
在这一背景下,我们面临两方面的挑战:一是如何有效应对LVS单机性能的限制,确保在高并发场景下依然能够提供稳定、高效的服务;二是如何优化网络架构,减少用户与服务器之间的距离带来的延迟,提升整体访问速度。

瓶颈:反向代理的利与弊
  1. 随着并发用户数的快速增长,尤其是当数量攀升至数十万级别时,LVS(Linux Virtual Server)作为单机解决方案,不可避免地会遭遇性能瓶颈。即便用户总数达到千万甚至亿级别,分布在不同地区,与服务器机房的距离各异,这种瓶颈效应会愈发显著,导致访问延迟明显不同,用户体验因此受到影响。

  2. 正如硬币有两面,这种增强的处理能力同时也带来了新的挑战。随着并发量的飙升,更多的请求像潮水般涌向数据库,使得原本稳定的单机数据库逐渐显露出其脆弱的一面,最终成为了整个系统性能的瓶颈。

反向代理虽然为应用服务器带来了强大的并发处理能力,但同时也增加了数据库的负载压力

第四阶段:数据库读写分离架构

当第三阶段(反向代理实现负载均衡架构)所带来的数据库需要承受巨大的读写压力,其性能瓶颈逐渐凸显。为了满足不断增长的请求,可能需要考虑数据库的优化、读写分离、分库分表等策略来分散压力。
在这里插入图片描述

瓶颈

随着业务的不断增长,不同业务之间的访问量呈现出显著的差异,这导致不同业务之间存在直接的竞争和资源争夺,形成了明显的瓶颈。为了应对这一挑战,我们需要采取有效的措施来平衡资源分配,确保各个业务能够顺畅运行,同时提高整体业务效率。此外,还可以考虑引入负载均衡技术,将请求分发到多个数据库服务器,从而进一步提升系统的并发处理能力。

第五阶段:数据库按业务分库

为了更好地适应业务的发展和用户规模的扩张,我们必须认识到单机写库在面临大规模并发写入时可能遇到的性能限制。随着用户数据的不断积累,单机的写库处理能力将逐渐逼近其极限,这可能导致处理速度下降、响应时间延长甚至系统崩溃等问题。
在这里插入图片描述
为了确保系统的稳定性和可持续性,我们必须提前规划并采取相应的优化措施。这可能包括引入分布式数据库架构、增加缓存机制、优化写入策略等,以分散写库负载,提高整体性能。通过这些手段,我们可以有效地突破单机写库的瓶颈,确保系统能够持续、高效地为用户提供服务。

瓶颈

用户数量的持续增长会对单机写库带来极大的挑战,进而逐渐触及性能瓶颈。

第六阶段:大应用拆分为小应用

将大型应用拆分为多个小型应用是一种有效的策略,能够带来多方面的优势。通过拆分,我们可以将复杂的系统分解成更易于管理和维护的组成部分。每个小型应用都可以专注于特定的功能或业务领域,从而提高了代码的可读性和可重用性。
在这里插入图片描述
将大型应用拆分为多个小型应用是一种有效的策略,能够带来多方面的优势。通过拆分,我们可以将复杂的系统分解成更易于管理和维护的组成部分。每个小型应用都可以专注于特定的功能或业务领域,从而提高了代码的可读性和可重用性。

瓶颈

在软件开发中,不同应用之间经常存在共用的模块。如果这些模块由各个应用单独管理,那么相同的代码可能会在多个地方存在,这会导致维护和管理上的困难。尤其是当这些共用模块需要升级时,每个应用都需要进行相应的更新,这不仅增加了工作量,还可能引入错误和不一致性。

总结归纳

在系统的演进过程中,集群部署和负载均衡策略始终处于至关重要的地位。随着系统的不断扩展和优化,我们可以清晰地看到它们在整个演进链路上的关键作用:

  1. 当本地存储的性能瓶颈得到有效解决后,新的挑战出现在web容器的单体性能上。为了应对这一挑战,我们采用了nginx反向代理来实现多个web容器之间的负载均衡,确保系统在高并发场景下依然稳定、高效。

  2. 随着数据库和Tomcat的水平扩容,系统的并发处理能力得到了大幅提升。然而,此时单体nginx代理的性能成为了新的瓶颈。为了突破这一限制,我们引入了F5或LVS等高性能负载均衡设备,将多个nginx反向代理服务器进行负载均衡,进一步提升了系统的整体性能。

  3. 随着业务的持续发展,系统逐渐扩展至多个地区和机房。此时,垮地域访问延迟成为了新的瓶颈。为了优化用户体验和减少延迟,我们采用了DNS负载均衡策略,根据用户的地域信息智能选择最近的机房进行访问,从而实现了地域机房间的高效负载均衡。

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

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

相关文章

PHP简约轻型聊天室留言源码

无名轻聊是一款phptxt的轻型聊天室。 无名轻聊特点: 自适应电脑/手机 数据使用txt存放,默认显示近50条聊天记录 采用jqueryajax轮询方式,适合小型聊天环境。 访问地址加?zhi进入管理模式,发送 clear 清空聊天记录。 修改在…

C++ 23 之 构造函数和析构函数

c23构造函数和析构函数.cpp #include <iostream> #include <string> using namespace std;class Person2{ public:// 构造函数 没有返回值&#xff0c;不能写void;函数名和类名一致&#xff1b;可以设置参数&#xff0c;可以函数重载&#xff1b;系统自动调用&…

融资融券是什么?深入解析股市杠杆交易!

01 融资融券是什么&#xff1f; 融资融券&#xff0c;简称两融&#xff0c;又称证券信用交易或保证金交易&#xff0c;是股票市场中的一种交易方式。在这种交易中&#xff0c;投资者可以向证券公司借入资金&#xff08;融资&#xff09;来购买股票&#xff0c;或者借入股票&am…

ATFX汇市:美国5月通胀率回落,降息预期刺激黄金走高

ATFX汇市&#xff1a;据美国劳工部发布的最新数据&#xff0c;美国5月核心CPI年率最新值3.4%&#xff0c;低于前值3.6%&#xff1b;名义CPI年率最新值3.3%&#xff0c;低于前值3.4%。核心CPI年率和名义CPI年率双双下降&#xff0c;超出此前市场预期&#xff08;预期为整体保持不…

ASM字节码插桩实现点击防抖

思路&#xff1a;在点击事件onclick的时候&#xff0c;将view的onclick在给定的时间给拦截掉。以前我们可能都是用一个util来拦截&#xff0c;这样在每个点击事件都得去判断&#xff0c;那么这里就用字节码插桩的形式来实现一下。 ASM的引入 dependencies {implementation gr…

遥感图像地物覆盖分类,数据集制作-分类模型对比-分类保姆级教程

在遥感影像上人工制作分类数据集 1.新建shp文件 地理坐标系保持和影像一致&#xff0c;面类型 2.打开属性表 3.添加字段 这里分类6类&#xff0c;点击添加值添加 添加完毕 开始人工选地物类型&#xff0c;制作数据集 开始标注&#xff0c;标注的时候可以借助谷歌地图…

ISO17025认证是什么?怎么做?

ISO17025认证是一种国际通用的实验室质量管理体系认证&#xff0c;其目标是确保实验室的技术能力、管理水平以及测试结果的可靠性和准确性达到国际认可的标准。该认证由国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;IEC&#xff09;联合发布&#xf…

代码随想录算法训练营第37天|● 56.合并区间● 738.单调递增的数字

合并区间 56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 按照左边界从小到大排序之后&#xff0c;如果 intervals[i][0] < intervals[i - 1][1] 即intervals[i]的左边界 < intervals[i - 1]的右边界&#xff0c;则一定有重叠。&#xff08;本题相邻区间也算重贴…

【JMeter接口测试工具】第二节.JMeter项目实战(下)【实战篇】

文章目录 前言一、接口弱压力测试二、高并发、高频率三、生成图形化报告总结 前言 一、接口弱压力测试 场景举例&#xff1a; 场景1:模拟半小时之内 1000 个用户访问服务器资源&#xff0c;要求平均响应时间在3000ms内&#xff0c;且错误率为0 实现步骤&#xff1a; 步骤一&am…

uniapp 展示地图,并获取当前位置信息(精确位置)

使用uniapp 提供的map标签 <map :keymapIndex class"container" :latitude"latitude" :longitude"longitude" ></map> 页面初始化的时候&#xff0c;获取当前的位置信息 created() {let that thisuni.getLocation({type: gcj02…

第三方软件测评公司可提供哪些测试服务类型?

第三方软件测评公司就是由软件研发方、需求方以外的检测单位承担的测试服务&#xff0c;第三方测评公司担任着一个中间公证人的角色&#xff0c;按照合同、相关标准获得公正的测试结论&#xff0c;客观评估软件产品质量&#xff0c;那么第三方软件测评公司可提供哪些测试服务类…

HTML列表和表格标签

目录 1.列表标签 1.1无序列表 1.2有序列表 1.3定义列表 2. 表格标签、 2.1表格标签的属性 2.2合并单元格 1.列表标签 1.1无序列表 <ul>: [type 属性&#xff1a; disc( 实心圆点 )( 默认 ) 、 circle( 空心圆圈 ) 、 square( 实心方块 )] <li>: 列表中…

服务器无法远程桌面连接,解决服务器进行无法远程桌面连接方法有哪些

当服务器无法建立远程桌面连接时&#xff0c;通常涉及多个层面的排查和修复。下面将详细列举一些专业的解决方法&#xff0c;以应对服务器远程桌面连接问题。 一、基础排查与验证 1. 确认网络连通性&#xff1a; - 使用ping命令检查客户端与服务器之间的网络连通性。 - …

3389端口修改工具,修改3389端口的操作

3389端口作为远程桌面协议&#xff08;RDP&#xff09;的默认端口&#xff0c;常常成为黑客攻击的目标。为了提高系统的安全性&#xff0c;修改3389端口成为一项重要的安全措施。本文将详细介绍如何使用3389端口修改工具进行专业操作&#xff0c;以确保系统的安全稳定。 一、备…

跟《经济学人》学英文:2024年6月8日这期:Part 01

本文是对《经济学人》杂志2024.6.8这期的英文学习。 Narendra Modi looks likely to serve a third term as India’s prime minister, after his Bharatiya Janata Party and its allies won a slim majority. The ruling alliance won 293 seats, compared with the opposi…

ios描述文件.mobileprovision 如何查看包含的设备 udid|IPA查看是否包含设备 UDID|轻松签查看证书是否包含自己设备 UDID

前言 之前蒲公英支持上传证书查看证书有效期和包含设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 - 路灯IT技术博客 - 后厂村路灯 如今蒲公英下架了该功能&#xff0c;已经没有证书检…

环境监控与管理平台

随着全球气候变化的日益严峻&#xff0c;环境监控与管理成为了当代社会不可或缺的重要任务。HiWoo Cloud平台&#xff0c;作为一款环境监控与管理平台&#xff0c;正以其卓越的性能、强大的功能和灵活的部署方式&#xff0c;为各行各业的环保事业提供强有力的技术支撑。 一、H…

Python写UI自动化--playwright(元素定位)

本篇详细分享playwright如何进行打断点、元素定位、填写输入框、点击等操作 目录 一、PyCharm打断点进行调试 二、浏览器开发者模式检查元素 三、通过CSS或XPath进行定位 四、输入框输入文本操作 五、点击操作 总结 一、PyCharm打断点进行调试 如图所示&#xff0c;我们…

高考志愿填报秘籍:大学篇

选择适合自己的大学和专业&#xff0c;对广大考生来说至关重要。从某种程度上来说&#xff0c;决定了考生未来所从事的行业和发展前景。为了帮助广大考生更加科学、合理地填报志愿&#xff0c;选择适合自己的大学和专业&#xff0c;本公众号将推出如何用AI填报高考志愿专栏文章…

vue-element-admin后台集成方案

官网&#xff1a;介绍 | vue-element-adminA magical vue adminhttps://panjiachen.github.io/vue-element-admin-site/zh/guide 1.git环境安装配置及简单操作 1.1git环境安装配置 git软件官网&#xff1a;Git - Downloads (git-scm.com)https://git-scm.com/downloads 下载…