java服务器开发 高并发

a455295165 2015-07-17 02:27:49
现在的情况是用的 springMVC和spring框架,
运行在tomcat上,由于现在 整个项目的 访问量 不会太大,所以没有过多考虑 高并发的事,现在对于高并发的处理方案是 多开几台服务器。

然而对于以后来说,访问量会不断增大,我想问下 除了采用 这种硬扩展的方式 解决高并发 还有哪些其他的方案?
也就是说 对于一台服务器,怎么让它能处理的并发量尽量提高?
是需要把tomcat换成其他web 容器吗?也就是说让 springmvc的项目部署在其他容器中
或者需要做些什么配置?
由于在这方面基础很薄弱,所以请大家能出下注意。
...全文
474 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
a455295165 2015-08-17
  • 打赏
  • 举报
回复
很抱歉现在才结贴, 我们项目部署在aws上面的,使用了 cdn服务,服务器集群服务, aws都已经帮我们实现了 以上网友提到 动静分离,集群服务, 另外在代码上我试了 springmvc 的 异步支持,测试发现 高并发的时候 效率貌似要快很多。 多谢各位
呵呵一笑哈 2015-07-21
  • 打赏
  • 举报
回复
nginx,Apache应该都可以作为反向服务器分摊请求,其他布置tomcat即可,问题是你们的数据库怎么办
熊哥club 2015-07-18
  • 打赏
  • 举报
回复
web集群部署
liangtu 2015-07-18
  • 打赏
  • 举报
回复
在前台(js)方面增加必要的校验、控制,拦截无效请求。
Inhibitory 2015-07-18
  • 打赏
  • 举报
回复
如果瓶颈不在数据库,而是大量并发导致 Tomcat 服务器压力过大,最简单的就是用Nginx做负载均衡,多加几台机器开多个 Tomcat 服务器组成集群就可以了,同时,图片,js,css等静态资源放到Nginx所在机上上访问,不要从Tomcat访问,就是所谓的动静分离,如果一层Nginx不够,那就多加一层Nginx,第二层有多个Nginx。 通过简单的配置,Nginx 可以实现反向代理,负载均衡,动静分离,URL 重写等。 Nginx 负载均衡 http://qtdebug.com/java/Nginx%20负载均衡.html
搞什么哦 2015-07-18
  • 打赏
  • 举报
回复
1、代码质量,不要性能低下的sql和代码。有的一条sql搞定的事,有人用了多个循环才能搞定。取决于程序员的经验! 2、项目前期的规划,由于java历史多用于企业开发,导致好多团队至今依然思想僵化。其实并发最高的是互联网,他们有很多非常好的实践经验和架构是可以直接照搬过来用的。tomcat的并发取决于每个请求执行的占用时常,如果一个请求耗时1秒,那按tomcat开启的线程数默认就几十个。江湖谣传tomcat并发400/秒左右,但是我又看到有的人说单机过万/秒,其实就是测试场景中请求执行时间不同,结果不同。 那么重点来了,项目前期的规划很重要。我们可以预测下将来的场景,目的不是为了现在实现。而是为了将来留有余地,太早实现会增加项目的复杂度和实现难度,前期出结果很重要。当然如果公司能忍受慢工出细活也行! web高并发的核心肯定是集群,前面有人回答了。这个不用怀疑!所有公司都是这么实现的。 那么,为了现在活着将来的集群,我们要做什么准备?大概说一些会用到,希望对你有所帮助。 1、动静分离,静态资源请求与动态请求分离,项目中需要访问的图片、声音、js/css等静态资源需要有独立的存放位置,便于将来实现静态请求分离时直接剥离出来,比如nginx可以直接配置图片文件直接访问目录,而不需要经过tomcat。这样tomcat就可以专注处理动态请求,操作数据库数据处理之类的。静态请求代理服务器性能比tomcat高很多。 2、引入缓存,数据库缓存、页面缓存,这东西好用不复杂,搞明白什么地方适用最重要。简单的例子是频繁读取,不修改的地方最适用。也是后续集群做数据共享的一个方式之一,集群环境下,经常会碰到数据共享问题。 3、如果将来数据量大,单一数据库成为瓶颈时,数据库的读写分离来了。数据库集群,读写分离,分表分区。mysql对读写分离这些还是有点支持的,没仔细用过。 4、如果项目发展壮大了,已经过亿用户了,ok系统拆分来了。用户管理系统、订单系统,或者体育新闻系统、娱乐新闻系统等。保证一个系统当掉时不影响另一个,同时分担单系统压力。每个系统之下是前面3条!! 如果这一切都还搞不定,那你公司一定比谷歌还牛B了,哈哈……可喜可贺! 前期做下1和2就可以了,集群不一定要增加服务器,一台服务器如果配置好,多开几个tomcat就可以了。1个400,10个tomcat就是4000呢!其实这些,看阿里巴巴的云服务就知道,他们就是这么用的,有谁比它对高并发更有发言权!以上不是广告…… 什么cdn、lds之类的都是为了高并发,更快处理用户请求而生!拼音打字,错别字多望见谅,不全面望指正,学习之。
开拓者Amadues 2015-07-17
  • 打赏
  • 举报
回复
没明白多几台服务器有什么用?把所有的程序在各服务器上都部署一遍?
  • 打赏
  • 举报
回复
其实最开始对于高并发的想法,我的理解是: 1、业务处理方面,需要同步处理的地方就 用同步,每次更新操作先查询在处理 2、与数据交互方面用乐观锁,也能避免一定量的并发 3、提高服务器的运行处理速度(具体就不知道了)
a455295165 2015-07-17
  • 打赏
  • 举报
回复
引用 5 楼 Mr_yyy 的回复:
[quote=引用 4 楼 a455295165 的回复:] 然后 我在想把这个 把这个 处理 以异步方式实现 会不会好很多? 而且 springMVC现在也支持异步实现了,那么要不要考虑也用异步实现?
如果业务上不要求资源同步(比如只涉及查询或者个人信息方面的修改,而不涉及到临界资源),可以完全不用同步呀。[/quote] 嗯 我先尝试下 能不能用异步来处理
a455295165 2015-07-17
  • 打赏
  • 举报
回复
引用 2 楼 Mr_yyy 的回复:
最基本的就是优化代码了。既然是并发操作,肯定涉及到同步问题,一次操作时是锁定一个方法、一个对象还是某几行代码块,这种斟酌也可以提高并发效率的
所以我在想 能不能把 这个操作换成异步来实现。
引用 3 楼 shijing266 的回复:
原本想提点数据库实体方面的建议的,看了下你补充的... 还是帮顶吧...
谢顶啊
Mr_yyy 2015-07-17
  • 打赏
  • 举报
回复
引用 4 楼 a455295165 的回复:
然后 我在想把这个 把这个 处理 以异步方式实现 会不会好很多? 而且 springMVC现在也支持异步实现了,那么要不要考虑也用异步实现?
如果业务上不要求资源同步(比如只涉及查询或者个人信息方面的修改,而不涉及到临界资源),可以完全不用同步呀。
a455295165 2015-07-17
  • 打赏
  • 举报
回复
然后 我在想把这个 把这个 处理 以异步方式实现 会不会好很多? 而且 springMVC现在也支持异步实现了,那么要不要考虑也用异步实现?
  • 打赏
  • 举报
回复
原本想提点数据库实体方面的建议的,看了下你补充的... 还是帮顶吧...
Mr_yyy 2015-07-17
  • 打赏
  • 举报
回复
最基本的就是优化代码了。既然是并发操作,肯定涉及到同步问题,一次操作时是锁定一个方法、一个对象还是某几行代码块,这种斟酌也可以提高并发效率的
a455295165 2015-07-17
  • 打赏
  • 举报
回复
对了,服务器的数据操作 不是对数据库进行操作,而是 发送http请求 上游服务器 请求结果,这里面是采用的是 同步操作,不知道这会不会在访问量过大的时候 影响 速度

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧