您的位置:首页 > 运维架构 > 网站架构

关于海量数据和高并发网站的解决方案

2017-05-04 22:20 357 查看
首先,我认为解决问题之前首先要有清晰的思路,如果只是用来别人的解决方案那也只能是拿来主义,没有真正理解,没有做到举一反三。

海量数据和高并发经常被连在一块说事儿,虽然他们完全是两回事儿。海量数据纯指的是数据库的海量数据,而并发指的却包括数据库和服务器的高访问量。

那么问题来了,既然是数据库的数据量大,那怎么办呢?要想解决问题,首先要知道问题是什么!!!那么海量数据会给我带来什么样的问题呢?

海量数据带来的问题无法就是增删改查的问题,除了之外还能有啥问题呢?总不能是带来安全问题吧(打脸一,还真有可能是安全问题)

1 数据库访问缓慢

2 插入更新缓慢,这个问题只能通过分库分表解决

要解决数据库访问缓慢的问题还有几种方法,既然访问数据库慢的话,在逻辑允许的情况下可以不访问数据库呢?

1 使用缓存

2 使用页面静态化

既然不访问数据库逃不过去了,那我们就对数据库进行优化

3 优化数据库(包含的内容非常多,比如参数配置,索引优化,sql优化等等)

4 分离数据库中活跃的数据

5 读写分离

6 批量读取和延迟修改;

7 使用搜索引擎搜索数据库中的数据;

8 使用NoSQL和Hadoop等技术;

9 进行业务的拆分;

高并发的解决方案

其实这个问题必须结合上面的海量数据来讨论,什么情况下会出现高并发呢?一定是平时访问量就比较大的情况,那么平时访问量比较大相应的数据存储也就越来越多,这都是相辅相成的,当然也有个例,比如刚需,比如12306,这里的高并发相比于它的数据来说已经不算海量了。那么平时访问量大如何解决呢?因为这里牵扯到服务器和数据库的问题,所以要从这两方面来进行优化

1 增加web服务器数量,也就是做集群,做负载均衡。既然一台服务器无法完成任务,那就多用几台,几台不够用机房

 在通向第二种解决方法之前,还有没有除了数据库服务器之外能做的一些优化手段呢?当然有

1.1 页面缓存

1.2 cdn

1.3 反向代理

1.4 应用程序和静态资源分离(比如专供下载的资源单独放在一起,给这台服务器提供很高的带宽资源)

2 增加数据库服务器数量,同样做集群,做负载均衡。

海量数据的解决方案

1 使用缓存

好多事情都是相辅相成的,相比来说使用缓存更多是用来解决高并发问题的,因为海量数据导致了访问的缓慢,容易造成高并发问题的严重性,又因为数据库一般是web访问的瓶颈,所以我们在业务逻辑允许的情况下尽量先避免操作数据库,于是,就有了缓存。将必要的数据存放在内存中,而不必每次都去数据库中读取造成不必要的性能浪费和加快访问速度---这就是缓存带来的好处。那使用缓存以及选用管理缓存软件时应该注意些什么东西呢?

2 页面静态化---不想解释,还有什么值得去解释呢?

3 数据库优化

3.1 数据库表结构涉及

3.2 数据类型的选用

3.3 sql优化

3.4 索引优化

3.5 配置优化

需要注意的地方实在太多,应该作为单独的一章拿出来讲

4 分离数据库中的活跃数据

为什么要分离呢?说一个我实际环境中遇到的问题吧!有一个表只有10几个字段,表有130万条数据,但大小已经到了5G的数据,这本身是不太合理的,这么少的数据占用了太多的数据,说明其中有些字段存储了大量的字符串(比如说文章内容等),每次检索这个表时大部分是用不到这些大字段内容的,但却需要耗时比较长,产生很多的慢日志。这时我们可以考虑将表进行垂直切分,将活跃数据分离开来,这样能大大加快访问速度

5 读写分离
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: