一个困扰很久的架构问题
举个例子:A机器nginx并发顶不住了,百度还是问别人说加B,C机器,B做负载均衡,流量分给A、C,后面还可以直接加D、E。。。
那么就有个疑惑,A顶不住,B为什么就能顶住还能做分发?
并发起来的时候就算没有复杂业务网络IO、大量time_wait能通过这种方式解决掉?
回答:
我的理解:你说的A机器nginx并发顶不住是只有A一台机器同时部署了nginx和真实服务,别人说的加B,C机器,是加了2台机器,其中B只做负载均衡,A、C部署真实服务;
1、nginx是专门做负载均衡反向代理的软件,应用广泛,它的处理速度极快,在这种架构中极少可能最先出现性能瓶颈(要出现性能瓶颈也是需要查数据库,处理业务逻辑的后端真实服务先出现);
2、在只有A机器的时候,因为只部署了一个真实服务处理请求,所以真实服务的处理请求的能力可能就是影响并发的主要原因,这个时候部署多几个真实服务理论上可以提高并发;
3、time_wait可以通过更改内核参数加快回收速度和复用等解决;
4、后面还可以直接加D、E,我认为这个不对,当你的后端服务加到一定数量时,也许瓶颈就不在这了,这个时候瓶颈可能在数据库,如果数据库时瓶颈,那你加D、E就没有任何意义了。
回答:
B 机器做代理层 B机器比如使用nginx做层LBS,你可以把它理解成getway网关层,只需要增加带宽就行,流量进来分发给a,c,d机器进行业务处理,
回答:
因为只做分发的话,花不了多少内存和性能!
也就是 A B C D
其中 B
只做分发, A C D
其中做业务,你可以想像一下, 如果自有 A 做业务,那么当 100 个请求来临的时候, A 开了 100 个线程或协程, 每一个线程都在实际运行业务,运行业务需要消耗很大的 内存
和 CPU
, 而 B 的 nginx
分发服务器,他不做任何业务,仅仅只是拿到请求,然后转发 给 A C D
后挂起了, 等到 A C D
返回处理结果后把结果返回给前端就完事了,其中不做任何处理,而 NIO
下的 nginx
每个连接仅仅占用 KB
级的内存。
以上是 一个困扰很久的架构问题 的全部内容, 来源链接: utcz.com/p/944168.html