0
点赞
收藏
分享

微信扫一扫

关于异步化带来的高并发和高吞吐量的分享


对于系统的并发量的提高的优化,除了对模块内部性能以及切分,分流等的考虑外,



我把以前做过的开放平台的并发和吞吐量的优化的经验分享一下



 



A、B、C、D之间是分布式调用,统一由http接入A系统




关于异步化带来的高并发和高吞吐量的分享_ViewUI


 


 


传统方式:各个系统之间是同步的阻塞调用,包括Http接入也是阻塞式的。


                  当用户并发比较大的时,常见的现象时各个系统线程处于阻塞状态,线程相关的资源耗尽,系统的并发量上不去,相关的CPU等其实也不高。


                  因A系统要等待所有的后台调用都完成后,才释放接收的线程,返回结果,所以这个特别在A系统比较明显;间接导致无法提供足够的并发量给后面的D系统。·


异步化方式(SEDA):针对高并发的分布式系统,NIO方式很早提出来就是针对这个问题的,包括两部分,


                     一部分是后端系统之间的异步,典型的是Netty、Mina、xsocket等成熟的框架,


                    另外一部分是前端接入http的异步servlet(都有相应的规范), 在Http1.1中支持,对客户端LCP来讲是同步调用的的。典型是有Jetty6、jetty7、tomcat6、tomcat7以及其他商业服务器都有实现。


                     基本思想都是采用非阻塞方式,接受线程和工作线程分离,提高整 个系统的吞吐量。


                     好处是,整个系统的可用性大大增加,系统之间耦合度大大降低,并且有比较高的吞吐量,各个系统能高速运转,不会相互等待资源,可以充分利用资源。同时整个系统也可以有很好的伸缩性。


                     弊端是,中肯的讲,对CPU的要求还是比较高的。


                     


对于分布式系统的调用,关注可用性的同时,也需要关注一致性,传统的事务(JTA、数据库)都不能很好无法解决(对性能也有比较大的影响),


业界对一致性的做法,利用CAP BASE原理,进行交易的冲正(支付系统、银行交易、电信生产系统都是这个做法)。



举报

相关推荐

0 条评论