最全高并发学习笔记,收藏起来

这篇具有很好参考价值的文章主要介绍了最全高并发学习笔记,收藏起来。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

性能优化原则

  • 问题导向 不要过早进行优化,避免增加系统复杂度,同时也浪费研发人力

  • 遵循二八原则 要抓住主要矛盾,优先优化主要的性能瓶颈

  • 优化需要有数据支撑 要时刻了解你的优化让响应时间减少了多少,提升了多少的吞吐量。可以使用平均值、极值(最大/最小值)、分位值等作为统计的特征值

高可用性设计 系统设计 遵循"design for failure"的设计原则,未雨绸缪,具体优化方法有故障转移、超时控制、降级、限流 故障转移

  • 对等节点直接可直接转移

  • 节点分主节点和备用节点,转移时需要进行主备切换

「什么时候进行主备切换?」 一般采用某种故障检测机制,比如心跳机制,备份节点定期发送心跳包,当多数节点未收到主节点的心跳包,表示主节点故障,需要进行切换。 「如何进行切换?」 一般采用paxos、raft等分布式一致性算法,在多个备份节点中选出新主节点。 超时控制 在分布式环境下,服务响应慢可能比宕机危害更大,失败只是瞬时的,但调用延迟会导致占用的资源得不到释放,在高并发情况下会造成整个系统奔溃。 「如何合理设置超时时间?」 收集系统之间的调用日志,统计比如说 99% 的响应时间是怎样的,然后依据这个时间来指定超时时间。 降级 关闭整个流程中非核心部分,保证主流程能稳定执行(详细见后文) 限流 限制单位时间内的请求量,超过的部分直接返回错误 (详细见后文) 系统运维 灰度发布 通过线上流量观察代码变更带来的影响 故障演练 对系统中的部分节点/组件人为破坏,模拟故障,观察系统的表现。为了避免对生产系统造成影响,可以先部署另外一套与线上环境一摸一样的系统,在这上面进行故障演练 系统可用性度量指标

  • MTBF:两次故障之间的间隔,这个时间越长,系统越稳定。

  • MTTR:故障平均恢复时间,时间越短,故障对用户影响越小 可用性=MTBF / (MTBF+MTTR)

高扩展性设计 存储层 分库分表,按业务和数据纬度对库表进行水平/垂直拆分,突破单机限制。有以下两点需要注意:

  1. 最好一次性确定好节点/分表数量,避免频繁迁移数据

  2. 拆分后尽量避免使用事务,分布式事务需要协调各个模块的资源,容易出问题

业务层 按业务纬度,接口重要性纬度和请求来源等多个维度对服务进行拆分和隔离 数据库高可用设计 数据库有两个大方面的优化方向:

  1. 提升读写性能;

  2. 增强存储扩展能力,应对大数据量的存储需求

池化技术 池化是一种空间换时间的思路。预先创建好多个对象,重复使用,避免频繁创建销毁对象造成的开销 如何设计一个数据库连接池? 维护池中连接数量和保证连接可用性是连接池管理的两个关键点。 「请求获取连接流程」 初始化连接池时,需要指定最大连接数和最小连接数

  1. 连接池当前连接数 < 最小连接数: 创建新链接处理数据库请求

  2. 最小连接数 < 连接池当前连接数 < 最大连接数: 优先复用空闲连接,否则创建新连接处理请求

  3. 连接池连接数 > 最大连接数: 等待一段时间(自旋/线程休眠),超时还没有连接可以直接抛错

「保证连接可用性」

  1. 心跳机制,定期检查连接是否可用

  2. 每次使用连接前,先检验下连接是否可用,再进行SQL请求

如何设计一个线程池? 指定一个最大线程数量,并利用一个有限大小的任务队列,当池中线程数量较少时,直接创建新线程去处理任务,当池中线程达到设置的最大线程数量后,可以将任务放入任务队列中,等待空闲线程执行。

  • 合理设置最大线程数量

❝ CPU密集型任务,保持与CPU核数相当的线程就可以了,避免过多的上下文切换,降低执行效率 IO密集型,可以适当放开数量,因为在执行IO时线程阻塞,CPU空闲下来可以去执行其他线程的任务 ❞

  • 等待队列必须有界,若不限制大小可能会导致队列任务数量过多,触发Full GC,直接导致服务不可用

  • 必须监控等待队列中的任务数,避免最大线程数设置不合理导致大量任务留在等待队列中得不到执行

主从读写分离 分离后,从库可以用作数据备份,也可用于处理读请求,减少单机压力;

  • 注意从库数量,从库越多,主库需要越多的资源用于数据复制,同时还占用主库网络带宽,一般最多挂3-5个从库

  • 主从之间存在延迟,在某些场景下从库可能读不到最新的数据会导致错误。

高并发学习,性能优化,数据库,大数据

❝ 处理方法: 使用缓存,在更新数据后同时更新缓存,读的时候直接读缓存 写主库后发送可以发送完整数据记录到消息队列,避免后面读库操作 需要强一致的读请求直接读主库 ❞

  • 需要对主从延迟进行监控

  • 最好屏蔽分离后导致访问数据库方式的改变

❝以基础库中间件的方式直接引进项目代码中,访问时直接访问该中间件,主流方案有TDDL、DDB等单独部署数据库代理层,业务代码使用时访问代理层,代理层转发到指定的数据源,有Cobar、Mycat、Atlas、DBProxy等,这种方案多了一次转发,性能上有一些损耗❞ 分库分表 随着存储量变大,单机写入性能和查询性能会降低,分库分表能提高读写性能;按模块分库,实现不同模块的故障隔离 拆分方式文章来源地址https://www.toymoban.com/news/detail-803012.html

到了这里,关于最全高并发学习笔记,收藏起来的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 震惊!!!跟着我学Hadoop,既然如此简单。(快收藏起来学习吧)

    目录 一、Hadoop生态圈的构成 Hadoop生态圈的主要组成部分: 1,Hadoop分布式文件系统(HDFS): 2,MapReduce: MapReduce具有如下特点: 3,YARN: Yarn具有如下特点: 4,Hive: Hive应用场景 5,Pig: Pig与Hive的比较 6,HBase: HBase的特点 7,ZooKeeper: Zookeeper解决分布式环境下数据管理问

    2024年03月25日
    浏览(35)
  • 最全 Vue 性能优化方案

    当涉及到 Vue 应用的性能优化时,有许多技术和策略可以帮助提升应用的性能并改善用户体验。以下总结了常用的十种 Vue 的性能优化方案: 因为 v-show 本质上是通过 css 控制元素的显示与隐藏,而 v-if 是通过操作 dom 来控制元素的显示与隐藏,频繁操作 dom 会导致性能有所影响

    2024年04月24日
    浏览(21)
  • 高并发与性能优化的神奇之旅

    作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得感谢这段苦,让笔者从头到尾去探索,找寻解决之法。 目录 第一站:超越时间的加速法术 对此有何解决之法呢

    2024年02月14日
    浏览(32)
  • 高并发缓存实战RedisSon、性能优化

    对于经常访问的数据保留在redis缓存当中,不用带数据设置超时时间定期删除控制redis的大小 缓存击穿数据库没有被击穿 如果商家是批量导入的数据,呢么就会同时存到redis中,设置固定的时间就会导致缓存在一瞬间失效,用户访问不到就会将流量打到数据库上造成数据库段

    2024年02月13日
    浏览(51)
  • Java 性能优化 创作不易,觉得好,点赞收藏关注博主!

    Java性能优化主要涉及以下这些方面: 1. 代码级别的优化 避免在循环中创建对象 :使用对象池或缓存来重用对象。 使用基本数据类型和数组 :替代对象以减少内存消耗和提高处理速度。 2. 数据结构和算法的选择 选择合适的数据结构 :根据实际需求选择合适的数据结构,例

    2024年02月01日
    浏览(37)
  • 5. 一线大厂高并发缓存架构实战与性能优化

    本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 课程内容: 1、中小公司Redis缓存架构以及线上问题分析 2、大厂线上大规模商品缓存数据冷热分离实战 3、实战解决大规模缓存击穿导致线上数据库压力暴增 4、黑客攻击导致缓存穿透

    2024年02月07日
    浏览(32)
  • Go并发:使用sync.Pool来性能优化

    在Go提供如何实现对象的缓存池功能?常用一种实现方式是:sync.Pool, 其旨在缓存已分配但未使用的项目以供以后重用,从而减轻垃圾收集器(GC)的压力。 sync.Pool的结构也比较简单,常用的方法有Get、Put 接着,通过一个简单的例子,来看看是如何使用的 在之前的文章中有提

    2024年02月08日
    浏览(32)
  • [CUDA 学习笔记] 如何优化 CUDA 矩阵乘内核以获得类似 cuBLAS 的性能: 工作日志

    注: 本文主要是对博文 “How to Optimize a CUDA Matmul Kernel for cuBLAS-like Performance: a Worklog - SIBOEHM” 的翻译, 并进行了一定的备注和补充 在这篇文章中, 我将迭代优化用 CUDA 编写的矩阵乘法的实现. 我的目标不是构建一个 cuBLAS 替代品, 而是深入了解用于现代深度学习的 GPU 的最重要的

    2024年04月28日
    浏览(25)
  • 一线大厂Redis高并发缓存架构实战与性能优化

    我们都知道,一般的互联网公司redis部署都是主从结构的,那么复制基本都是异步执行的, 那就存在一个问题,当我们设置分布式锁的时候,还没来得及将key复制到从节点,主节点挂了,那么从节点会成为主节点,但是主节点的分布式锁key就会丢失掉,如果新线程进来执行同

    2024年02月08日
    浏览(33)
  • redis第五第六章-redis并发缓存架构和性能优化

    缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 造成缓存穿透的基本原因有两个:

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包