高访问量高并发问题的一部分解决方案


一:架构方面
1,负载均衡集群:使用负载分发客户端的访问连接,让每一台服务器合理利用
2,分布式,当集群部署都出现访问卡顿的情况,就需要采用分布式了,例一个商城,可以分为用户服务,产品服务,订单服务,后台管理服务,数据分析等,每个服务都可以单独运行,每个服务直接通过内部机制进行通信

二:数据库方面
1,sql优化:可以对数据库的查询语句进行优化,尽量不使用hibernate这些orm框架自带的做法,这样很耗时,复杂的查询尽量使用原生sql来写,一般还要对你的sql进行执行计划分析
2,索引:在访问频率极高的字段加入索引,注意索引对null是无效的,加入索引提高了查询速度,但是相对插入消耗的时间会增多,索引也是空间换时间的做法,加入索引越多,你的表就会越庞大,但是相对于现如今空间如白菜的年代,这点不值一提
3,redis:对于并发比较高的数据可采用redis存储,因为redis的数据存放于内存存取速度非常快
4,分区:对于数据非常庞大的表可采用数据库分区,可提高查询速度
5,当系统数据非常庞大的时候可以分多个数据库,比如系统模块存为一个数据库,业务模块存为另外一个数据库,这样就避免应用全面宕机
6,关系形数据库在数据量达到一定规模查询效果较差,像一些操作纪录等数据可以用redis,mongodb等nosql非关系形数据库来存储,查询性能比关系形数据库好很多,但是比如金钱,订单,用户信息等“贵重”信息只能用关系形数据库来存储。关系形数据库性能提高常的方法一般包括建立索引,视图等。有些数据库如mysql官方还提供代理工具实现水平拆分,垂直拆分等,Mysql proxy代理工具可以实现数据库的读写分离,都能一定程序提高关系数据库的性能

三:代码方面
1,缓存:一些不常变动的数据可使用缓存技术,如业务需求也可对缓存进行移除变更操作。采用空间换时间,提高用户问效率,同时也可减少数据库访问次数。一般缓存设置在1-5分钟即可,不要小瞧这几分钟,一般高峰期就是那么几分钟啦~~
2,如果遇到并发时,某代码需要同步执行的话需要用到同步机制Synchronized,Synchronized采用了“以时间换空间”的方式,仅提供一份变量让不同线程排队访问
3,ExecutorService线程池的使用,如遇到业务逻辑处理时间比较长的,可以使用线程去处理

四:其他
1,报表统计:你的系统如果需要做统计那么建议使用定时器,每10分钟进行一次统计,报表统计对于一个系统是必须的,因为数据要么是缓慢增加缓慢减少,如果遇到数据跳水,那么对于排查系统问题很有帮助哦!
2,公共模块剥离:对于一些系统模块可以抽离出来,不跟业务系统混在一起,比如报表统计,图片服务,短信等,减少业务服务器的压力

技术交流关注公众号


猜你喜欢

转载自blog.csdn.net/charjay_lin/article/details/80152740
今日推荐