18 | 单服务器高性能模式:PPC与TPC
18 | 单服务器高性能模式:PPC与TPC
讲述:黄洲君
时长09:37大小4.40M
PPC
prefork
TPC
prethread
小结
赞 40
提建议
精选留言(84)
- 鹅米豆发2018-06-07不同并发模式的选择,还要考察三个指标,分别是响应时间(RT),并发数(Concurrency),吞吐量(TPS)。三者关系,吞吐量=并发数/平均响应时间。不同类型的系统,对这三个指标的要求不一样。 三高系统,比如秒杀、即时通信,不能使用。 三低系统,比如ToB系统,运营类、管理类系统,一般可以使用。 高吞吐系统,如果是内存计算为主的,一般可以使用,如果是网络IO为主的,一般不能使用。展开
作者回复: 赞,分析到位
共 4 条评论184 - Regular2018-06-07我怎么觉得,凡是高并发请求的系统都适合本节讲的高性能模式?!
作者回复: 高并发需要根据两个条件划分:连接数量,请求数量。 1. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 你再尝试分析一下看看😃
共 6 条评论100 - W_T2018-06-08老师在文章和留言里已经透露答案了。 首先,PPC和TPC能够支持的最大连接数差不多,都是几百个,所以我觉得他们适用的场景也是差不多的。 接着再从连接数和请求数来划分,这两种方式明显不支持高连接数的场景,所以答案就是: 1. 常量连接海量请求。比如数据库,redis,kafka等等 2. 常量连接常量请求。比如企业内部网址展开
作者回复: 回答正确😃😃
共 2 条评论84 - JackLei2018-06-13看到这篇文章,这个专栏的价值远远远远远远远远远远远远远远远远大于专栏购买的价格。
作者回复: 这篇这么值呀😄其实我觉得前面的更值,架构本质,架构设计目的,架构设计原则,架构设计流程……都是就此一家,别无分店😄
37 - 正是那朵玫瑰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. 海量连接情况下,单机也要支持很多连接,不然集群成本太高
共 3 条评论36 - peison2018-07-24请教一个比较小白的问题…为什么说门户网站是海量连接常量请求的情况?海量连接下为什么会常量请求,一直想不通
作者回复: 海量连接:连接的用户很多 常量请求:每个用户请求数量不多,大部分都是看完一篇文章再去点击另外的文章
共 5 条评论27 - 公号-技术夜未眠2018-06-07BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。可以适用于小到中规模的客户端并发数场景,无法胜任大规模并发业务。如果编程控制不善,可能造成系统资源耗尽。 NIO:利用多路复用IO技术,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动。 NIO最适用于“高并发”的业务场景,所谓高并发一般是指1ms内至少同时有成百上千个连接请求准备就绪,其他情况下NIO技术发挥不出它明显的优势。展开19
- 孙晓明2018-06-22李老师,看完文章后查了一下bio和nio,还有一种aio,看的不是太明白,能麻烦您解答一下,并且它与nio的差别在哪里?
作者回复: bio:阻塞io,PPC和TPC属于这种 NIO:多路复用io,reactor就是基于这种技术 aio:异步io,Proactor就是基于这种技术
共 4 条评论18 - 小文同学2018-06-07PPC和TPC对那些吞吐量比较大,长连接且连接数不多的系统应该比较适用。两种模式的特点都比较重,每个连接都能占有较多计算资源,一些内部系统,如日志系统用于实时监控的估计可以采用。这类型的系统一般连接数不多,吞吐量比较大,不求服务数量,求服务质量。不知道这样的假设符不符合?
作者回复: 回答正确
15 - 胖胖的程序猿2019-04-011. 海量连接(成千上万)海量请求:例如抢购,双十一等 2. 常量连接(几十上百)海量请求:例如中间件 3. 海量连接常量请求:例如门户网站 4. 常量连接常量请求:例如内部运营系统,管理系统 这个不理解,连接和请求有什么区别展开
作者回复: 一个连接就是TCP连接,一个连接每秒可以发一个请求,也可以发几千个请求
共 4 条评论14 - 无聊夫斯基2018-08-22我无法想到ppc比tpc更适合的场景
作者回复: tpc异常时整个服务器就挂了,而ppc不会,所以ppc适合数据库,中间件这类
共 5 条评论14 - LakNeumann2018-06-23大神, ……纯新手感觉这里读起来已经有点吃力了 ~ 好难啊
作者回复: 这是操作系统基础,可以看看《UNIX网络编程 卷一》
13 - 云学2018-06-07希望再多写几篇讲解单机性能优化,比如线程模型,数据库,网络等,猜测下一篇讲IO复用了吧
作者回复: 具体的技术细节点好多,专栏聚焦架构。 一些常见的细节点如下: java:推荐看disruptor的设计论文,包括false sharing, 并发无锁,ring buffer等; 网络:tcp_nodelay,NIO; 内存:内存池,对象池,数据结构 存储:磁盘尾部追加,LSM;
13 - 孙振超2018-07-09本章中提到的几个概念,比如阻塞、非阻塞、同步、异步以及主要的两种方式ppc和tpc,以前都是记住了,今天通过这篇文章是理解了而不再是记住了。 ppc和tpc都是有一个进程来处理链接,收到一个请求就新创建一个进程或线程来处理,在处理完成之前调用方是处于阻塞状态,这种机制决定了单机容量不会太大。 但在文章中提到数据库一般是ppc模式,但数据库通常是链接数少请求量大的场景,为什么会采用这种模式呢?reactor模式为什么不适合数据库?还望老师解惑,多谢!展开
作者回复: 数据库链接数少请求量大,所以单线程或者单进程io轮询性能也高,因为一直都有数据处理,不会浪费时间阻塞等待,但数据库的引擎可以是多线程或者多进程,也就是说一条链接的请求交给引擎后,引擎可以是多线程来处理。 reactor适应于连接数很大但活动连接并没有那么多的场景,例如互联网web服务器,reactor功能上也可以用于数据库,只是关系数据库都是历史悠久,久经考验,没有必要把原来的模式改为reactor
10 - james2018-06-07互联网高并发的系统全部适应啊,现在C10K已经不是问题了,有些可优化度较高的系统(例如读多写少的系统)C100k的性能都很常见了
作者回复: 互联网用ppc和tpc的不多呢,尤其是海量连接的场景
9 - 海军上校2018-08-08如何系统的学习liunx~ 包括网络~文件系统~内存管理~进程管理~然后串起来形成面呢😂
作者回复: 系统学习最好的方式就是看书,推荐《Unix环境高级编程》《Linux系统编程》
共 2 条评论8 - Hanson2018-11-24如果针对自内部系统,是否使用长链接性能损耗较低,毕竟频繁建链拆链性能损耗还是不小的,尤其是TLS的情况下
作者回复: 内部系统长连接多,例如各种中间件,数据库
7 - 盘尼西林2020-03-24怎么理解常量连接 海量请求。 如果请求多的话,连接还会是常量么?
作者回复: 常量连接海量请求:100个连接,每个连接每秒发10000个请求,例如数据库 海量连接常量请求:100000个连接,每个连接每秒发1个请求,例如nginx
6 - 文竹2018-08-19PPC适合对稳定性要求高,但并发量不大的场景,对于互联网的场景不适合。 TPC支持的并发量大,适合互联网产品场景。对于支持稳定性,需要创建冗余进程。
作者回复: TPC支持的并发量也不大呢
5 - 星火燎原2018-06-07像您说的这种多进程多线程模式好似更加稳定,但是tomcat为什么采用单进程多线程模型呢?
作者回复: tomcat是java语言开发的,java用线程是最好的
5