java高并发的解决方案

java高并发的解决方案

ID:12961912

大小:16.22 KB

页数:10页

时间:2018-07-19

java高并发的解决方案_第1页
java高并发的解决方案_第2页
java高并发的解决方案_第3页
java高并发的解决方案_第4页
java高并发的解决方案_第5页
资源描述:

《java高并发的解决方案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java高并发的解决方案  对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题!下面是小编分享的,欢迎大家阅读!   【java高并发的解决方案】一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同回的服务器上进行操作。我酒推荐的是M-M-Sla与ves方式,2个主My丰sql,多个Slave凛s,需要注意的是,虽然

2、耸有2个Master,但联是同时只有1个是Act森ive,我们可以在一定瘤时候切换。之所以用2个蘸M,是保证M不会又成为渔系统的SPOF。   S真laves可以进一步负铀载均衡,可以结合LVS纹,从而将select操酸作适当的平衡到不同的s各laves上。   以上揩架构可以抗衡到一定量的伏负载,但是随着用户进一扫步增加,你的用户表数据隧超过1千万,这时那个M英变成了SPOF。你不能羽任意扩充Slaves,棠否则复制同步的开销将直辉线上升,怎么办?我的方痘法是表分区,从业务层面痊上进行分区。最简单的,狱以用户数据为例。根据一怜

3、定的切分方式,比如id沾,切分到不同的数据库集赋群去。   全局数据库用屹于meta数据的查询。制缺点是每次查询,会增加弯一次,比如你要查一个用叼户nightsaile烃r,你首先要到全局数据质库群找到nightsa去iler对应的clus照terid,然后再到指陋定的cluster找到讹nightsailer顿的实际数据。每个clu谴ster可以用m-m方锡式,或者m-m-sla湖ves方式。这是一个可炸以扩展的结构,随着负载腻的增加,你可以简单的增畦加新的mysqlclu拍ster进去。 网站HT帕ML静态化解决方案   奈

4、当一个Servlet资喊源请求到达WEB服务器始之后我们会填充指定的J驮SP页面来响应请求:  艾 HTTP请求---W沉eb服务器---Ser称vlet--业务逻辑处踢理--访问数据--填充序JSP--响应请求 HT纪ML静态化之后:   H雀TTP请求---Web砷服务器---Servl壶et--HTML--响贬应请求 缓存、负载均衡、阀存储、队列   1.缓存祟是另一个大问题,我一般胞用memcached来杂做缓存集群,一般来说部垛署10台左右就差不多(盅10g内存池)。需要注秀意一点,千万不能用使用糠 swap,最好关闭

5、li遥nux的swap。   衬2.负载均衡/加速。可爷能上面说缓存的时候,有周人第一想的是页面静态化猿,所谓的静态html,灭我认为这是常识,不属于巨要点了。页面的静态化随脑之带来的是静态服务的负尹载均衡和加速。我认为L修ighttped+Sq豫uid是最好的方式了。疫   LVSlightt孕ped====>squ云id(s)====li榴ghttpd   上面是怂我经常用的。注意,我没忧有用apache,除非淫特定的需求,否则我不部镍署apache,因为我棋一般用php-fast幌cgi配合lightt饵pd,性能比apa

6、ch烹e+mod_php要强笋很多。   squid的碴使用可以解决文件的同步锌等等问题,但是需要注意卞,你要很好的监控缓存的预命中率,尽可能的提高的涡90%以上。   squ璃id和lighttpe论d也有很多的话题要讨论霸,这里不赘述。   3.稍存储。也是一个大问题,疥一种是小文件的存储,比织如图片这类。另一种是大札文件的存储,比如搜索引窝擎的索引,一般单文件都仪超过2g以上。   小文明件的存储最简单的方法是揣结合lighttpd来叠进行分布。或者干脆使用狱Redhat的GFS,铡优点是应用透明,缺点是颓费用较高。我是指

7、   你抄购买盘阵的问题。我的项要目中,存储量是2-10载Tb,我采用了分布式存援储。这里要解决文件的复援制和冗余。   这样每个摇文件有不同的冗余,这方越面可以参考google阑的gfs的论文。   大圆文件的存储,可以参考n淖utch的方案,现在已卸经独立为hadoop子蛀项目。(你可以goog兆leit)   4.队列猴。将并发线程转换为单线效程,如果用java的c允oncurrentCo疽llection类去做障,原理就是启动一个线程僳,跑一个Queue,并弥发的时候,任务压入Qu茹eue,线程轮训读取这疼个Queue,

8、然后一个太个顺序执行。   一旦并乎发转成单线程,那么其中聚一个线程一旦出现性能问切题,必然整个处理都会放薪慢。所以在单线程中的任切何操作绝对不能涉及到I洞O处理。那数据库操作怎屋么办?   增加缓存。这戏个思路很简单,直接从内击存读取,必然会快。至于弛写、更新

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。