作者回复: 并发数只消耗内存,所以单纯看并发数的话,只要每连接消耗更小的内存就可以了。所以,一般看并发数时,一定要看吞吐量,也就是每秒处理多少请求。此时,已经是结合具体场景了,变数增大了。 比如针对静态资源,nginx所在主机需要分配更多的CPU资源去读取文件,如果是大文件,那么通常还需要开启aio/directIO等提高性能(磁盘页缓存没效果),往往output_buffer要打开,每连接至少要多消耗几十KB的内存。 所以,就目前普通主机性能看,百万或者千万这个量级是有可能达到的,但结合具体场景后,需要做调整。
作者回复: 其实这里的5条线没有明确的指代,只是为了说明高并发往往导致吞吐量下降(RPS)。如果你看过类似unix网络编程这样的书,例子里提到的多进程或者多线程处理并发连接,那么依据这种方法开发出的服务就类似图中线条的趋势,而各自的代码如果效率更高,或者功能更简单,比如绿色的线,就会晚一点开始陡峭的下降。
作者回复: 这里,连接指的是TCP连接,可以在连接上进行双向的消息发送和接收。请求这里指的是http请求。每个http请求必须对应一个http响应,这是一次完整请求。一个连接上可以持续多个http请求的传输,这叫做http协议中的keepalive长连接。
作者回复: 缺点就是开发nginx模块需要的技术要求比较高。即使使用openresty后lua语言简化了许多,但仍然需要我们理解同步化与非阻塞接口,开发成本还是相对高一些的。
作者回复: 你好po,上下游有多台主机时,端口不会限制,因为IP的范围非常大。 1、对下游,TCP四元组中,dst port和dst ip是固定的,但src port和src ip可以组合出百万连接。 2、对上游也一样,src port和src ip是固定的,但dst port 和dst ip没有固定。
作者回复: 性能最关心两个指标:并发和吞吐量
作者回复: 你好po, 1、并发针对的是连接。 2、一对一是不可能达到百万连接的,除非大量使用虚拟IP。一对多才存在百万并发。
作者回复: 比如第二部分课程开始说到的热升级,是部署时必须考虑的 点。如果你用killall加替换binary的方式,就没有可靠性了
作者回复: ^_^
作者回复: 最主要因素是全异步事件驱动,你可以看下27-32课