java高并发的解决方案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java?高并发的解决方案   对于我们开发的网站,如果网站的访问量非常大的话, 那么我们就需要考虑相关的并发访问问题了。而并发问题 是绝大部分的程序员头疼的问题!下面是小编分享的,欢迎 大家阅读!   【java?高并发的解决方案】  一般来说?MySQL?是最 常用的,可能最初是一个?mysql?主机,当数据增加到?100 万以上,那么,MySQL?的效能急剧下降。常用的优化措施是 M-S(主-从)方式进行同步复制,将查询和操作和分别在不 同的服务器上进行操作。我推荐的是?M-M-Slaves?方式,2 个主?Mysql,多个?Slaves,需要注意的是,虽然有?2?个 Master,但是同时只有?1?个是?Active,我们可以在一定时 候切换。之所以用?2?个?M,是保证?M?不会又成为系统的 SPOF。   Slaves?可以进一步负载均衡,可以结合?LVS,从而将 select?操作适当的平衡到不同的?slaves?上。   以上架构可以抗衡到一定量的负载,但是随着用户进 一步增加,你的用户表数据超过?1?千万,这时那个?M?变成 了?SPOF。你不能任意扩充?Slaves,否则复制同步的开销将 直线上升,怎么办?我的方法是表分区,从业务层面上进行 分区。最简单的,以用户数据为例。根据一定的切分方式, 比如?id,切分到不同的数据库集群去。   全局数据库用于?meta?数据的查询。缺点是每次查询, 会增加一次,比如你要查一个用户?nightsailer,你首先要 到全局数据库群找到?nightsailer?对应的?cluster id,然 后再到指定的?cluster?找到?nightsailer?的实际数据。每 个?cluster?可以用?m-m?方式,或者?m-m-slaves?方式。这是 一个可以扩展的结构,随着负载的增加,你可以简单的增 加新的?mysql?cluster?进去。   网站?HTML?静态化解决方案   当一个?Servlet?资源请求到达?WEB?服务器之后我们会 填充指定的?JSP?页面来响应请求:   HTTP?请求---Web?服务器---Servlet--业务逻辑处理-- 访问数据--填充?JSP--响应请求   HTML?静态化之后:   HTTP?请求---Web?服务器---Servlet--HTML--响应请求   缓存、负载均衡、存储、队列   1.缓存是另一个大问题,我一般用?memcached?来做缓 存集群,一般来说部署?10?台左右就差不多(10g?内存池)。 需要注意一点,千万不能用使用   swap,最好关闭?linux?的?swap。   2.负载均衡/加速。可能上面说缓存的时候,有人第一 想的是页面静态化,所谓的静态?html,我认为这是常识, 不属于要点了。页面的静态化随之带来的是静态服务的负 载均衡和加速。我认为?Lighttped+Squid?是最好的方式了。   LVS?lighttped====squid(s)?====lighttpd   上面是我经常用的。注意,我没有用?apache,除非特 定的需求,否则我不部署?apache,因为我一般用?php- fastcgi?配合?lighttpd,性能比?apache+mod_php?要强很多。   squid?的使用可以解决文件的同步等等问题,但是需要 注意,你要很好的监控缓存的命中率,尽可能的提高的?90% 以上。   squid?和?lighttped?也有很多的话题要讨论,这里不赘 述。   3.存储。也是一个大问题,一种是小文件的存储,比 如图片这类。另一种是大文件的存储,比如搜索引擎的索 引,一般单文件都超过?2g?以上。   小文件的存储最简单的方法是结合?lighttpd?来进行分 布。或者干脆使用?Redhat?的?GFS,优点是应用透明,缺点 是费用较高。我是指   你购买盘阵的问题。我的项目中,存储量是?2-10Tb, 我采用了分布式存储。这里要解决文件的复制和冗余。   这样每个文件有不同的冗余,这方面可以参考?google 的?gfs?的论文。   大文件的存储,可以参考?nutch?的方案,现在已经独 立为?hadoop?子项目。(你可以?google?it)   4.队列。将并发线程转换为单线程,如果用?java?的 concurrentCollection?类去做,原理就是启动一个线程, 跑一个?Queue,并发的时候,任务压入?Queue,线程轮训读 取这个?Queue,然后一个个顺序执行。   一旦并发转成单线程,那么其中一个线程一旦出现性 能问题,必然整个处理都会放慢。所以在单线程中的任何 操作绝对不能涉及到?IO?处理。那数据库操作怎么办?   增加缓存。

文档评论(0)

xiaoluping2000 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档