我的理解,,高并发就是在大量用户同一时段浏览网站,包括访问主页,查询信息,或者其他操作。所有的请求涌入服务器;这个时候服务器压力很大;这就是我目前理解的高并发。然后网站开发可能会用到消息队列,如:rabbitmq, 当执行秒杀活动的时候,前端大量的请求涌入后台控制器,这里我理解有高并发存在,所以我觉得有问题,这里可能让服务器崩溃;假如此时前端请求都被处理了,把信息写入了rabbitMq,然后接口也消费了这些消息;但是处理了需要把结果反馈给前端,我看有的人是在前端轮训查询后台数据库里面的信息,或者查询redis里面的数据。这样的话,实际上还是有海量的数据在访问服务器,我感觉这样根本就没有解决问题;还有访问服务器的请求 跟 访问数据库的请求,是不是不一样,有什么区别。
希望大神们能指正下高并发真正的处理以及原理;
希望大神们能指正下高并发真正的处理以及原理;
解决方案 »
- JS表单提交验证弹出警告框后却没能阻止住
- socke c/s文件传输
- 关于SESSION过期问题
- 泛型子类转换出错啦,请求大侠支援
- 设计struts中actionform 问题
- 大家是用什么工具来编译bean
- 求助!像csdn这样的导航栏是怎样用java写的呢?
- 大家帮我看看这个代码为什么会错!!小问题。在线!
- 高手请进:不关闭ie浏览器,用户某操作完成后就将该用户在cookie中保存的输入信息清空?在线等待。。。。
- 求JDBC相关的书
- 吐血求救,搞了一天没搞定,springmvc中@transactional不回滚的问题
- 求大佬指点java.lang.UnsupportedClassVersionError: servlet/LoginServlet (Unsupported m
你上面说的有点笼统了,比方说A,B两个接口分别是完全不关联的两个业务,现在在同一时刻有大量的请求请求你服务器,但是大部分是请求A,少量请求B,这个时候B没有高并发
关于如何处理的话,我觉得还是得根据业务吧,有业务前提能更好考虑
如果A请求占用了大量cpu,内存等资源,导致B 无法访问,,这个应该统一算 系统的高并发吧,而不是单一的某个业务。
如果A请求占用了大量cpu,内存等资源,导致B 无法访问,,这个应该统一算 系统的高并发吧,而不是单一的某个业务。
那说到底还是A得问题,难道你还去优化B不成?
如果A请求占用了大量cpu,内存等资源,导致B 无法访问,,这个应该统一算 系统的高并发吧,而不是单一的某个业务。
你这种场景一般就拆分服务,A,B独立部署,A增加集群机器
如果是上面你说的,压力都是数据库写上,用mq只是流量削峰罢了,查询可以做读写分离
总的思路是,让系统平稳运行,必要是舍弃不重要的服务,服务拆分,压力分摊上面我都没怎么实践过,都是瞎编的
短时间内单个服务器处理大量请求的效率是有限的,比如tomcat,每有一个请求都会起一个线程去处理,也就是说一个进程里有多个线程在
跑,这样并发访问很大的时候性能就很低了。具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给JVM的内存越多性能也就越高,但也会加重GC的负担。操作系统对于进程中的线程数有一定的限制:Windows 每个进程中的线程数不允许超过 2000,Linux 每个进程中的线程数不允许超过 1000,在Java中每开启一个线程需要耗用1MB的JVM内存空间用于作为线程栈之用,此处也应考虑。为了解决这种问题,首先想到就是集群,想办法让请求都从一个入口进来,通过一定的策略去访问集群中的某一台服务器,还要让访问在一个集群里的任何一个服务器的效果都一样。
还有一个方法是分布式, 在一个项目里可能有多个模块,可能有的模块被访问的量比较大而有的模块却比较少, 这个时候如果它们在一个项目部署在一个服务器上, 那个访问较少的模块就浪费了资源, 所以可以把访问比较多并发比较高的模块拿出来搞个集群,其他的模块不弄集群,或者弄个小集群。个人的理解,有错的地方希望大家指正
1.高并发最常见的方案是负载均衡,就是增加机器,比如有5000个请求,以前1台机器,现在5台机器的,一台抗1000个请求,负载大公司会直接用硬件,比如F5,互联网用nginx的比较多;
2.第一个说的是增加web服务器,第二个是数据库分库,增加数据库的数量和实例,比如根据uuid进不同的数据库,这样数据库压力也可以下来了。
3.第三个就是你说的队列,但是队列异步一般是异步的,就是先落地基本信息,就返回成功;然后排队去处理,处理完成后提醒用户,会有个延迟的动作。等等,还的具体问题具体分析,我们以前做过个春晚抢红的,就用了这个套路,web服务器负载均衡,数据库分库,有个入库的规则,入到20个库中;然后根据队列再慢慢处理。
不过想想,对于高并发概念挺简单的,但是处理确是极其复杂的一个问题。
首先高并发在不同业务下面的处理方式不同,第一步先从时机业务逻辑来解决高并发。
其次不同高并发的量和业务场景,处理高并发的方案完全不同,例如1W并发量和10W并发量,技术体系完全不同,而且并不互相兼容,例如能够处理1W并发量的架构体系可能处理不了10W并发量的问题,反之,10W并发量的技术体系,可能对于1W并发量体系处理肯定远远没有针对1W并发量架构好。另外对于并发量的不同业务的处理也前千差万别,说过简单的,同样1W并发量处理,读取新闻网页的1W并发量,根本不用做多少处理,直接一台机器做个页面静态化就完成了。如果是1W表单提交并发量处理,那么你可能要做服务器负载均衡,并且做内存服务器处理用户表单缓存来减轻数据库压力,也可能要做一个数据库集群。如果你要处理1W订单下单并发处理,那么你可能要在之前逻辑上再加上消息机制来限流,等等。对于不同业务复杂度的并发处理也是不同的。