重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
高并发系统的设计需要注意一下几点:
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了南漳免费建站欢迎大家使用!
用jprofiler等工具找出性能瓶颈,减少额外的开销。
尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
优化数据库结构,多做索引,提高查询效率。
统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
硬件上就是提高服务器性能,提升允许最大访问量,代码上面可以使用连接池的方式,更合理的规划连接,提高连接的有效利用率
负载均衡(软件负载均衡、硬件负载均衡)
分布式数据库(数据库主从分布、数据库分割、数据库缓存)
可以采用nginx或者lvs软件工具,他好像最高支持65535的并发访问。
实实在在太大的话,终极解决方式队列方式,通过mq一个一个排队方式,跟12306一样。
首先,为防止高并发带来的系统压力,或者高并发带来的系统处理异常,数据紊乱,可以以下几方面考虑:1、加锁,这里的加锁不是指加java的多线程的锁,是指加应用所和数据库锁,应用锁这边通常是使用redis的setnx来做,其次加数据库锁,因为代码中加了应用所,所以数据库不建议加悲观锁(排他锁),一般加乐观锁(通过设置一个seq_no来解决),这两个锁一般能解决了,最后做合理的流控,丢弃一部分请求也是必不可少的
这个和处理器多核没关系,问题应该是出在你的存储过程自增程序上,多个客户端同时发起申请时,自增程序都是在原申请编码基础上递增,所以取值相同。简单一点的做法是:新增一张临时表,每次发起申请时记录预分配的申请编码。自增程序在此编码的基础上递增即可
java多线程并发问题产生的主要原因是多个线程访问一个实例,导致其中一个线程修改或删除这个实例时,其他线程产生并发问题。
要解决这种并发问题有两种方法:
(1)加上线程锁synchronization
(2)还有个不是办法的办法:不用成员变量,用局部变量