Web应用高并发处理方案

先来熟悉几个关于高并发的关键参数!

QPS:每秒处理的请求数量!

响应时间:处理一个请求需要的时间!

吞吐量:单位时间内的处理请求数量!

最大并发数:同一时间能支持的最大请求数!

一般来说有下面这些常规办法:

1,更多的静态资源:将代码中的大量枚举(容器加载时写入map,放入本地缓存),数据库中的定义表(定时任务放入缓存),固定配置,HTML文件等静态化处理,缓存起来!

2,图片服务器:一般来说,图片在一个页面上属于数据量比较大的东西,尽量避免动态数据和图片的顺序渲染,使用图片服务器分离数据和图片!

3,优化代码:尽量避免多层循环,避免多次访问数据库,使用多线程提高cpu使用率和执行速度,使用java8的流式处理和并行处理提高速度!

4,数据库:采用分库分表,mysql5.7之后,据说可以支持秒级百万级数据查询。速度相当之快,使用八库1024表,可以满足数据库一秒数百万的并发!同时可以开启缓存,写入存储过程等加快访问时间!分库分表之后还可以根据分表字段使用联合查询,避免了大多数数据库架构分布式之后不能联合查询的缺点!

5,使用内存型数据存储:使用redis等内存缓存可以提高读写速度,在数据落库之前快速读写数据,使用mongodb等作为大字段,多字节的key value保存方式,防止关系型数据库的不足!

6,负载均衡:使用nginx等负载均衡中间件,将请求分布到不同的机器上,避免单个应用持续的处理引起血崩!

数据库优化

1、单库数据库

一个初建的网站往往用户群都是很小的,最简单的网站架构就能解决实际的用户需求,当然为了保证网站的稳定性和安全性,我们会把网站的应用部署到至少两台机器上,后台的存储使用数据库,如果经济实力允许,数据库使用单台服务器部署

2、数据库读写分离

一个数据库主要负责写操作我们称之为主库,一个数据库专门负责读操作我们称之为副库,副库的数据都是从主库导入的,数据库的读写分离可以有效的保证关键数据的安全性,但是有个缺点就是当用户浏览数据时候,读的数据都会有点延时,这种延时比起全站不可用那肯定是可以接受的。

3、缓存技术

缓存主要是适用于读操作,并且缓存的读操作的效率要远远高于从数据库以及硬盘读取数据的效率。

5、数据库的垂直拆分

业务再接着的增长下去,数据量也会随之越来越大了,这样发展下去总有一天主库也会产生瓶颈了,那么接下来我们又该如何解决主库的瓶颈了?方法很简单就是我们要拆分主库的数据了,那么我该以什么维度拆分数据了?一个数据库里有很多张表,不同的表都针对不同的业务,网站的不同业务所带来的数据量也不是不同的,这个时候系统的短板就是那些数据量最大的表,所以我们要把那些会让数据库产生瓶颈的表拆出来,例如电商系统里商品表和交易表往往数据量非常大,那么我们可以把这两种表建立在单独的两个数据库里,这样就拆分了数据库的压力,这种做法叫做数据垂直拆分

6、数据库的水平拆分

表数据的处理已经超出了单台服务器的能力,这个时候我们就得对这个单库单表的数据进行更进一步的拆分,也就是将一张表分布到两台不同的数据库里,这个做法就是叫做数据的水平拆分了。可以根据项目拆分,再结合按年的拆分等。

原文发布于微信公众号 - Linyb极客之路(gh_c420b2cf6b47)

原文发表时间:2018-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

LG智能手机爆出两个远程代码执行漏洞

Check Point 的研究员发现了 LG(也称为 LGEIME)智能手机的两个漏洞,这些漏洞都存在于默认的键盘上,而且是 LG 设备独有的。第一个漏洞是在敏...

12730
来自专栏做全栈攻城狮

GitHub这么火,程序员你不学学吗? 超简单入门教程干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制。帮助大家摆脱命令行工具,简单快速的使用GitHub。

8320
来自专栏北京马哥教育

Puppet,Ansible,Saltstack 有哪些区别和联系

目前主流的自动化运维工具有puppet、ansible、saltstack,实际上每一个工具都基本上能够完成你的运维任务,也都是久经考验的。都有NB的地方,也有...

17620
来自专栏魏艾斯博客www.vpsss.net

腾讯云CDN开启中间源导致wordpress后台无法访问的最终解决办法

魏艾斯博客使用了腾讯云CDN之后,全国各地打开速度都极快。曾经老魏遇到腾讯云CDN开启中间源导致网站后台打不开的情况,因为网上遇到这种情况的比较少(主要是没人像...

41130
来自专栏butterfly100

Chris Richardson微服务翻译:微服务之事件驱动的数据管理

Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 ...

29590
来自专栏大魏分享(微信公众号:david-share)

厉害了:全数据中心密码管理系统的建设--构建数据中心一体化运维平台第三篇

前言:本文中所引用的文档均为Redhat 技术专家杨金锋所提供。此方案,大卫也多次请教红帽技术专家陈镇。 密码管理系统的必要性 在大多数客户数据中心内部,密...

59270
来自专栏做全栈攻城狮

程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制。帮助大家摆脱命令行工具,简单快速的使用GitHub。

12030
来自专栏zhangdd.com

生产内网ssh登陆变慢问题原因及解决办法

最近发现内网一些服务器ssh连接变慢,原来都是秒开的现在基本上要等10几秒才能返回登陆界面,因为是在内网基本上排除网络连接问题

14710
来自专栏刺客博客

FinalShell: 优秀 SSH 客户端 / 堪比Xshell

79530
来自专栏about云

构建高并发高可用的电商平台架构实践2

上次发布内容: 如没有接上,可以查看下面原文: 6) 搜索 在电子商务平台中搜索是一个非常的重要功能,主要有接搜索词类目导航、自动提示和搜索排序功能。 开源...

63690

扫码关注云+社区

领取腾讯云代金券