海量数据的解决方案
缓存和页面静态化
数据库优化
- 表结构优化
- SQL语句优化
- 分区
- 分表:mycat 分库分表中间件
- 索引优化
- 使用存储过程代替直接操作
分离活跃数据:可以根据最后一次查询时间,判断非活跃用户,将活跃数据单独分到一个表中作为默认表,不活跃数据分到另一个表中,先从默认表中查找数据,找不到再从不活跃表中查找数据,提高查询效率。
批量读取和延迟修改:原理是通过减少操作的次数来提高效率。批量读取是将多次查询合并到一次中进行,比如对同一个请求中的数据批量读取,在高并发的情况下还可以将多个请求的查询合并到一次进行,如3-5s内请求合并一起统一查询一次数据库。延迟修改主要针对高并发并且频繁修改(包括新增)的数据,如一些统计数据,这种情况可以先将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存到数据库找那个,程序在读取数据时可以同时读取数据中的缓存中的数据。
读写分离:读写分离的本质是对数据库进行集群,这样就可以在高并发的情况下将数据库的操作分配到多个数据库服务器去处理从而降低单台服务器的压力,不过由于数据库的特殊性——每台服务器所保存的数据都需要一致,所以数据同步就成了数据库集群中最核心的问题。一般情况是将写操作交给专门的一台服务器处理,这台专门负责写的服务器叫做主服务器。主服务器数据进行增删查改之后将数据从底层同步到别的服务器(从服务器),读数据的时候到从服务器读取,从服务器可以多台,如果从服务器过多,主服务器可以先同步一部分从服务器,然后再同步另外一部分。
分布式数据库:是将不同的表存放到不同的数据库中然后再放到不同的服务器。这样在处理请求时,如果需要调用多个表,则可以让多态服务器同时处理,从而提高处理速度。
数据库集群(读写分离)的作用是将多个请求分配到不同的服务器处理,从而减轻单台服务器的压力,而分布式数据是解决单个请求本身就非常复杂的问题,他可以将单个请求分配到多个处理器处理,使用分布式后的每个节点还可以同时使用读写分离,从而组成多个节点群。
NoSQL和Hadoop:Hadoop专门针对大数据处理,底层数据的存储思路类似于分布式加集群,不过Hadoop是将同一个表中的数据分成多块保存到多个节点(分布式),而且每一块数据都有多个节点保存(集群),这里集群除了可以并行处理相同的数据,还可以保证数据的稳定性,在其中一个节点出问题后数据不会丢失。
高并发的解决方案
- 应用和静态资源分离:将静态资源保存到专门的服务器中,一般会使用专门的域名去访问,通过不同的域名可以让浏览器直接访问资源服务器而不需要再访问应用服务器了
- 页面缓存:是将应用生成的页面缓存起来,这样就不需要每次都重新生成页面了。可以使用Nginx服务器就可以使用它自带的缓存功能,当然也可以使用专门的Squid服务器。
- 集群和分布式:集群是每台服务器都具有相同的功能,处理请求时调用哪台服务器都可以,主要起到分流作用,分布式是将不同的业务放到不同的服务器中,处理一个请求可能需要用到多台服务器,这样就可以提高一个请求的处理速度,而且集群和分布式也可以同时使用。集群有两个方式:一种是静态资源集群,另一种是应用程序集群。
- 反向代理:指的是客户端直接访问的服务器并不是真正提供服务,它从别的度武器获取资源然后将结果返回给用户的。
- CDN:其实是一种特殊的集群页面缓存服务器,它和普通集群的多台页面缓冲服务器比主要是它存放的位置分布在全国各地,当接收到用户的请求后会将请求分配到最合适的CDN服务器节点获取数据。
- 底层优化:通过网络传输协议进行优化。
小结:
网站架构的整个演变过程主要是围绕大数据和高并发这两个问题展开的。解决方案主要分为使用缓存和使用多资源两种类型。多资源主要指多存