当前位置: 首页 > news >正文

高并发-高性能-高可用-结论版

文章目录

          • 上万的并发需要多少台web服务器
      • 一般单机能处理200请求,为何redis单机却能处理上万请求
      • 单线程每秒能处理(发送/响应)的http请求数
      • 三高的定义
          • 高并发的解决方案
          • 高性能的解决方案
          • 高可用的解决方案
      • 参考文章

上万的并发需要多少台web服务器

Tomcat默认配置的最大请求数是150(简单记作200),也就是说同时支持150个并发,当然了,也可以将其改大。 当某个应用拥有250个以上并发的时候,应考虑应用服务器的集群

一般单机能处理200请求,为何redis单机却能处理上万请求

  1. 一般的单机是你要么请求mysql,要么进行磁盘io,这样每个操作至少100ms可是redis全内存操作,所以上万没问题

  2. 客户端单机能有100并发的发压都相当不错了,因为客户端发请求,还要等服务端的响应,至少200ms,而服务端只需要一个线程不断监听客户端的连接就好,服务端响应也不需要等客户端的回应,所以相比起来就自然性能高了200倍

单线程每秒能处理(发送/响应)的http请求数

一个线程1秒能处理10个请求,4C8G的机器一般起20个线程就差不多了(),所以单机大约能处理200并发就已经相当不错了。

下面是我们在线上经过了大量系统优化后的生产经验总结:

假设你的服务A,每秒钟会接收30个请求,同时会向服务B发起30个请求,然后每个请求的响应时长经验值大概在200ms,那么你的hystrix线程池需要多少个线程呢?

qps和最佳线程数的关系计算公式是:30(每秒请求数量) * 0.2(每个请求的处理秒数) + 4(给点缓冲buffer) = 10(线程数量)

如果对上述公式存在疑问,不妨反过来推算一下,为什么10个线程可以轻松抗住每秒30个请求?

一个线程200毫秒可以执行完一个请求,那么一个线程1秒可以执行5个请求,理论上,只要6个线程,每秒就可以执行30个请求。

也就是说,线程里的10个线程中,就6个线程足以抗住每秒30个请求了。剩下4个线程都在玩儿,空闲着。

那为啥要多搞4个线程呢?很简单,因为你要留一点buffer空间。

万一在系统高峰期,系统性能略有下降,此时不少请求都耗费了300多毫秒才执行完,那么一个线程每秒只能处理3个请求了,10个线程刚刚好勉强可以hold住每秒30个请求。所以你必须多考虑留几个线程。

三高的定义

高并发方面要求QPS 大于 10万;
高性能方面要求请求延迟小于 100 ms;
高可用方面要求系统可用性高于 99.99%。

高并发的解决方案
  • 负载均衡
  • 池化技术(连接复用)
  • 流量漏斗(WAF防火墙,防黑客攻击、恶意爬虫、黄牛等)

复用单个连接无法承载高并发,如果每次请求都新建连接、关闭连接,考虑到TCP的三次握手、四次挥手,有时间开销浪费。池化技术的核心是资源的“预分配”和“循环使用”,常用的池化技术有线程池、进程池、对象池、内存池、连接池、协程池。
连接池的几个重要参数:最小连接数、空闲连接数、最大连接数

上面讲的是正向方式提升系统QPS,我们也可以逆向思维,做减法,拦截非法请求,将核心能力留给正常业务!
互联网高并发流量并不都是纯净的,也有很多恶意流量(比如黑客攻击、恶意爬虫、黄牛、秒杀器等),我们需要设计流量拦截器,将那些非法的、无资格的、优先级低的流量过滤掉,减轻系统的并发压力。

高性能的解决方案

一般来说:5秒界面没有响应,用户就会离开

那么有哪些因素会影响系统的性能呢?

  • 用户网络环境

  • 请求/响应的数据包大小

  • 业务系统 CPU、内存、磁盘等性能

  • 业务链路的长度

  • 下游系统的性能

  • 算法实现是否高效

加缓存

高可用的解决方案

异地多活、主备切换进行容灾
通过熔断、限流、降级,解决流量过载问题,提供过载保护

参考文章

微服务高可用的两个关键技巧,你一定用得上

相关文章:

高并发-高性能-高可用-结论版

文章目录上万的并发需要多少台web服务器一般单机能处理200请求,为何redis单机却能处理上万请求单线程每秒能处理(发送/响应)的http请求数三高的定义高并发的解决方案高性能的解决方案高可用的解决方案参考文章上万的并发需要多少台web服务器 …...

数智转型助力建筑业全产业链升级,你了解多少?

关于数智转型,指的是基于数字化技术和数据驱动的思维方式,将企业的管理、业务和服务进行全面的升级和改造,从而帮助实现企业的数字化转型和升级。通过数字技术和数据分析来提高企业的效率、创新能力和竞争力,进一步提高企业的市场…...

Python网络设备脚本中经常使用的connecthandler和telnetlib是什么意思?

你好,这里是网络技术联盟站。 在昨天的文章中,有小伙伴提到对这两天瑞哥提供的Python脚本中涉及的connecthandler和telnetlib两个模块不是太了解,想要学习一下: 今天瑞哥就安排上! 其实这两个模块是Python与网络设备…...

你真的会写 git commit message 吗?

作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...

ISO文件内添加kickstart完成自动安装

目录 将待制作的centos iso文件挂载到/mnt/目录 将/mnt/下的所有文件复制到新的目录/tmp/mycentos 创建kickstart文件 修改启动文件 重新制作ISO文件 制作完成 kickstart可以实现根据配置自动安装操作系统,本文主要讲解如何让机器读取到iso文件后自动完成操作…...

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理

SpringBoot 整合RabbitMq 自定义消息监听容器来实现消息批量处理前言添加依赖配置文件编写监听器创建SimpleRabbitListenerContainerFactory发送消息前言 RabbitMQ是一种常用的消息队列,Spring Boot对其进行了深度的整合,可以快速地实现消息的发送和接收…...

jquery基础之操作节点对象

jquery操作节点(元素)对象 捕获-DOM操作,获取内容,值 获取内容:1.text()获取元素的文本内容 2.html()获取元素的文档内容 …...

对于Java的深入理解及其特点--面试

前言 计算机语言千千万,每一种语言都有其自己的特点、擅长的领域。在学习了Java之后才对Java有了进一步的理解。 面试问一: 你是如何理解Java这门语言的? 这里我们应该从下面几个点去总结 1、Java语言具有的属性 2、他的特点在哪 Java语…...

Linux GPSD的使用

目录 1: GPSD 运行状态查看 2:停止GPSD 服务 3: GPSD运行输出(协议的识别) 4:开启的服务...

ArrayList无参构造添加元素源码解读

一、ArrayList无参构造add方法源码阅读 Test//无参构造源码阅读 public void testArrayListNoConstructorAdd(){ArrayList<Integer> arrayList new ArrayList<>();ArrayList<Integer> list new ArrayList<>();arrayList.add(1);arrayList.add(12);a…...

手写简易 Spring(二)

文章目录手写简易 Spring&#xff08;二&#xff09;1. 扩展 BeanFactory 接口2. 实现资源加载器&#xff0c;从 Spring.xml 解析和注册 Bean 对象1. 核心实现类 XmlBeanDefinitionReader3. 实现应用上下文&#xff0c;自动识别、资源加载、扩展机制1. 应用上下文2. 核心实现类…...

排列问题DFS入门

1、题目描述&#xff08;全排列&#xff09; 输入一个正整数n&#xff0c;输出1~n的全排列。 输入格式 一个正整数n。 输出格式 所有1~n的全排列&#xff0c;每个排列占一行。 样例输入 3 样例输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 算法思路 题目要求输出n的全…...

【每日一题Day159】LC1638统计只差一个字符的子串数目 | 枚举

统计只差一个字符的子串数目【LC1638】 给你两个字符串 s 和 t &#xff0c;请你找出 s 中的非空子串的数目&#xff0c;这些子串满足替换 一个不同字符 以后&#xff0c;是 t 串的子串。换言之&#xff0c;请你找到 s 和 t 串中 恰好 只有一个字符不同的子字符串对的数目。 比…...

【07 Metadata and VendorTag】

1. Metadata结构及分类 一个 metadata 通过tag,value及 type 来描述。不同的 metadata 分成三类 controls,dynamic 及 static 2. MTK Metadata IMetadata Mtk metadata containerIMetadataConverter Provide mutual conversion for Android camera_metadata and MTK Imetada…...

Golang中Model的使用

导语我们都知道在Golang中我们一般都是设置GOPATH目录&#xff0c;这个目录主要存放我们的第三方包&#xff0c;这个方式一直不是很方便&#xff0c;今天给大家介绍Go 1.11版本中推出的GoModul使用方法&#xff0c;学过java的同学&#xff0c;可能对maven包有所了解&#xff0c…...

交友项目【基础环境搭建】

目录 1&#xff1a;交友项目架构介绍 1.1&#xff1a;前后端分离的概述 1.2&#xff1a;YAPI介绍&#xff08;虚拟机中已经配好&#xff09; 基本信息 使用 安装跨域拓展&#xff08;浏览器上安装跨域处理插件&#xff09; 2&#xff1a;虚拟机工具项目搭建 2.1&#xff1…...

入职时,公司要求自己带电脑,每月给100元补贴,如果不接受就不能入职!

为了节约成本&#xff0c;公司能做出什么事&#xff1f;一位网友遇到了这样的事&#xff1a;入职时&#xff0c;公司要求自己带电脑&#xff0c;每个月给100元补贴&#xff0c;如果不接受就得放弃入职&#xff0c;这样的公司有没有坑&#xff1f;有人问&#xff1a;连基本的公司…...

20道经典Redis面试题

20道经典Redis面试题 前言 整理了20道经典Redis面试题&#xff0c;希望对大家有帮助。 1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用A…...

十分钟带你看懂接口测试,2023最全超大型接口测试攻略

一、什么是接口测试&#xff1f; 所谓接口&#xff0c;是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试&#xff0c;则是通过接口的不同情况下的输入&#xff0c;去对比输出&#xff0c;看看是否满足接口规范所规定的功能、…...

【设计模式】创建型-单例模式

文章目录一、单例模式二、单例模式的八种实现方式2.1、饿汉式&#xff08;静态常量&#xff09;2.2、饿汉式&#xff08;静态代码块&#xff09;2.3、懒汉式&#xff08;线程不安全&#xff09;2.4、懒汉式&#xff08;线程安全&#xff0c;同步方法&#xff09;2.5、双重检查2…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...