当前位置: 首页 > 科技观察

高并发下如何优化,避免服务器压力过大?

时间:2023-03-22 12:34:51 科技观察

用户多不代表你的服务器访问量大,访问量大也不代表你的服务器压力大!换一个更专业的问题,高并发下如何优化,避免服务器压力过大?1.整体架构:可以采用分布式架构,采用微服务架构将服务拆分部署在不同的服务节点上,避免单节点宕机导致服务不可用!2、数据库:采用主从复制,读写分离,甚至分库分表。表数据根据不同的查询方式采用不同的索引,如b树、哈希、关键字段和索引。SQL避免复合函数和组合排序等。避免使用非索引字段作为分组、排序等的条件!为了减少交互次数,一定不要使用select*!3、添加缓存:使用如memcache、redis、ehcache等缓存数据库定义表、结果表等,缓存数据库的中间数据,避免多次访问修改表数据!登录信息、session等缓存分享!对于不经常变化的数据,比如商品分类、省市、年龄分类,放在缓存里,不要放在数据库里!同时还要避免缓存雪崩、穿透等问题导致缓存崩溃!4.增量统计:不实时统计大量数据。应该使用晚间定时任务统计、增量统计等方式提前统计,避免实时统计造成内存和CPU压力!5.增加图片服务器:图片等大文件必须单独通过文件服务器,避免IO速度对动态数据的影响!保证系统不会因为文件崩溃!6、HTML文件的静态处理,枚举,静态方法返回值等,放到缓存中!7、负载均衡:使用nginx等服务对流量过大的服务采用负载均衡,实现服务集群,增加服务的最大并发数,防止个别服务因压力过大而崩溃!8、添加搜索引擎:对于SQL中经常出现的like、in等语句,使用lucence或solr中间件存储必要的字段和数据,依靠搜索引擎进行模糊搜索,提高搜索速度!#注意:全量数据和增量数据是用定时任务更新的!9、使用消息中间件:服务之间的数据传输,使用分布式消息队列如rabbitmq、kafka等进行异步传输,防止同步传输数据阻塞和数据丢失!10、放弃tomcat:做web开发,最早接触的应用服务器是tomcat,但是tomcat的单台服务器并发只能不到1w!采用netty等actor模型的高性能应用服务器!11、多线程:目前的服务器都是多核处理模式。如果代码以单线程、同步的方式处理,会极大地浪费CPU的使用效率和执行时间!12.避免阻塞:避免bio,blockingqueue等经常造成长时间阻塞的技术被nio!等异步处理机制所取代。13、CDN加速:如果流量过大,可以根据请求来源使用CDN拆分技术,避免大流量导致系统崩溃!14、避免低效代码:不要频繁创建对象、引用,少用同步锁,不要创建大量线程,不要多层for循环!当然还有更多的细节优化技巧!