精华内容
下载资源
问答
  • 并发能力
    千次阅读
    2022-03-26 10:00:50

    现在大多数的开发环境下面提高并发一般的采用的方案对应的是:
    1.分片方式:现在比较流行的框架,比如mongodb,es,hbase等大多数采用的是分片的方式提高并发处理的能力的。
    2.分区:常见的在数据库层面的话,可能使用的比较多的是mysql,oracle的分区操作,kafka的分区操作
    3.slot插槽:redis就是使用插槽的思路来提高并发处理能力的。
    其他的该并发的处理思路后续会进行补充的。上面的三种是高并发环境下面的一些完善的解决方案的。flink也是使用到了slot的概念的。
    正式基于上面的一些方案,对应的就可以体现出来较高的并发处理能力的。
    那么改如何在生产的环境中,将这些设计的思路体现出来了,怎么可能根据需要得到对应的插槽的设计的准则了
    我在生产和一些测试环境中,对应操作是这样的。
    1.根据主机内存来做,内存一般的选择的是特定的规模的,比如8G,16G等,一般的是特定的,可以使用物理内存的一般来用于redis的内存的分配操作实现的。这样的话,整体的分配是这样的 总数=总的内存需要的数量/单个节点能够提供的内存
    考虑到主从的话,对应的节点数需要扩增一倍的。比如 redis就可以使用这样的方式来实现的。
    2.需要根据对应的主机的磁盘或者是物理空间来做的,因为实际的生产的过程中,主机适合的内存或者是磁盘是有规律的。我们可以根据最终的存储的空间的大小来指定的。

    更多相关内容
  • 视频系统的并发能力直接影响到大型客户的体验,为了对视频会议系统特别是电信级系统的并发能力有一个客观评价,对其并发能力评测方案进行探讨,并以某电信运营商的视频会议系统为例进行实证,最后给出系统并发能力...
  • 如何提高服务器并发能力

    千次阅读 2021-11-22 15:38:11
    提高服务器并发能力,nginx的并发量

    如何提高服务器并发能力,理论依据、方法是什么

      呐,一台服务器,到底能处理多少并发?1万,10万,一百一千万?由什么决定呢?

      不用说,最终肯定是由硬件决定!更强的cpu、更大的内存、更高的带宽、更高速的io设备……来一台IBM大型机,再菜的鸟也能整到百万并发

      转载请注明原著:博客园老钟 https://www.cnblogs.com/littlecarry/

      讨论硬件没有多大意义

      我们要讨论的事,普通固定硬件条件下,如何提升单体服务器的并发能力

      并发,也就是单位时间里服务器处理的最大请求数,通常定义为1秒时间内。

    首先明确一点,提高服务器并发能力,是一个系统性问题,不是一两个方法就能解决的。

    一、回归问题的本质

            面对外部并发访问,服务器的行为描述为两点:连接请求、处理请求

     

    1、连接请求

       成千上万的请求,同时连到服务器,如何高效管理

      2、处理请求

       那么多的请求要处理,如何快速执行完,然后返回、释放资源?

         一个请求执行的时间越短,服务器单位时间内能处理的请求就越多,并发能力就越强。

    二、什么制约处理速度

       要提升服务器并发能力,就是要提升“连接请求”、“处理请求”的处理速度, 

      1、提升操作系统的IO连接管理能力

       涉及面:阻塞、非阻塞、同步、异步IO,多路复用等。一个请求打到服务器,服务器要分配他内存、线程、cpu等资源,共享的方式,可以节约很多资源。

          提升方法:基于NIO多路复用技术 ,可以让上亿的请求,同时连在一台服务器上高效管理

      2、提升操作系统的IO读写能力

        涉及面:网络IO、硬盘IO、内存等。io的读写是很慢的,非常重要的瓶颈,请求的执行,可能涉及网络IO、硬盘IO、内存的读写,缩短或屏蔽这些读写,将大大提升执行速度。

        提升方法:零拷贝、DMA、缓存等

      3、改善系统资源竞争

        涉及面:线程数量、锁竞争、内存申请释放、系统参数配置等

        提升方法:1)线程越多,操作系统切换线程上下文消耗越大,线程少,IO的阻塞可能导致系统空转。通过实际调试分配合适的线程数量

                2)锁的种类很多,悲观、乐观,重入等等,选择合适的锁,能提升资源的竞争率。所有的锁都是悲观锁,是不可取的。

             3)内存合理的申请、释放,能节约资源的消耗

                4)系统参数、jvm参数,很多根据实际情况分配

      4、改善编写代码能力

        涉及面:代码架构、代码逻辑、代码对内存的操作等

                  提升方法:多写代码,多看设计模式、架构,多了解内存模型

       三、 小结:

      以上四点,也可以认为是性能瓶颈

      很多网上说nginx的并发量是2万、5万、6万……,都是不对的,一是nginx的代码架构,并没有对并发量的约束,二是脱离了硬件。nginx的架构没有约束连接请求,“处理请求”,就看你对性能瓶颈的改善,以及你的硬件,这两点提升了,并发佰亿可能不是问题

      当然,这里还有一个“单机性能”的问题,不用切换线程的操作系统,执行当然最快。所以需要处理百万级别的并发,分布式处理效率才是最高的。还有灾备、高可用等等问题

      本文只是提供基本的理论思路,很多具体的方法不细说,得自行查询

    展开全文
  • 如何提高django的并发能力

    千次阅读 2020-11-28 16:30:46
    原文连接引言手头上的项目有一些采用django框架编写, 如果说并发量比较小的时候简单的runserver是可以应对的,那么当并发达到一两千的时候,该怎么提高django的并发能力呢?Overview环境说明:python: 3.5django: ...

    原文连接

    引言

    手头上的项目有一些采用django框架编写, 如果说并发量比较小的时候简单的

    runserver是可以应对的,那么当并发达到一两千的时候,该怎么提高django

    的并发能力呢?

    Overview

    环境说明:python: 3.5

    django: 1.8.2

    gunicorn: 19.7.1

    系统:服务器: centos 4核

    压测机器: centos 4核

    压测环境siege

    4核centos测试机

    为什么用django开发效率高

    好上手

    关于gunicornGunicorn ‘Green Unicorn’ is a Python WSGI HTTP Server for UNIX.It’s a pre-fork worker model. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.(这是官方给出的回答)

    压测方式及命令

    压测方式:

    压测命令:siege -c255 -t200S -v -b ‘http://B_ip:8080/test POST appid=111’

    本次实验业务场景

    代码展示

    settings部分

    # 这里我们用mysql,其他配置都是默认

    DATABASES = {

    'default': {

    'ENGINE': 'django.db.backends.mysql',

    'NAME': 'ce',

    'USER': 'root',

    'PASSWORD': '',

    'HOST': '192.168.96.95',

    'PORT': '3306',

    # 'CONN_MAX_AGE': 600,

    }

    }

    models部分

    class Test(models.Model):

    url = models.CharField(max_length=228, blank=True, null=True)

    img_url = models.CharField(max_length=228, blank=True, null=True)

    title = models.CharField(max_length=228, blank=True, null=True)

    content = models.CharField(max_length=228, blank=True, null=True)

    class Meta:

    db_table = 'test'

    verbose_name = "test表"

    def __unicode__(self):

    return self.id

    views部分

    class Test(APIView):

    def post(self, requsts):

    Test.objects.create(

    **{'url': str(1000000 * time.time())})

    return Response({"status": 200})

    开始压测

    数据说明

    目前数据库test表的数据量是, 其中id是自增主键

    MySQL [ce]> select id from test order by id desc limit 2;

    +--------+

    | id |

    +--------+

    | 627775 |

    | 627774 |

    +--------+

    runserver方式压测结果

    Lifting the server siege... done.

    Transactions: 24041 hits

    Availability: 99.93 %

    Elapsed time: 99.60 secs

    Data transferred: 0.32 MB

    Response time: 1.03 secs

    Transaction rate: 241.38 trans/sec # 并发量只有241

    Throughput: 0.00 MB/sec

    Concurrency: 248.94

    Successful transactions: 24041

    Failed transactions: 16

    Longest transaction: 32.55

    Shortest transaction: 0.05

    gunicorn+gevent(4个worker)

    Lifting the server siege... done.

    Transactions: 23056 hits

    Availability: 100.00 %

    Elapsed time: 99.49 secs

    Data transferred: 0.31 MB

    Response time: 1.09 secs

    Transaction rate: 231.74 trans/sec # 并发量只有231

    Throughput: 0.00 MB/sec

    Concurrency: 252.95

    Successful transactions: 23056

    Failed transactions: 0

    Longest transaction: 8.21

    Shortest transaction: 0.01

    gunicorn+gthread(4个worker, —threads=50)

    启动方式

    官方有相应说明

    gunicorn --env DJANGO_SETTINGS_MODULE=ce.settings ce.wsgi:application -w 4 -b 0.0.0.0:8080 -k gthread --threads 40 --max-requests 4096 --max-requests-jitter 512

    压测结果

    启动方式:

    done.

    siege aborted due to excessive socket failure; you

    can change the failure threshold in $HOME/.siegerc

    Transactions: 28231 hits

    Availability: 95.67 %

    Elapsed time: 30.71 secs

    Data transferred: 0.41 MB

    Response time: 0.27 secs

    Transaction rate: 919.28 trans/sec # 提高了不少吧,能不能在提高?

    Throughput: 0.01 MB/sec

    Concurrency: 251.06

    Successful transactions: 28231

    Failed transactions: 1278 # 但是失败的有些多

    Longest transaction: 8.06

    Shortest transaction: 0.01

    gunicorn+gthread+CONN_MAX_AGE(4个worker, —threads=50)

    关于CONN_MAX_AGE

    CONN_MAX_AGE: 复用数据库链接

    Lifting the server siege... done.

    Transactions: 110289 hits

    Availability: 99.62 %

    Elapsed time: 99.65 secs

    Data transferred: 1.47 MB

    Response time: 0.23 secs

    Transaction rate: 1106.76 trans/sec # 这次又提升了不少啊

    Throughput: 0.01 MB/sec

    Concurrency: 253.84

    Successful transactions: 110289

    Failed transactions: 422

    Longest transaction: 3.85

    Shortest transaction: 0.01

    能不能gunicorn+gevent+CONN_MAX_AGE(4个worker)

    这里我不建议使用,这样的话你的数据库连接数会飚的很高,服务会挂的很惨, 毕竟数据库是不会允许无休止的建立连接的

    如何再次增加并发量

    采用nginx做负载

    去掉自增主键

    原因很简单,因为自增主键的存在写库存在抢锁, 可以利用全局id生成器提前生成

    id直接写入数据库

    换成异步任务去写库

    如果数据只是存在mysql中做备份,建议使用异步的方式写入库,先把数据写到缓

    存下发给用户,之后在利用后台异步任务一点点的写入,例如聊天系统可以这样干

    换成更高效的框架或者语言

    可以试试tornado, 如果tornado依然无法满足,可以尝试使用golango,毕竟

    golang是以高并发著称, 而且是编译语言,而且基于它的web框架也很容易上手,

    性能很可观,例如Iris

    Iris官方网站

    展开全文
  • Tomcat的并发能力

    千次阅读 2020-09-25 14:08:38
    一、一些限制 Windows 每个进程中的线程数不允许超过 2000 ... 还需要考虑数据库读写的并发能力 二、Tomcat Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了, Tomcat的最大并发数是可以

    一、一些限制

    • Windows 每个进程中的线程数不允许超过 2000
    • Linux 每个进程中的线程数不允许超过 1000
    • 在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。 (并发量上来后 可能需要修改JVM参数调优)
    • 建议当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
    • 还需要考虑数据库读写的并发能力

    二、Tomcat

    Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了, Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。

    Tomcat 默认的 HTTP 实现是采用阻塞式的 Socket 通信,每个请求都需要创建一个线程处理。这种模式下的并发量受到线程数的限制,但对于 Tomcat 来说几乎没有 BUG 存在了。

    Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。但没有阻塞式的成熟。

    这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算,那并发能力势必会下降。如果每个请求都含有很多的数据库操作,那么对于数据库的性能要求也是非常高的。 对于单台数据库服务器来说,允许客户端的连接数量是有限制的。

    三、一些参数

    maxThreads="1000" 最大并发数 
    
    minSpareThreads="100"///初始化时创建的线程数
    
    maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
    
    acceptCount="700"// 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

    原文:https://www.cnblogs.com/lcword/archive/2004/01/13/11798092.html

    展开全文
  • ①Hashtable是通过对hash表整体进行锁定,是阻塞式的,当一个线程占有这个锁时,其他线程必须阻塞等待其释放锁 而ConcurrentHashMap是如下实现: ②jdk1.6的实现:ConcurrentHashMap是采用Segment分段锁的方式,它并...
  • 你是否还在为某些接口业务复杂、响应速度慢、并发量上不去而苦恼,今天给大家推荐一些小技巧,如何对复杂业务进行拆分、解耦。面对高并发可以记住这五点点:1、异步,削峰填谷;2、缓存,缓存相对稳定高频热点数据,...
  • 有关并发处理的技术文档,可做优化的参考。在节省成本的情况下,可以修改Linux的内核相关TCP参数,来最大的提高服务器性能。当然,最基础的提高负载问题,还是升级服务器硬件了,这是最根本的
  • 这是因为问题可能产生于系统中并发(指同步)地执行查询操作。实际上,在产品化的数据库系统中,同步执行查询可能引发的问题是再多的查询优化也不能解决的。我们可以有优化的、执行快的查询,但是,如果这些查询因为...
  • TOMCAT优化,提高并发能力

    千次阅读 2018-01-12 11:22:41
    很多时候,明明自己的服务器配置很高,可是在高并发时的性能并不好,这个时候就要考虑是不是TOMCAT服务器的 性能限制了并发,如果你还在烦恼服务器的性能低下,时不时的报连接失败connection refused。那就请往下看...
  • 测试服务器并发能力的工具webbench

    千次阅读 2014-09-13 14:47:35
    Webbench是一个非常简单的压力测试工具,Webbench最多可以模拟3万个并发连接去测试网站的负载能力。  (1)Webbench安装  wget http : //www.phpddt.com/soft/linux/webbench-1.5.tar.gztar zxvf webbench...
  • nginx并发连接能力优化

    千次阅读 2021-12-27 08:55:17
    一次压力测试,nginx服务器老是报告TIME_WAIT 告警, 检查nginx配置和系统网络配置发现现有的配置并发能力弱,无法满足现有的并发请求的需求。 原始配置: worker_processes 2; events { worker_connections ...
  • 什么是并发2.什么是高并发3.实现高并发需要考虑的因素3.1 高性能3.1.1 网络3.1.2 CPU3.1.3 内存3.1.3.4 IO3.2 高可用性3.3 高扩展性3.4 安全性 1.什么是并发 说到并发,期英文单词为Conurrent,如果要彻底理解并发,...
  • 该片是基于处理oracle数据库性能问题的经验写就,它是对常见的性能问题做的总结,它的适用范围: 高并发高负载的系统. 需要先申明的是: 对于所有的调优的方法,都是有适用范围的;
  • 提高SQL SERVER并发能力

    千次阅读 2012-04-06 16:46:39
    从MSDN看到这样一个解决方案:SET TRANSACTION ISOLATION LEVEL首先,设置数据库的事务隔离级别为 只读快照:READ_COMMITTED_SNAPSHOT 设置READ_COMMITTED_SNAPSHOT隔离模式很简单,只要我们简单的一步操作就可以...
  • 并发架构设计

    千次阅读 2021-03-30 16:00:01
    并发架构概述 高并发度量指标 高并发架构设计思路 高并发方案:池化技术 高并发方案:缓存 高并发方案:消息系列 高并发方案:限流 数据库高并发方案 01 概述 高并发(High Concurrency)是互联网分布式...
  • 说实话,这个问题困扰我很多年,无奈公司团队当中也无人能为我解答这个问题,言归正传,自己曾...然后通过jmeter进行压测,发现当并发请求数达到四五千的时候tomcat就支撑不住了,难道一台机器只能支撑四五千的并发量?
  • 如何提高MySQL并发能力的思路

    千次阅读 2015-03-08 18:40:06
    如何提高MySQL并发能力的思路 http://soft.chinabyte.com/database/437/12527937.shtml 1、使用行级别锁,避免表级别或页级别锁  尽量使用支持行级别锁的存储引擎,如InnoDB;只在读操作显著多于写作...
  • Quartz通过配置来优化并发能力

    千次阅读 2018-07-17 11:57:35
    先上官网地址:... Quartz 在线上出现并发瓶颈问题,造成延时触发或者不触发,可以通过他的配置文件 quartz.properties 文件来优化 Quartz-Job的quartz.properties配置文件说明,此文件在quartz的jar包有...
  • 使用Webbench测试web网站的并发能力

    千次阅读 2018-06-21 23:14:35
    Webbench是Linux下的一个网站压力测试工具,能测试处在相同...webbench最多可以模拟3万个并发连接去测试网站的负载能力我使用的是centos系统来进行测试进行之前呢,首先要安装webbench的依赖 ctags: 1.首先下载ct...
  • 到服务器的SQL最大并发连接数为16384、mysql百万级数据查询。受服务器配置和网络环境的限制,实际服务器支持的并发连接数量会更小。MySQL流量大,并发问题高因为mysql是一个线程的连接,当并发性高的时候,每秒需要...
  • 如何支持千万级并发消息量 网易IM云服务架构设计与实践 周梁伟 网易云信首席架构师 关于我 2011年 云存储产品开发 2012年 通用日志采集平台研发 2013年 网站数据分析平台研发 2014年 易信服务器研发 2015年 云信...
  • 目录 (一)什么是服务器并发处理能力(二)有什么方法衡量服务器并发处理能力1.吞吐率2.压力测试(三)怎么提高服务器的并发处理能力1,提高CPU并发计算能力(1)多进程&多线程(2)减少进程切换,使用线程,考虑...
  • 通常情况下,只要计算机性能可以,并发数没有问题,几百到几千就可以了。可以在tomcat\conf\server。xml中相应地配置。 默认Connector中没有设置最大并发数:=“假”重定向端口=“8443协议=”还可以打开上述注释,...
  • 当然支持100万并发。 首先,我们必须做出决定,把阅读和写作分开。 然后,它取决于你需要分配多少个单元用于写作和阅读。 我的SQL集群不建议您使用它,因为有太多的错误。 所有这些都需要先进行压力测试。 业务不同...
  • 本文将从提升单机并发能力的研究角度 出发,搭建一个具有高并发能力的电商购物系统。主要研究内容包括 设计并实现一套高速静态资源服务器和对现有技术框架进行优化和 整合以提升系统的并发能力。 本文在搭建一个高...
  • 尝试将并发数减小,错误依旧,尝试将并发数改为1,结果如下图:![图片说明](https://img-ask.csdn.net/upload/201707/07/1499398883_95740.png); nginx服务也确实启动了,并且可以通过浏览器访问: ![图片说明]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 419,758
精华内容 167,903
关键字:

并发能力