B/S 系统出现的问题都可以从网络、软件和硬件三个方面来进行分析和解决。海量数据和高并发也是这样。
内网一般不会成为瓶颈,因为外网和硬件会在它之前出现瓶颈。本文说道的网络特指外网。
海量数据的主要问题是硬件资源出现瓶颈,无法支撑海量数据的访问与存储。
高并发的主要问题不仅包括硬件资源瓶颈,还包括网络资源瓶颈。网络资源瓶颈主要指的是网络的带宽,在本文指的是外网的带宽。
下面分别对海量数据和高并发问题的三个方面进行分析,并提供一些解决方案。
一、海量数据
(一)网络问题
数据的访问一般是通过内网访问,所以可以忽略网络问题。
(二)软件问题
虽然海量数据的主要问题是硬件问题,但是,通过软件方面的优化,可以减少数据的访问次数,这也能从一定程度上解决部分问题。
软件优化可以从访问、代码、存储三个方面进行。
1、访问
访问优化是减少客户端对服务端的访问次数,具体方法有:
-
页面缓存;
-
页面静态化;
-
表单前端验证。
2、代码
代码优化是减少应用层对数据的访问次数。常用的方法有批量读取、延迟修改、SQL 优化和数据缓存等。
1)批量读取
批量读取是将多次查询合并到一次中进行,减少查询次数。
2)延迟修改
延迟修改主要针对需要频繁添加或修改的数据,如一些统计数据。这种情况可以先将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存到数据库中,程序在读取数据时可以同时读取数据库中和缓存中的数据。
3)SQL 优化
SQL 语句优化要根据具体的业务需求来进行。
4)数据缓存
数据缓存就是将一部分数据或对象暂时保存在内存中,以此来分担数据库的压力。可以使用 NoSQL 数据库来实现,比如 Memcache、Redis、MongoDB 等。
NoSQL 数据库去掉了数据结构,非常易于扩展,而且有非常高的读写性能,尤其在大数据量下,表现优秀。NoSQL 天生支持分布式。
3、存储
存储优化包括数据库优化和数据分离。
1)数据库优化
数据库优化主要指优化数据结构和索引。
2)数据分离
数据分离是指将数据拆分到多个表或者多个数据库,即分表和分库。(本节讲的是软件优化,所以拆分的数据库仍然在同一台服务器上)
常见的数据分离方法有:
-
分离数据库中活跃的数据;
-
读写分离;
-
分离到 NoSQL 数据库;
-
按业务的拆分;
(三)硬件问题
硬件问题可以从增加硬件配置、增加服务器数量两个方面来解决。
1、增加硬件配置
增加硬件配置能在一定程度上提升数据库的处理能力,但是根本解决海量数据的问题。
2、增加服务器数量
增加服务器数量有两种做法,一种是做分布式,另一种是做负载均衡。
1)分布式
分布式是将不同的应用放在不同的服务器上,让多台服务器协同来完成一个系统的运行。比如将数据库服务器独立出来。
2)负载均衡
负载均衡是把同一个应用放在不同的服务器上,。
海量数据一样存在高并发的问题
二、高并发
(一)网络
网络资源瓶颈就是带宽不够用,
要解决带宽资源不够用的问题,
第一步可以增加带宽;
第二步就是分流,比如将图片、视频等静态资源转移到CDN;
第三步就是减少带宽的使用,比如在客户端缓存数据,提交表单前在客户端做数据验证,避免无效的提交。
(二)软件
高并发在软件方面的优化主要是客户端缓存,主要有:
-
页面缓存;
-
页面静态化;
-
表单前端验证。
(三)硬件
硬件资源瓶颈就是服务器性能不够用。
要解决服务器性能的问题,要么增加硬件配置,要么增加服务器数量。
增加服务器数量有两种方法,一种是做分布式,将不同的应用放在不同的服务器;然后做负载均衡,把同一个应用放在不同的服务器上。