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

对于系统的并发量的提高的优化,除了对模块内部性能以及切分,分流等的考虑外,
我把以前做过的开放平台的并发和吞吐量的优化的经验分享一下
 
A、B、C、D之间是分布式调用,统一由http接入A系统
 
 
传统方式:各个系统之间是同步的阻塞调用,包括Http接入也是阻塞式的。
                  当用户并发比较大的时,常见的现象时各个系统线程处于阻塞状态,线程相关的资源耗尽,系统的并发量上不去,相关的CPU等其实也不高。
                  因A系统要等待所有的后台调用都完成后,才释放接收的线程,返回结果,所以这个特别在A系统比较明显;间接导致无法提供足够的并发量给后面的D系统。·
异步化方式(SEDA):针对高并发的分布式系统,NIO方式很早提出来就是针对这个问题的,包括两部分,
                     一部分是后端系统之间的异步,典型的是Netty、Mina、xsocket等成熟的框架,
                    另外一部分是前端接入http的异步servlet(都有相应的规范), 在Http1.1中支持,对客户端LCP来讲是同步调用的的。典型是有Jetty6、jetty7、tomcat6、tomcat7以及其他商业服务器都有实现。
                     基本思想都是采用非阻塞方式,接受线程和工作线程分离,提高整 个系统的吞吐量。
                     好处是,整个系统的可用性大大增加,系统之间耦合度大大降低,并且有比较高的吞吐量,各个系统能高速运转,不会相互等待资源,可以充分利用资源。同时整个系统也可以有很好的伸缩性。
                     弊端是,中肯的讲,对CPU的要求还是比较高的。
                     
对于分布式系统的调用,关注可用性的同时,也需要关注一致性,传统的事务(JTA、数据库)都不能很好无法解决(对性能也有比较大的影响),
业界对一致性的做法,利用CAP BASE原理,进行交易的冲正(支付系统、银行交易、电信生产系统都是这个做法)。
http://blog.csdn.net/yangbutao/article/details/7437297

猜你喜欢

转载自nethub2.iteye.com/blog/2366472
今日推荐