java如何解决高并发_Java Web项目如何处理高并发请求?

你可以反过来思考这个问题,如果并发变大,那么我如何能通过加机器来解决掉这个问题。

这个时候就可以根据你不同的层采取不同的策略,之前写过一点,我直接拷贝过来吧对于控制流这边,我们又可以简单地把需求分解到入口、业务、数据库、缓存、消息队列这几个子模块。

* 入口比较简单,低流量的情况下一对 Nginx,加上心跳就可以满足。即使是高流量,那么心跳+LVS也是一个漂亮的选择。当然在 DNS 层先做一次负载均衡也不错。另外,如果你的应用是有客户端的,你还可以选择发送所有入口IP到客户端,由客户端来选择,做负载均衡。

* 业务层牢记一个原则,不要保存状态,就可以轻易地做到高可用和可伸缩,状态尽量放到缓存层和数据库层,而不是自己兜着。初期两个节点,后来水平加节点就可以了。

* 数据库这方面的文档和PPT反而是最多的,高可用方面,MySQL的 master-master方案,MongoDB的 ReplicaSet 方案都不错,主要是看你的使用场景。伸缩性主要靠水平和垂直拆表,毕竟各种数据库的集群方案都有很大的缺陷,个人觉得不如放在业务逻辑层来做。另外,数据库层有条件的话就上 SSD,成本虽然贵一点,但2个数量级左右的性能提升,对你的帮助会非常非常大。

* 缓存层随着 Redis 3.0 和 Codis 这类方案的推出,反而是率先解决了缓存层的高可用问题,我觉得大家可以直接采用,在业务逻辑层搭也可以,针对不同的情况可以用一致性Hash,主备缓存等多种方式来处理。如果自己搭,那么缓存层的节点数不能少,毕竟要防止缓存失效后对数据库的冲击,一个简单的手法是缓存层和业务逻辑层混合部署,一起水平扩展。

* 消息队列一般依赖于数据库或者其他持久化层,自己的高可用和可伸缩倒是比较方便,设计时注意即可,比较值得注意的是,一般这种情况下很难保证消息队列的顺序,这也是设计时需要考虑的,不依赖于消息顺序即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值