千万级流量冲击下,如何保证极致性能

news2024/10/7 12:17:15

1 简要介绍

随着互联网的快速发展,网络应用的流量规模不断攀升,特别是在电商大促、明星直播、重大赛事、头条热搜等热点事件中,秒级100w请求成为了常态。在这样的流量冲击下,如何确保系统稳定、高效地处理每一个请求,为用户提供极致的体验,成为了技术团队面临的重要挑战。本文将深入探讨在超高流量下如何保证系统的极致性能。

2 架构建设方案

在解决千万级流量下的流量冲击问题时,我们需要综合运用多种技术手段,从系统架构、负载均衡、并发控制、缓存策略、数据库优化、限流等多个方面入手。

2.1 系统架构优化

系统架构是支撑高并发的基础。在应对千万级流量时,我们需要采用分布式、微服务化的架构,将业务拆分成多个独立的服务,每个服务负责处理特定的业务逻辑。通过水平扩展和垂直扩展相结合的方式,提升系统的整体处理能力。微服务架构可以参考作者的这个系列的文章《微服务系列》以下是微服务架构简图:

image

2.2. 负载均衡技术

负载均衡是实现高并发的关键技术之一。通过负载均衡器,我们可以将请求分发到多个服务器上,实现请求的均衡处理。常见的负载均衡策略包括轮询、加权轮询、最少连接数等。在实际应用中,我们可以根据业务需求和服务器性能选择合适的负载均衡策略,来协调多实例服务对每个分片流量分配的需求。负载均衡可以参考作者的这篇文章《图解常用负载均衡策略》。以下是负载均衡器在架构中的位置和职能。

image

2.3 异步处理与并发控制

通过引入异步处理机制,我们可以将耗时操作放在后台执行,避免阻塞主线程,提高系统的响应速度。同时,合理的并发控制也是必不可少的,我们可以利用线程池、信号量等技术手段来控制并发量,避免系统过载。

2.3.1 异步处理

互联网场景中经常使用消息中间件进行 异步处理\削峰 等操作,来缓解系统的压力。

1. 异步处理: 

处理一项任务的时候,有3个步骤A、B、C,需要先完成A操作, 然后做B、C 操作。任务执行成功与否强依赖A的结果,但不依赖B、C 的结果。如果我们使用串行的执行方式,那处理任务的周期就会变长,系统的整体吞吐能力也会降低(在同一个系统中做异步其实也是比较大的开销),所以使用消息队列是比较好的办法。

登录操作就是典型的场景:A:执行登录并得到结果、B:记录登录日志、C:将用户信息和Token写入缓存。 执行完A就可以从登录页跳到首页了,B、C让服务慢慢去消化,不阻塞当前操作。

image

2. 削峰:

 将峰值期间的操作削减,比如A同学的整个操作流程包含12个步骤,后续的11个步骤是不需要强关注结果的数据,可以放在消息队列中。

2.3.2 并发控制

可以通过一些办法来进行并发控制,如无效请求过滤和加锁等,避免大量的请求把系统冲垮。

1. Web端/客户端的超预期请求过滤

大部分的用户是没有耐性的,当你的系统因为吞吐过载迟钝(响应延迟)的时候,用户可能会反复的点击按钮、刷新页面来重启发送请求。这样会对原本就瓶颈的系统造成更大的伤害。最好的办法就是服务端响应回来或超时之前,对用户的重复请求无效。如:限制用户在5秒之内只能提交一次请求,避免系统过载。

2. 系统入口处(如网关接入层)的超预期请求过滤

大部分操作是需要有幂等性保障的。同一个用户对一个服务批量且持续的请求必然是不正常的,要么是程序错误导致的循环请求,要么是攻击性行为。可以根据用户Id或者用户的登录Token来识别用户,避免单位时间内(比如1s)的过量调用(比如1000次),通过这种限制来达到控制无效流量的目的。

3. 加锁进行并发控制

  • 系统程序级别的锁(如ReentrantLock),保持线程池的安全性,避免系统计算量过载参考作者这篇:Java核心知识体系8:Java如何保证线程安全性

  • 缓存层上的分布式锁,进行流量的有效控制参考作者这篇:Redis系列13:分布式锁实现

  • 数据库锁,最底层存储的数据一致性、有效性保障参考作者这篇:数据库系列:InnoDB下实现高并发控制

这些都是实现并发控制的关键机制。通过使用锁,我们可以确保在并发环境中对共享资源的访问是同步的,从而避免数据不一致或其他并发过载的问题。

2.4 缓存策略

缓存是提升系统性能的重要手段。通过缓存热点数据,我们可以减少对数据库的访问次数,降低数据库的压力。同时,缓存还可以提高数据的访问速度,提升用户体验。在实际应用中,我们可以采用Redis等内存数据库作为缓存层,通过合理的缓存策略实现数据的快速访问。

Redis官方站点中,有对Redis性能做了比较详细的压测,可以参考官方这一篇 How fast is Redis?,在较高的配置基准下(比如 8C 16G +),在连接数为0~10000的时候,最高QPS可达到120000。Redis以超过60000个连接为基准,仍然能够在这些条件下维持50000个q/s,体现了超高的性能。下图中横轴是连接数,纵轴是QPS。

image

下面这张图为data size 与整体吞吐量之间的趋向关系:

image

缓存可以扩展阅读作者的这个系列的文章:★ Redis24篇集合

2.5 数据库优化

数据库是系统的核心组件之一,其性能直接影响到整个系统的性能。在应对高并发请求时,我们需要对数据库进行优化,包括优化SQL语句、建立合适的索引、分库分表、数据单元化设计等。通过数据库优化,我们可以提高数据的查询速度,减少数据库的负载,从而提升整个系统的性能。

image

数据库的优化可以扩展阅读作者这两篇文章:MySQL索引优化总结(综合版)、MySQL分库分表

2.6 流量限流

在流量高峰时段,我们可以通过限流技术来控制请求的速率,避免系统过载。限流的目标是在系统压力过大时拒绝部分请求,并且failover到固定的响应信息,保护系统的稳定性。以令牌桶原理(定速流入)为例,每秒钟只提供N个令牌,每个请求携带一个令牌标识前行,用完即限行。如下图:

image

限流熔断可以扩展阅读笔者的这篇文章:微服务治理之限流、熔断

3 业务场景说明

在实际业务中,高并发的场景多种多样。以电商平台为例,在大促期间,大量的用户会同时访问平台,进行商品浏览、下单、支付等操作。这些操作都会产生大量的并发请求,对系统的性能提出极高的要求。此外,社交应用、在线游戏等也面临着类似的挑战。

4 总结

在千万级流量下保证并发请求的极致性能是一个复杂而挑战性的问题。通过综合运用系统架构优化、负载均衡技术、缓存策略、数据库优化等多种技术手段,我们可以有效地提升系统的处理能力和响应速度。同时,我们还需要根据具体的业务场景和性能需求进行针对性的优化和调整,以实现最佳的性能表现。在未来的发展中,随着技术的不断进步和业务的不断扩展,我们还将面临更多的挑战和机遇。只有不断地学习和探索新的技术手段和方法,我们才能更好地应对这些挑战,为用户提供更加优质、高效的服务体验。

文章转载自:Hello-Brand

原文链接:https://www.cnblogs.com/wzh2010/p/18031212

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

ip地址公和内有什么区别

在数字化世界中,IP地址扮演着至关重要的角色。它不仅是网络设备的身份标识,更是信息传输的桥梁。然而,并非所有IP地址都拥有相同的属性和功能。公有IP地址和私有IP地址,作为IP地址的两大类别,它们存在着显著的差异。虎…

【网络编程】基于TCP的服务器端/客户端

TCP是Transmission Control Protocol(传输控制协议)简写。因为TCP套接字是面向连接的,因此又称为基于流的套接字。 把协议分为多个层次,设计更容易,通过标准化操作设计开放式系统 网络层介绍 链路层 链路层是物理连接领域标准化的结果&…

车牌号识别(低级版)

import cv2 from matplotlib import pyplot as plt import os import numpy as np from paddleocr import PaddleOCR, draw_ocr from PIL import Image, ImageDraw, ImageFont# 利用paddelOCR进行文字扫描,并输出结果 def text_scan(img_path):ocr PaddleOCR(use_a…

自养号测评避坑指南

朋友们,今天来聊一聊关于自养号测评的一些重要知识点——自养号测评避坑指南。 在跨境电商领域中,自养号测评是每个卖家必需要会的技术。它能帮助商家提升店铺的权重和产品排名,从而带来曝光率和销售量。 但这个过程里也有不少坑&#xff0…

失眠焦虑的解脱之道:找回内心的平静

🍃 在这个快节奏的时代,失眠与焦虑似乎成了许多人的隐形敌人。每当夜幕降临,它们便悄悄潜入心底,扰乱我们的思绪,让宁静的夜晚变得无比漫长。然而,生活总有办法让我们找回内心的平静,只需稍作调…

OLED柔性屏的显示效果如何

OLED柔性屏的显示效果非常出色,具有多方面的优势。以下是关于OLED柔性屏显示效果的详细分析: 色彩表现:OLED柔性屏的每个像素都可以独立发光,因此色彩准确性极高。黑色呈现得非常深邃,而亮部则展现出鲜明而生动的细节。…

2024网络安全学习路线 非常详细 推荐学习

关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊,学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间,光语言都有几门,有些人会倒在学习 linux 系统及命令的路上&#…

【云原生】Kubernetes----Rancher助力Kubernetes监控

目录 引言 一、为什么需要监控K8s集群? 二、Rancher监控K8s集群的优势 三、Rancher和k8s的区别 四、Rancher 安装及配置 (一)安装rancher 1.下载镜像 2.运行容器 3.登录Rancher平台 4.添加集群 5.查看集群 6.Rancher 部署监控系统…

私域引流宝PHP源码 以及搭建教程

私域引流宝PHP源码 以及搭建教程

uni-date-picker 禁用日期功能

在uni-datetime-picker组件中 calendar.vue <template><view class"uni-calendar" mouseleave"leaveCale"><view v-if"!insert && show" class"uni-calendar__mask" :class"{uni-calendar--mask-show:an…

Linux服务器快速下载GoogleDriver小技巧——利用gdown工具

Linux服务器快速下载GoogleDriver小技巧——利用gdown工具 1. 安装gdown pip install gdown安装好后如果在终端输入gdown显示如下错误&#xff1a;gdown: command not found&#xff0c;则说明gdown默认安装的位置需要软链接一下&#xff0c;执行以下命令&#xff1a; sudo …

坑记(MySQL之delete操作)

背景知识 我们知道MySQL有两种删除操作&#xff1a;delete和truncate。 二者之间是否一样&#xff0c;且看以下内容&#xff1a; 操作名称操作简介deleteDML中的一种&#xff0c;操作对象是记录&#xff0c;即table中的一行&#xff0c;可恢复&#xff0c;速度慢truncateDDL中…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露&#xff1f;首先要了解员工可以通过哪些方式将源代码传输出去&#xff01; 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘或U盘的winPE启动&#xff0c;甚…

execl拷贝图片

1&#xff1a;拷贝图片 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>int main(int argc, const char *argv[]) {//在子进程拥有和父进程一样的拷贝文件(确保拷贝文件为空)int fp_…

SSC30KD SigmaStar 摄像头主控芯片

SSC30KD SigmaStar 摄像头主控芯片

# RocketMQ 实战:模拟电商网站场景综合案例(十一)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;十一&#xff09; 一、RocketMQ 实战&#xff1a;模拟电商网站场景综合案例-- web 端项目开发 1、在 shop-order-web 工程模块中&#xff0c;创建 Controller 类 OrderControllre.java /*** shop\shop-order…

Threejs-09、贴图的加载与环境遮蔽强度设置

1、创建文理加载器 let textureLoader new THREE.TextureLoader();2、加载贴图 // 加载文理 let texture textureLoader.load("./img/image.png") // 加载ao贴图 let aoMap textureLoader.load("./img/image.png");3、创建一个平面 let planeGeomet…

这总商务会议图怎么绘制?一行代码搞定...

今天这篇推文小编给大家介绍一个一直想绘制的图表-议会图(parliament diagrams),当然这也是柱形图系列变形的一种。绘制这种图表也是超级简单的&#xff0c;只需使用R-ggpol包进行绘制即可&#xff0c;当然&#xff0c;改包还提供其他优秀的绘图函数&#xff0c;下面就一起来看…

Final Cut Pro:剪辑之巅,创意无界

Final Cut Pro是一款由Apple推出的专业视频剪辑软件&#xff0c;以其强大的功能和卓越的性能&#xff0c;成为众多影视制作人员、广告设计师和视频编辑师的首选工具。 Final Cut Pro获取 Final Cut Pro提供了丰富的剪辑功能&#xff0c;包括多轨道编辑、精确剪辑控制、实时预览…

AI绘画工具介绍(清晰图例)

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;绘画艺术界也不例外。近年来&#xff0c;AI在绘画领域的应用日益广泛&#xff0c;展现出了令人瞩目的发展趋势。通过深度学习和图像处理技术&#xff…