如何做好高并发系统设计,我总结了三点

简介: 大家在面试中是不是经常被问到一个问题:“如果你系统的流量增加 N 倍你要怎么重新设计你的系统?”

大家在面试中是不是经常被问到一个问题:“如果你系统的流量增加 N 倍你要怎么重新设计你的系统?”


这个高并发的问题可以从各个层面去解,主要包括以下几点。


1、代码层面


  • 锁优化(采用无锁数据结构),主要是 concurrent 包下面的关于 AQS 锁的一些内容


  • 数据库缓存设计(降低数据库并发争抢压力),这里又会有缓存、DB 数据不一致的问题,在实际使用中,高并发系统和数据一致性系统采用的策略会截然相反。


  • 数据更新时采用合并更新,可以在应用层去做更新合并,同一个 Container 在同一时间只会有一个 DB 更新请求。


  • 其他的比如基于 BloomFilter 的空间换时间、通过异步化降低处理时间、通过多线程并发执行等等。


2、数据库层面


  • 根据不同的存储诉求来进行不同的存储选型,从早期的 RDBMS,再到 NoSql(KV 存储、文档数据库、全文索引引擎等等),再到最新的 NewSql(TiDB、Google spanner/F1 DB)等等。表数据结构的设计,字段类型选择与区别。


  • 索引设计,需要关注聚簇索引原理与覆盖索引消除排序等,至于最左匹配原则都是烂大街的常识了,高级一点索引消除排序的一些机制等等,B+树与 B 树的区别。


  • 最后的常规手段:分库分表、读写分离、数据分片、热点数据拆分等等,高并发往往会做数据分桶,这里面往深了去说又有很多,比如分桶如何初始化、路由规则、最后阶段怎么把数据合并等等,比较经典的方式就是把桶分成一个主桶+N 个分桶。


3、架构设计层面


  • 分布式系统为服务化


  • 无状态化支持水平弹性扩缩容


  • 业务逻辑层面 failfast 快速失败


  • 调用链路热点数据前置


  • 多级缓存设计


  • 提前容量规划等等


总结


所谓高并发,常常意味着大流量,需要运用技术手段抵抗流量的冲击,这些手段好比操作流量,能让流量更平稳地被系统所处理,带给用户更好的体验。高并发确实是一个复杂且系统性的问题,由于篇幅有限,诸如分布式Trace、全链路压测、柔性事务都是要考虑的技术点。另外,如果业务场景不同,高并发的落地方案也会存在差异,但是总体的设计思路和可借鉴的方案基本类似。高并发设计同样要秉承架构设计的3个原则:简单、合适和严谨。不能脱离业务的实际情况,更不要过度设计,合适的方案就是最完美的。微信图片_20220609111231.png

相关文章
|
缓存 负载均衡 算法
“软件系统三高问题”高并发、高性能、高可用系统设计经验
​ 总的来说解决三高问题核心就是 “分字诀” 业务分层、系统分级、服务分布、数据库分库/表、动静分离、同步拆分成异步、单线程分解成多线程、原数据缓存分离、分流等等。。。。 直观的表述就是:从前端用的CDN、动静分离,到后台服务拆分成微服务、分布式、负载均衡、缓存、池化、多线程、IO、分库表、搜索引擎等等。都是强调一个“分”字。
2831 0
“软件系统三高问题”高并发、高性能、高可用系统设计经验
|
6月前
|
消息中间件 缓存 监控
直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。
|
存储 缓存 应用服务中间件
|
消息中间件 缓存 数据库
好家伙!阿里最新版高并发系统设计涵盖了“三高”所有骚操作
为啥都爱面高并发? 首先为啥面试官喜欢问高并发、性能调优相关的问题,我想有两点原因: 第一,本身互联网区别于传统软件行业的特点之一就是海量请求。传统软件公司每秒用户几个、几十个的请求很常见,但是互联网公司哪怕一个二线的 App,后端接口请求一天几个亿也很正常。业务特点导致对候选人在海量请求相关的技术上考察的会比较多。 第二、高并发性能调优等方面的问题相当于高考试卷里的难题部分。CRUD 谁都会,xx 培训机构培训上三个月,出来都能写。但是对于高性能、高并发这没几把刷子真会玩不起来的。通过这个来区分候选人水平的高低(招人肯定选水平高的)。
95 1
|
算法 Java 应用服务中间件
高并发系统设计之限流
当我们谈论Web应用或者服务,一个重要的话题就不能避免:限流。这是一种保护系统和维持服务稳定性的重要手段。
95 0
高并发系统设计之限流
|
消息中间件 缓存 负载均衡
秒杀系统设计:高并发下的架构考虑
随着互联网的快速发展,电商平台上的秒杀活动越来越受欢迎。然而,高并发的情况下,如何保证秒杀系统的稳定性和可扩展性成为一个非常具有挑战性的问题。在本文中,我们将讨论如何设计一个高效、可靠的秒杀系统。
220 1
|
消息中间件 缓存 分布式计算
真牛!阿里最新发布这份《亿级高并发系统设计手册》涵盖所有操作
前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。 那我们改如何应对大流量的三种方式? 第一种方法:Scale-out。 第二种方法:使用缓存提升性能 第三种方法:异步处理 面试京东,阿里这些大厂遇到这些问题改怎么办? 秒杀时如何处理每秒上万次的下单请求? 如何保证消息仅仅被消费一次? 如何降低消息队列系统中消息的延迟?
|
负载均衡 网络协议 Dubbo
高并发系统设计之负载均衡
通过负载均衡,我们能提高系统的可用性,提升响应速度,同时也能防止任何单一的资源过度使用。
325 0
|
消息中间件 SQL 缓存
高并发系统设计之思考
高并发系统设计之思考
145 0
|
消息中间件 缓存 监控
直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记
我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。

热门文章

最新文章

  • 1
    高并发场景下,到底先更新缓存还是先更新数据库?
    67
  • 2
    Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
    75
  • 3
    Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
    68
  • 4
    Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
    62
  • 5
    Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
    55
  • 6
    Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
    69
  • 7
    在Java中实现高并发的数据访问控制
    42
  • 8
    使用Java构建一个高并发的网络服务
    29
  • 9
    微服务06----Eureka注册中心,微服务的两大服务,订单服务和用户服务,订单服务需要远程调用我们的用,户服务,消费者,如果环境改变,硬编码问题就会随之产生,为了应对高并发,我们可能会部署成一个集
    37
  • 10
    如何设计一个秒杀系统,(高并发高可用分布式集群)
    129