• 鹅米豆发
    2018-06-07
    不同并发模式的选择,还要考察三个指标,分别是响应时间(RT),并发数(Concurrency),吞吐量(TPS)。三者关系,吞吐量=并发数/平均响应时间。不同类型的系统,对这三个指标的要求不一样。
           三高系统,比如秒杀、即时通信,不能使用。
           三低系统,比如ToB系统,运营类、管理类系统,一般可以使用。
           高吞吐系统,如果是内存计算为主的,一般可以使用,如果是网络IO为主的,一般不能使用。

    作者回复: 赞,分析到位

    
     93
  • W_T
    2018-06-08
    老师在文章和留言里已经透露答案了。
    首先,PPC和TPC能够支持的最大连接数差不多,都是几百个,所以我觉得他们适用的场景也是差不多的。
    接着再从连接数和请求数来划分,这两种方式明显不支持高连接数的场景,所以答案就是:
    1. 常量连接海量请求。比如数据库,redis,kafka等等
    2. 常量连接常量请求。比如企业内部网址

    作者回复: 回答正确😃😃

    
     32
  • 武坤
    2018-06-07
    我怎么觉得,凡是高并发请求的系统都适合本节讲的高性能模式?!

    作者回复: 高并发需要根据两个条件划分:连接数量,请求数量。
    1. 海量连接(成千上万)海量请求:例如抢购,双十一等
    2. 常量连接(几十上百)海量请求:例如中间件
    3. 海量连接常量请求:例如门户网站
    4. 常量连接常量请求:例如内部运营系统,管理系统
    你再尝试分析一下看看😃

     1
     31
  • 正是那朵玫瑰
    2018-06-08
    根据华仔回复留言的提示,分析下
    1. 海量连接(成千上万)海量请求:例如抢购,双十一等
    这样的系统,我觉得这讲所说的模式都不适应,面对海量的连接至少要使用IO复用模型或者异步IO模型,针对海量的请求,无论使用多进程处理还是多线程,单机都是无法支撑的,应该集群了吧。
    2. 常量连接(几十上百)海量请求:例如中间件
    常量连接,我觉得这讲的模式应该可以适用,如使用TPC的preyhtead模型,启动几十上百的线程去处理连接,应该问题不大吧,但是老师举的列子是中间件是这类系统,我就有点疑问了,是不是中间件系统都可以是阻塞IO模型来实现,比如activemq既支持BIO也支持NIO,但是NIO只是解决了能处理更多的连接,而真正每个请求的处理快慢还得看后面的业务的处理;而阿里的rocketmq也是使用netty这样的NIO框架实现的。但在面对常量连接的场景下,NIO并没有优势啊。
    3. 海量连接常量请求:例如门户网站
    这种系统我觉得非常适合使用netty这样的NIO框架来实现,IO复用模型可以处理海量的连接,而每个连接的请求数据量会很小,处理会很长快,如华仔说的门户网站,只要简单返回页面即可。
    4. 常量连接常量请求:例如内部运营系统,管理系统
    这种系统,本讲的模式就很适合了。

    水平有限,望华仔指点下。
    展开

    作者回复: 写的很好,你的疑问补充如下:
    1. 常量连接模式下NIO除了复杂一点外,也没有缺点,因此也可以用。

    2. 海量连接情况下,单机也要支持很多连接,不然集群成本太高

     1
     18
  • JackLei
    2018-06-13
    看到这篇文章,这个专栏的价值远远远远远远远远远远远远远远远远大于专栏购买的价格。

    作者回复: 这篇这么值呀😄其实我觉得前面的更值,架构本质,架构设计目的,架构设计原则,架构设计流程……都是就此一家,别无分店😄

    
     13
  • peison
    2018-07-24
    请教一个比较小白的问题…为什么说门户网站是海量连接常量请求的情况?海量连接下为什么会常量请求,一直想不通

    作者回复: 海量连接:连接的用户很多
    常量请求:每个用户请求数量不多,大部分都是看完一篇文章再去点击另外的文章

     1
     9
  • 公号-云原生程序员
    2018-06-07
    BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。可以适用于小到中规模的客户端并发数场景,无法胜任大规模并发业务。如果编程控制不善,可能造成系统资源耗尽。

    NIO:利用多路复用IO技术,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动。
    NIO最适用于“高并发”的业务场景,所谓高并发一般是指1ms内至少同时有成百上千个连接请求准备就绪,其他情况下NIO技术发挥不出它明显的优势。
    展开
    
     9
  • LakNeumann
    2018-06-23
    大神, ……纯新手感觉这里读起来已经有点吃力了 ~ 好难啊

    作者回复: 这是操作系统基础,可以看看《UNIX网络编程 卷一》

    
     5
  • 小文同学
    2018-06-07
    PPC和TPC对那些吞吐量比较大,长连接且连接数不多的系统应该比较适用。两种模式的特点都比较重,每个连接都能占有较多计算资源,一些内部系统,如日志系统用于实时监控的估计可以采用。这类型的系统一般连接数不多,吞吐量比较大,不求服务数量,求服务质量。不知道这样的假设符不符合?

    作者回复: 回答正确

    
     5
  • james
    2018-06-07
    互联网高并发的系统全部适应啊,现在C10K已经不是问题了,有些可优化度较高的系统(例如读多写少的系统)C100k的性能都很常见了

    作者回复: 互联网用ppc和tpc的不多呢,尤其是海量连接的场景

    
     5
  • 孙振超
    2018-07-09
    本章中提到的几个概念,比如阻塞、非阻塞、同步、异步以及主要的两种方式ppc和tpc,以前都是记住了,今天通过这篇文章是理解了而不再是记住了。
    ppc和tpc都是有一个进程来处理链接,收到一个请求就新创建一个进程或线程来处理,在处理完成之前调用方是处于阻塞状态,这种机制决定了单机容量不会太大。
    但在文章中提到数据库一般是ppc模式,但数据库通常是链接数少请求量大的场景,为什么会采用这种模式呢?reactor模式为什么不适合数据库?还望老师解惑,多谢!

    作者回复: 数据库链接数少请求量大,所以单线程或者单进程io轮询性能也高,因为一直都有数据处理,不会浪费时间阻塞等待,但数据库的引擎可以是多线程或者多进程,也就是说一条链接的请求交给引擎后,引擎可以是多线程来处理。

    reactor适应于连接数很大但活动连接并没有那么多的场景,例如互联网web服务器,reactor功能上也可以用于数据库,只是关系数据库都是历史悠久,久经考验,没有必要把原来的模式改为reactor

    
     4
  • 无聊夫斯基
    2018-08-22
    我无法想到ppc比tpc更适合的场景

    作者回复: tpc异常时整个服务器就挂了,而ppc不会,所以ppc适合数据库,中间件这类

    
     3
  • 星火燎原
    2018-06-07
    像您说的这种多进程多线程模式好似更加稳定,但是tomcat为什么采用单进程多线程模型呢?

    作者回复: tomcat是java语言开发的,java用线程是最好的

    
     3
  • xiao皮孩。。
    2019-03-29
    Chrome浏览器多进程
    
     2
  • 文竹
    2018-08-19
    PPC适合对稳定性要求高,但并发量不大的场景,对于互联网的场景不适合。

    TPC支持的并发量大,适合互联网产品场景。对于支持稳定性,需要创建冗余进程。

    作者回复: TPC支持的并发量也不大呢

    
     2
  • 海军上校
    2018-08-08
    如何系统的学习liunx~ 包括网络~文件系统~内存管理~进程管理~然后串起来形成面呢😂

    作者回复: 系统学习最好的方式就是看书,推荐《Unix环境高级编程》《Linux系统编程》

    
     2
  • blacknccccc
    2018-07-23
    ppc和tpc模式一般如何根据硬件配置计算可支持的并发数呢

    作者回复: 一般按照CPU核数*2来计算

    
     2
  • 孙晓明
    2018-06-22
    李老师,看完文章后查了一下bio和nio,还有一种aio,看的不是太明白,能麻烦您解答一下,并且它与nio的差别在哪里?

    作者回复: bio:阻塞io,PPC和TPC属于这种
    NIO:多路复用io,reactor就是基于这种技术
    aio:异步io,Proactor就是基于这种技术

    
     2
  • 大光头
    2018-06-09
    高吞吐和高稳定是互斥的,如果要高吞吐就要采用prethread模式,如果要高稳定就需要高preprocess,如果要综合,线程进程同时

    作者回复: 这就是apache的其中一个模式,线程进程结合

    
     2
  • xinsz08
    2018-06-09
    单台数据库服务器可以支撑多少并发?单台nginx 可以支撑多少呢

    作者回复: nginx反向代理可以达到3万以上,具体需要根据业务和场景测试

    
     2
我们在线,来聊聊吧