0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

高并发系统的艺术:如何在流量洪峰中游刃有余

京东云 来源:jf_75140285 作者:jf_75140285 2024-08-05 13:43 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

我们常说的三高,高并发、高可用、高性能,这些技术是构建现代互联网应用程序所必需的。对于京东618备战来说,所有的中台系统服务,无疑都是围绕着三高来展开的。而对于京东庞大的客户群体,高并发的要求尤为重要。用户对在线服务的需求和期望不断提高,系统的并发处理能力成为衡量其性能和用户体验的关键指标之一。高并发系统不仅仅是大型互联网企业的专利,对于任何希望在市场中占据一席之地的公司来说,能够处理大量并发请求的能力都是至关重要的。

高并发系统的设计和实现是一个复杂且多层次的过程,涉及到硬件资源的合理利用、系统架构的精心设计、并发控制技术的应用以及性能调优等多个方面。无论是电商平台在大促期间应对突发流量,还是社交媒体在热点事件发生时的流量激增,抑或是金融系统在交易高峰期的平稳运行,都需要一个高效、稳定、可扩展的高并发系统作为支撑。

接下来我通过一张思维导图展开我的分享,帮大家梳理一下一个高并发系统所需要考虑的技术点。

wKgZomawZnKANlnmAAj89Sh41Aw003.png

单机维度

在单机维度上, 我们一般分为硬件维度和代码维度两个方向考虑。硬件维度比较简单,就是提升单机的硬件性能和网络带宽。而代码维度,则是在高并发系统架构设计时,最容易被大家忽视的,尤其是大量的脱离一线研发并进化成PPT架构师的今天,单机维度基本不在考量范围。

但不积跬步无以至千里,有的时候单机接口的的性能优化,会带来很高的经济成本价值。在代码维度,我这里重点介绍一种情况,关于多线程和异步方法。

a. 多线程和异步方法的误区

关于多线程和异步方法的概念,我再面试候选人的时候,发现很多人对此都有误区。在此,我先详细的一下他俩的概念:

多线程:多线程是指在一个进程中可以同时运行多个线程,每个线程执行不同的任务。Java通过java.lang.Thread类和java.util.concurrent包提供了多线程编程的支持。多线程的主要目的是为了充分利用CPU资源,提高程序的执行效率。

异步方法:异步方法是指在调用某个方法时,不需要等待该方法执行完成即可继续执行后续代码。Java通过CompletableFuture和异步回调机制提供了异步编程的支持。异步方法的主要目的是为了提高系统的响应能力和资源利用率。

b. 多线程能够解决高并发场景么

当大家了解了多线程和异步方法的概念后,那么我们就可以认真思考一下,多线程一定能提升系统的并发能力么?

我的结论是:多线程可以提升部分服务的并发能力,但并不能显著提高性能。

首先我们先了解,Tomcat的Servlet机制是基于多线程实现的,而如果你在单次请求中在此开辟线程池进行多线程处理,在一定的并发情况下,你可能只是改善了单次请求的TP99,但无法有效提升系统的并发能力。因为多线程的性能提升与CPU核心数密切相关。如果系统只有一个CPU核心,那么多个线程只能在该核心上轮流执行,无法实现真正的并行处理。而我们的宿主机一般也就是8C或者16C,在面单机上千的QPS请求时,多线程只会增加CPU上下文切换的负担。

举个简单并且常见的例子,批量下单接口。我们常见的做法就是在批量下单接口中开辟线程池,然后建个多个下单在线程池中并行处理。这样做的结果是,在请求量低的情况下,效果还是可以的,单次请求的QPS也会很低,但如果单机面临每秒上千次的下单请求,这种实现方式就会出现问题。最直观的观察,可以通过TP99的监控曲线发现,就是请求量跟TP99呈现严重的正相关性。

而真正有效的提升下单接口的并发能力,是通过异步方式实现。但异步方式又会增加系统的设计复杂度,比如下单失败,异步回调设计和数据一致性设计等等,也在考量范围之内,这里就不详细展开说明。

c. 小结

多线程和异步方法是Java开发中两种重要的并发处理技术,它们在提高系统性能和响应能力方面各有优势。多线程通过并行处理任务,充分利用CPU资源,适用于CPU密集型任务和需要并行处理的场景。异步方法通过非阻塞I/O操作和异步回调机制,提高系统的响应能力和资源利用率,适用于I/O密集型任务和事件驱动架构。

此外当然还有大家经常乐于讨论的JVM调优问题,基于JVM调优,包括垃圾回收器的选择,参数的合理优化,当然,还有一点,其实大家平时关注不多,就是采用更高版本的JDK和更新的Spring框架,因为高版本的框架会对性能本身有不错的优化。关于这点,我在另一篇文章中有重点介绍:性能加速包: SpringBoot 2.7&JDK 17,你敢尝一尝吗

多机维度

在多机维度考虑系统的高并发性能,应该是大家最长能够想到的场景了,也是架构师们最热衷讨论的点。

首先是对系统的拆分角度来说,第一个是单体应用的水平扩展问题,就是我们所说的负载均衡集群,换成我们经常听到的一个词: 扩容。扩容一般针对负载均衡集群进行水平扩展,用于解决单机无法承载高并发的情况,这也是互联网公司解决高并发场景的最常用手段,就比如每次双十一或者618前夕,我们都会成倍的扩容我们的服务实例。

对系统的另一个拆分角度,叫做垂直拆分,也就是我们常见的分布式系统。比如按照领域划分,我们将一个大的单体服务,拆分成不同的子领域系统,然后每个子领域系统单独承担各自的流量,而不会相互影响。还比如说长江的CQRS设计架构,翻译过来是指令查询分离的设计方式,通过查询和指令服务拆分,来讲高并发的查询场景单独拆分出来进行设计。

既然采用了分布式的微服务架构,那么分布式系统的一些常见痛点也是高并发要考虑的,比如熔断,降级,限流,超时等设计,这些本身是为了增强分布式系统的鲁棒性,从而间接的增强系统的高并发承载能力。关于微服务架构,在此处不再赘述,有兴趣的,可以看我的另一篇文章:【实践篇】教你玩转微服务--基于DDD的微服务架构落地实践之路


垂直维度

所谓垂直维度,是为了区分于单机维度和多机维度的,垂直的意思是针对一个业务系统在系统层级的垂直划分,包括业务应用和数据库。要知道,很多高并发场景,不管是写场景还是读场景,当数据库维度出现瓶颈,扩容就不想业务应用服务那么简单了,所以要区分来说。

a. 业务应用

唯物辩证法中有一个重要概念,就是一切从实际出发,具体问题具体分析。对于高并发系统的构建,虽然有通用的手段和方法论,但没有统一的落地方案,必须根据具体的业务应用场景进行分析和设计。比如你的系统是高并发读还是高并发写,处理思路也是完全不一样的。当然常见的手段和方法论核心包括两点:缓存和异步。但具体到相应的业务,需要仔细思考缓存逻辑怎么设计,异步流程怎么设计,如何保证数据一致性等等。

这块我有一个项目案例,就是在SAAS商城中秒杀场景下,如何设计高性能库存扣减逻辑,我将这块内容写在了我另一篇文章里:高并发场景下的库存管理,理论与实战能否兼得?

b. 数据库

在存储媒介这块其实高并发是不好设计的。比如关系型数据库MySQL, 在进行扩展要比业务应用复杂不少,涉及到的就是数据库的分库分表逻辑。

这块可以参考之前我写过的一篇文章:分而治之--浅谈分库分表及实践之路。

而对于读场景下的高并发请求,还有一种最常见的处理手段,就是异构存储介质,实现读写分离,最常见的就是MySQL关系型数据库负责写,ES这种文档类数据库负责读。而他的技术难点则在于数据的同步和数据一致性上。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115683
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67737
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SiLM5350SABCA-DG 30V, 10A单通道隔离栅极驱动器

    电源)中游刃有余,显著提升了系统的长期可靠性。 三、典型应用场景: 电机驱动 光伏/储能逆变器 工业电源与高压DC-DC转换器 新能源汽车相关辅助电源 总而言之,SiLM5350SABCA-DG是一款在
    发表于 11-15 10:00

    工业物联网数据中台的并发性有什么作用

    工业物联网数据中台的并发性是保障其在复杂工业场景下稳定运行的核心能力之一。它的核心作用是确保大量设备同时接入和数据传输时,系统依然能高效处理、不卡顿、不丢失数据,能够在单位时间内高效处理海量设备
    的头像 发表于 10-28 11:28 184次阅读
    工业物联网数据中台的<b class='flag-5'>高</b><b class='flag-5'>并发</b>性有什么作用

    医疗耗材管理如何从从容容游刃有余实现国产化?

    在医院日常运营中,医疗耗材管理一直是个棘手难题——值耗材种类繁多、低值耗材领用频繁、库存盘点耗时费力、缺货与积压现象并存。在此背景下,向成电子以其在工控领域的深厚技术积淀,推出基于国产高性能处理器
    的头像 发表于 10-27 10:09 411次阅读
    医疗耗材管理如何从从容容<b class='flag-5'>游刃有余</b>实现国产化?

    MTK安卓开发板_安卓主板定制开发_联发科展锐安卓主板方案

    MT8768开发板是一款集高效运算与低功耗特性于一身的嵌入式开发平台。凭借强大的处理器性能和出色的硬件架构,它能够在多任务处理场景中游刃有余,同时确保各类接口的可靠运行。其设计在温度适应性和抗干扰
    的头像 发表于 09-15 20:03 407次阅读
    MTK安卓开发板_安卓主板定制开发_联发科展锐安卓主板方案

    华纳云:海外服务器负载均衡与可用架构设计

    有效分担流量压力、提升系统稳定性和用户体验。在实际部署中,需要从负载分配策略、健康检查机制、故障切换、数据同步以及监控告警等多个层面系统规划。 负载均衡是实现可用的第一步。通过负载均
    的头像 发表于 08-28 18:32 481次阅读

    Nginx并发优化方案

    作为一名在生产环境中摸爬滚打多年的运维工程师,我见过太多因为Nginx配置不当导致的性能瓶颈。今天分享一套完整的Nginx并发优化方案,帮助你的系统从10万QPS突破到百万级别。
    的头像 发表于 08-13 15:51 671次阅读

    鸿蒙5开发宝藏案例分享---应用并发设计

    ?** 鸿蒙并发编程实战指南:解锁ArkTS多线程黑科技** 嘿,开发者朋友们! 今天给大家扒一扒鸿蒙官方文档里藏着的并发编程宝藏—— 100+实战场景解决方案 !从金融理财到游戏开发,从折叠屏适配
    发表于 06-12 16:19

    Ingress网关并发请求的解决方案

    当 Ingress 网关面临高并发请求(如 QPS 超过 10万+)时,可能导致服务崩溃、响应延迟激增或资源耗尽。
    的头像 发表于 05-14 11:52 660次阅读

    INT-based Routing(基于遥测的智能路由)如何重构AI集群流量调度?

    在GPT-4o参数规模突破10万亿、千卡集群成为AI训练标配的今天,全球互联网正经历着前所未有的流量风暴。当单次模型训练可产生相当于YouTube全球三日流量的数据洪流,当分布式推理系统要求微秒级延迟保障,传统网络架构的
    的头像 发表于 05-12 17:06 751次阅读
    INT-based Routing(基于遥测的智能路由)如何重构AI集群<b class='flag-5'>流量</b>调度?

    RAKsmart服务器如何重塑AI并发算力格局

    在AI大模型参数量突破万亿级、实时推理需求激增的当下,传统服务器架构的并发处理能力已逼近物理极限。RAKsmart通过“硬件重构+软件定义”的双引擎创新,推出新一代AI服务器解决方案。下面,AI部落小编为您解析RAKsmart服务器如何重塑AI
    的头像 发表于 04-03 10:37 671次阅读

    TurMass™ 如何帮助解决 UWB 定位系统大规模终端标签并发通信冲突问题?

    在大容量定位终端数据并发场景中,现有通信技术因信号冲突、系统容量受限等问题,难以满足需求。TurMass™ 通信技术通过多信道设计、时隙划分、定位与通信一体化等创新方案,有效解决了
    的头像 发表于 03-17 14:38 784次阅读
    TurMass™ 如何帮助解决 UWB 定位<b class='flag-5'>系统</b>大规模终端标签<b class='flag-5'>高</b><b class='flag-5'>并发</b>通信冲突问题?

    明渠流量监测管理系统及功能概述

    一、明渠流量监测管理系统概述明渠流量监测管理系统旨在实时、准确地监测明渠中的流量、水位等关键数据,为水资源管理、洪水预警、灌溉控制、环保排污
    的头像 发表于 03-13 11:08 563次阅读
    明渠<b class='flag-5'>流量</b>监测管理<b class='flag-5'>系统</b>及功能概述

    揭秘深层的华美:用于艺术品与考古检测的光谱技术

    历经岁月的文物与艺术品的避免不了失真的遗憾,而光谱技术恰巧能够揭示表象下的深层信息。友思特新品 MUSES 9系列光谱相机,其高空间分辨率与超宽光谱范围的优势特征,帮助解密古文物与艺术品隐藏的历史真相。
    的头像 发表于 02-06 14:22 830次阅读
    揭秘深层的华美:用于<b class='flag-5'>艺术</b>品与考古检测的<b class='flag-5'>高</b>光谱技术

    华为云 FlexusX 实例下的 Kafka 集群部署实践与性能优化

    前言 华为云 FlexusX 实例,以创新的柔性算力技术,为 Kafka 集群部署带来前所未有的性能飞跃。其灵活的 CPU 与内存配比,结合智能调度与加速技术,让 Kafka 在并发场景下依然
    的头像 发表于 01-07 17:23 697次阅读
    华为云 FlexusX 实例下的 Kafka 集群部署实践与性能优化

    水电站生态下泄流量监测系统:实时捕捉流量的细微变化

    水电站生态下泄流量监测系统是一种专门用于监测水电站生态流量的高精度监测系统。该系统通过布设在水电站坝体、引水渠、泄洪口等关键位置的
    的头像 发表于 12-19 17:31 986次阅读
    水电站生态下泄<b class='flag-5'>流量</b>监测<b class='flag-5'>系统</b>:实时捕捉<b class='flag-5'>流量</b>的细微变化