程序猿的三高:高并发、高可用、高性能

2023-11-12

一、高并发指标

高并发是现在互联网分布式框架设计必须要考虑的因素之一,它是可以保证系统能被同时并行处理很多请求,对于高并发来说,它的指标有:

响应时间:系统对进来的请求反应的时间,比如你打开一个页面需要1秒,那么这1秒就是响应时间。

吞吐量:吞吐量是指每秒能处理多少请求数量,好比你吃饭,每秒能吃下多少颗米饭。

秒查询率:秒查询率是指每秒响应请求数,和吞吐量差不多。

并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

二、处理高并发的方案

1:系统拆分

        将一个系统拆分为多个子系统,用dubbo来搞。然后每个系统连一个数据库,这样本来就一个库,现在多个数据库,这样就可以抗高并发。

2:redis缓存

        大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。毕竟人家redis轻轻松松单机几万的并发,没问题的。所以可以考的虑考虑项目里,那些承载主要请求读场景,怎么用缓存来抗高并发。

3:MQ(消息队列)

        可能还是会出现高并发写的场景,比如说一个业务操作里要频繁搞数据库几十次,增删改增删改,那高并发绝对搞挂系统,人家是缓存你要是用redis来承载写那肯定不行,数据随时就被LRU(淘汰掉最不经常使用的)了,数据格式还无比简单,没有事务支持。

        所以该用mysql还得用mysql,用MQ,大量的写请求灌入MQ里,排队慢慢玩儿,后边系统消费后慢慢写,控制在mysql承载范围之内。所以得考虑考虑你的项目里,那些承载复杂写业务逻辑的场景里,如何用MQ来异步写,提升并发性。MQ单机抗几万并发也是可以的。

4:分库分表

        可能到了最后数据库层面还是免不了抗高并发的要求,那么就将一个数据库拆分为多个库,多个库来抗更高的并发;然后将一个表拆分为多个表,每个表的数据量保持少一点,提高sql跑的性能。

5:读写分离

        这个就是说大部分时候数据库可能也是读多写少,没必要所有请求都集中在一个库上,可以搞个主从架构,主库写入,从库读取,搞一个读写分离。读流量太多的时候,还可以加更多的从库。

二. 高性能

1.什么是高性能呢?

        高性能是指程序处理速度非常快,所占内存少,cpu占用率低。高性能的指标经常和高并发的指标紧密相关,想要提高性能,那么就要提高系统发并发能力,两者互相捆绑在一起。应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。还有可以增加服务器的数量,内存,IO等参数提升系统的并发能力和性能,但不要浪费资源,要考虑硬件的使用率最高才能发挥到极致。

2.怎么样提高性能呢?

避免因为IO阻塞让CPU闲置,导致CPU的浪费

避免多线程间增加锁来保证同步,导致并行系统串行化

免创建、销毁、维护太多进程、线程,导致操作系统浪费资源在调度上

(1)、使用位图提升查询性能

(2)、使用布隆过滤器解决缓存穿透。

(3)、限流算法 计数器:redis可以实现滑动窗口算法,漏桶算法 和 令牌桶都可以通过消息队列实现,虽然google的guawa可以实现限流,但是单机限流,分布式环境下无法达到目的。

(4)、RocketMQ性能提升方法。

(5)、redis主从复制,哨兵模式,集群

(6)、mysql读写分离 :binlog日志,分库分表,分库分表带来的问题

(7)、消息队列的可靠性:生产者发送重试,消息队列同步复制,异步刷盘,消费者重试消费,到死信队列,重复消费,增加一个去重表。每次先插入去重表。

(8)、多级缓存

(9)、熔断降级,sentinel熔断降级策略 慢点用 异常比例 异常数

            流量控制:QPS流量控制 直接拒绝 warm up 匀速排队。

            高级设置里有根据调用方限流,链路限流,只限流自特定链路的请求,关联限流, 写操作频繁时,对读操作进行限流。生产环境中使用sentinel。

三. 高可用

1.高可用是什么?

        高可用通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。高可用注意如果使用单机,一旦挂机将导致服务不可用,可以使用集群来代替单机,一台服务器挂了,还有其他后备服务器能够顶上。或者使用分布式部署项。

2.redis的高可用的集群方案

         Redis单副本

         Redis多副本(主从)

         Redis Sentinel(哨兵)

         Redis Cluster

         Redis自研。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序猿的三高:高并发、高可用、高性能 的相关文章

  • 计算机组成原理:奇偶校验和汉明码校验

    目录 一 奇偶校验 奇偶校验的规律及原理 二 汉明校验码 1 校验位位置 2 汉明码的位号实质上是参与校验的各校验位位号之和 3 计算校验位的值 4 校验 设置指错字 一 奇偶校验 了解汉明码校验之前需要知道奇偶校验 奇偶校验码是一种最简单
  • Word中如何自动生成、更新英文目录(使用域代码)

    Word中如何自动生成 更新英文目录 使用域代码 前言 中文标题 目录 简 英文目录 1 英文目录 复制中文目录修改 2 英文目录 域代码生成 隐去域代码 前言 撰写毕业论文时 常会面临英文目录生成 更新的问题 这篇博客则是分享给大家 在w
  • 考研 打赢这场信息站 上岸

    23考研已经结束了 新的考研马上开始 考研 是一个 持久战 也是一个 信息战 因为大多数同学都是自我监督 自我学习 所以经常出现想要摆烂 放弃的念头 意念坚定的同学只占一小部分 这个时候我们就要先在考研之前进行问题分析 这是一个非常非常重要
  • 搭建Obsidian+picGo+Lsky Pro图床

    搭建Obsidian picGo Lsky Pro图床 0 前言 去年心血来潮买了个小主机 搭建了家庭服务器 安装了PVE系统 散热拉胯 性能不足目前只创建了个黑群晖系统 搭建一个图床 方便日常笔记工作 1 软件 1 1 Obsidian
  • 研究生文献笔记(obsidian模板分享!!):zotero+bookxnote pro+obsidian

    1s读懂 下载本文obsidian模板 打开链接 3 按照本文安装流程包含的内容进行安装 链接 3 其余部分可以不管 安装obsidian软件后之后直接打开本地仓库 不用新建 一 优点分析 1 1 zotero 文献从网页一键保存到软件 不
  • Zotero使用GB/T7714 2005模板插入参考文献出现 作者名全部大写问题、et al.变成汉字‘等‘、多出参考文章的doi 问题 的解决方案

    Zotero使用GB T7714 2005模板插入参考文献出现 作者名全部大写问题 et al 变成汉字 等 多出参考文章的doi 问题 的解决方案 问题描述 解决方案 操作步骤 GB T7714 2015 的类似问题 问题描述 zoter
  • MarkDown支持Emoji表情

    MarkDown支持Emoji表情 文章目录 MarkDown支持Emoji表情 MarkDown简介 插入Emoji表情 方法一 键盘输入 方法二 快捷键选择插入 方法三 打开表情与符号 此方法仅限MacOS系统 方法四 输入表情代码插入
  • 链式输送机传动装置设计(说明书+CAD图纸+PPT)

    摘要 齿轮传动是应用极为广泛和特别重要的一种机械传动形式 它可以用来在空间的任意轴之间传递运动和动力 目前齿轮传动装置正逐步向小型化 高速化 低噪声高可靠性和硬齿面技术方向发展 齿轮传动具有传动平稳可靠 传动效率高 一般可以达到94 以上
  • FZ15S五轴加工中心的自动换刀装置设计(论文+CAD图纸+SW三维图+开题报告+任务书+外文翻译)

    摘要 随着我国国民经济迅速发展和国防建设的需要 对高档的数控机床提出了急迫的大量需求 机床是一个国家制造业水平的象征 而代表机床制造业最高境界的是五轴联动数控机床系统 从某种意义上说 反映了一个国家的工业发展水平状况 长期以来 以美国为首的
  • 程序猿的三高:高并发、高可用、高性能

    一 高并发指标 高并发是现在互联网分布式框架设计必须要考虑的因素之一 它是可以保证系统能被同时并行处理很多请求 对于高并发来说 它的指标有 响应时间 系统对进来的请求反应的时间 比如你打开一个页面需要1秒 那么这1秒就是响应时间 吞吐量 吞
  • 诗词-- 收集

    摘自语录 1 所有的优越感 都来自缺乏见识和缺乏悲悯 2 如果一样东西你得到了 却觉得不过如此 那么这个东西其实是你的欲望 如果一样东西你得到了之后 依然爱不释手 那么这这才是你真正想要的 3 不行动的话 你永远都是观众 4 别用自我牺牲
  • 法兰轴机械加工工艺及夹具设计(说明书+CAD图纸+工序卡)

    一 零件的分析 1 1零件的作用 题目所给定的零件车床输出轴 见图1 其主要作用 一是传递转矩 使车床主轴获得旋转的动力 二是工作过程中经常承受载荷 三是支撑传动零部件 零件上的 80mm孔与动力源 电动机主轴等 配合起定心作用 用10 2
  • 三自由度焊接机器人设计(毕业设计说明书(论文)+12份CAD图纸、装配图、零件图)

    中文摘要 随着工业水平的发展 重要的大型焊接结构件的应用越来越多 其中大量的焊接工作必须在现场作业 如集装箱波纹板焊接机器人 大型舰船舱体 甲板的焊接 大型球罐 储罐 的焊接等 而这些焊接场合下 焊接机器人要适应焊缝的变化 才能做到提高焊接
  • springBoot 集成knife4j

    1 导入依赖
  • 【Zotero高效知识管理】(2)Zotero的安装、百度云存储配置及常用插件安装

    Zotero高效知识管理 专栏其他文章 Zotero文献管理软件的系统性教程 包括安装 全面的配置 基于众多插件的文献导入 管理 引用 笔记方法 Zotero高效知识管理 1 Zotero介绍 Zotero高效知识管理 3 Zotero的文
  • 【08】频率响应_详细数学推导G(jw)_滤波器

    本部分为B站up主DR CAN系列课程动态系统的建模与分析笔记 已获得up主授权 课程视频链接为 动态系统的建模与分析 8 频率响应 详细数学推导 G jw 滤波器 哔哩哔哩 bilibili
  • zotero+坚果云同步

    在使用Zotero整理文献的时候 软件自带的云同步有300M的上限 但软件还提供了Webdav同步的设置选项 在国内的众多云盘中 坚果云是为数不多甚至说唯一的支持Webdav的云盘 设置同步的流程如下 在网页端的坚果云登录之后 点击右上角的
  • MAC M1安装VMware 安装windows11

    目录 前言 一 安装包列表 二 VMware安装Windows11过程 总结 前言 最近想着给自己的mac安装windows虚拟机 因为mac是m1芯片的 所以也是从网上找了很多资料 用PD安装了Windows11 在找资料的时候发现VM也
  • 值得拥有的5 款功能强大的免费 PDF 编辑器

    编辑 PDF 文件可能是一个真正的挑战 尤其是当您找不到合适的工具时 此外 如今大多数工具都需要大量订阅 这意味着您必须在口袋里烧一个洞才能对 PDF 文件进行更改 但是等等 这是一个转折点 有一些免费使用的 PDF 编辑器可以帮助您毫无后
  • 开题报告-基于SpringBoot的求职招聘系统的设计与实现

    一 选题的根据 由于临近毕业季 同学们也即将踏上自己的岗位 择业也成为了同学们当下最为关心的问题 为了能够更加方便的服务同学们找工作 最快最有效率的方式莫过于计算机网络 所以我就因此开发了这一个求职招聘系统 为广大求职者和各企业的人事单位提

随机推荐

  • vscode php debug断点调试

    记录一个我配置debug的总结 大概步骤 下载对应版本xdebug 下载vscode插件 配置 只要跟着一步一步配置即可 在桌面创建一个test文件夹 创建一个index php文件 win r 输出cmd cd到这个文件夹 使用php内置
  • 这一年,我们一起追过的梦想

    这一年 我们一起追过的梦想 梦想是一个好大的话题 是一个振奋人心的词汇 也是一个遥遥无期的词汇 总是给人希望 但是却让人很难把握 这一年我们牢牢的把握住了时间 让它发挥它最大的效益 IT主旋律 键盘上的舞动 这个学期开始接触软件工程项目之C
  • 2013-2014嵌入式开发从业人员调查报告

    调查背景 在嵌入式 移动互联网 物联网等热门技术日益普及的今天 以实现智能化为核心目标的典型技术 已经成为了整个信息产业毋庸置疑的主旋律 特别是近1年 以智能家居 智能医疗 可穿戴设备等为首的大量智能硬件批量的进入到人们的生活 更让这一场智
  • 学习太极创客 — MQTT(七)MQTT 主题进阶

    视频链接 https www bilibili com video BV1Va4y1W7Ub spm id from autoNext vd source b91967c499b23106586d7aa35af46413 资料链接 http
  • 来袭!SOLIDWORKS 2024 主要增强功能

    在SOLIDWORKS软件使用过程中 我们知道您创建了出色的设计 您的出色设计也会得到构建 为了简化和加快从概念到制造产品的产品开发流程 SOLIDWORKS 2024 包含用户驱动的全新增强功能 重点关注 提高工作智能化程度 通过更有效地
  • 软件测试及自动化测试

    软件测试面经 文章目录 软件测试面经 软件测试理论 1 GET和POST请求区别 2 web service的接口如何测试 3 cookie session与Token的区别 4 接口测试该怎么测 5 postman和jemter的区别 6
  • java 151建议_JAVA开发中151个建议

    1 不在常量和变量中出现混淆的字母 2 莫让常量蜕变成变量 3 三元操作符的类型必须一致 4 避免带有变长参数的方法重载 5 别让null值和空值威胁到变长方法 KISS原装 Keep It simple stupid即懒人原装 6 覆写变
  • 6.4集合类

    1 什么是集合 将多个对象合在一起变成一个统一的对象 然后通过这个统一的对象来实现对多个对象的管理 存储 检索 操作 传输数据 在数组里要进行这样的操作 可以会写很多算法 但在集合里 只需要调用其中的方法就可以了 集合也可以对其中的元素进行
  • 【java】Java -jar 运行的程序如何 本地代码远程调试服务器程序

    1 概述 因为要在服务器上进行es远程认证 需要先写个包进行测试一下 需要远程调用 那么改怎么做呢 远程服务命令配置 在服务器启动java jar包的命令中添加 Xdebug Xrunjdwp transport dt socket ser
  • 1033 旧键盘打字 (20分)

    这道题很坑的一点就是 有可能坏掉的键盘是空串 所有的键都是好的 如下测试用例 input NULL abcdefg output abcdefg 所以 用字符串数组的不能直接用scanf s str 读入 用string的也不能直接用cin
  • 计算机提示xinput1_3.dll丢失的三个解决方法?哪个更好用

    在遇到xinput1 3 dll丢失的问题后 我不得不花费一些时间和精力来尝试修复这个错误 这个问题导致我无法正常运行一些游戏或应用程序 给我的计算机使用带来了一些不便 问题描述 在使用计算机过程中 您可能会遇到一个错误提示 指示xinpu
  • sentinel 官方文档_Sentinel 限流与熔断初探(技巧篇)

    温馨提示 源码分析 Alibaba Sentinel 专栏开始连载 本文展示如何学习一个全新的技术的方法 该专栏基于 1 7 0 版本 在学习一个新技术或新框架时 建议先查看其官方文档以获得对其形成一个整体的认识 https github
  • 第十四章 netlink机制--基于Linux3.10

    Netlink基于网络的消息机制 能够让用户和内核空间进行通信 12 3节提到的ifconfig是使用ioctl方法和内核通信的 而ip命令则是使用netlink和内核通信的 该机制初衷是为网络服务的 但是现在起应用范围已经大大扩展 14
  • 转型IT之路七大部分从0到1全方位探秘:非科班出身如何顺利进入IT领域

    目录 了解IT领域的多样性和趋势 探索IT领域的不同方向和专业 分析市场需求和趋势 技术栈的基本概念和术语 自我评估和制定职业规划 确定个人兴趣和目标 分析现有技能和经验 设定合理的转型时间表和目标 寻求专业意见和建议 制定灵活的计划 培养
  • LaTeX页眉页脚自定义【有图有代码】

    LaTeX页眉页脚自定义 有图有代码 一 自定义页眉页脚示例 双页文档 fancyhead fancyfoot 1 代码讲解 2 自定义代码 3 页眉和页脚的装饰线 4 总页数 二 自定义页眉页脚示例 单页文档 rhead rfoot 三
  • “学习方法”学习笔记(一)费曼技巧

    以下为引用部分 作者 pimgeek 链接 https www zhihu com question 20576786 answer 21770899 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 特别说明
  • iOS集成Bugly详解

    异常上报 SDK 集成 通过CocoaPods集成 新建项目 cd 项目目录 vim Podfile source https github com CocoaPods Specs git inhibit all warnings plat
  • 服务器运维管理

    运维人员在日常维护服务器方面避免不了对服务器进行批量管理操作 那站长人群一般都用什么工具管理服务器呢 以下是个人用的对于服务器管理比较便捷的软件 该软件产地 中国 软件名称 IIS7远程桌面 可自行百度查询 系统 目前支持win所有系统 特
  • Java程序员的专属社区

    一个人走的快 一群人走的远 这是Java程序员专属社区创立的初衷 Java程序员大本营 是面向工作1 3年 希望提升专业技术能力的Java 开发者建立 致力于Java知识的分享 交流与学习 点击关注 Java程序员大本营 我们希望通过CSD
  • 程序猿的三高:高并发、高可用、高性能

    一 高并发指标 高并发是现在互联网分布式框架设计必须要考虑的因素之一 它是可以保证系统能被同时并行处理很多请求 对于高并发来说 它的指标有 响应时间 系统对进来的请求反应的时间 比如你打开一个页面需要1秒 那么这1秒就是响应时间 吞吐量 吞