海量数据和高并发的解决方案
读《看透Spring MVC源代码分析与实践》
数据量大
一.缓存和页面静态化
缓存框架:ehcache,memcache,reids
缓存中空数据处理:将没有数据的缓存使用特定的数据类型值来保存。主要用于数据变化不是很频繁的情况
二.数据库优化
1.表结构优化
2.sql语句优化
语法层面优化-->处理逻辑的优化
将涉及大数据业务的SQL语句执行时间详细记录下俩,通过仔细分析日志找出需要优化的语句和其中的问题,然后再有的放矢的优化
3.分区
分区就是将一张表中的数据按照一定的规则分到不同的区来保存,这样操作的数据量少,速度更快
4.分表
如果一张表中的数据可以分为几种固定不变的类型,而且如果同时对多种类型操作的情况不多,可以通过分表来处理。
将一个表中的不同类型的字段分到不同的表中保存,减少操作时锁定数据的范围
5.索引优化
索引在数据发生变化(增删改)的时候就预先按指定字段的顺序排列后保存到一个类似表的结构中,在查找索引字段为条件的记录时就可以很快地从索引中找到对应记录的指针并从表中获取到记录
6.使用存储过程代替直接操作
在操作过程复杂而且调用频率高的业务中,可以通过使用存储过程代替直接操作来提高效率,因为存储过程只需要编译一次,而且可以在一个存储过程里面做一些复杂的操作
三.分离活跃数据
将活跃数据单独保存起来从而提高存储效率
四.批量读取和延迟修改
批量读取通过减少操作的次数来提高效率,将多次查询合并到一次中进行
五.读写分离
读写分离的本质是对数据库进行集群,这样就可以在高并发的情况下将数据库的操作分配到多个数据库服务器去处理从而降低单台服务器的压力,因为每台服务器所保存的数据都要一致,所以数据同步就成了数据库集群中最核心的问题。
六.分布式数据库
将不同的表存放到不同的数据库中然后再放到不同的服务器。这样,如果需要调用多个表,则可以让多台服务器同时处理,从而提高处理速度。
分布式的另一种思路是将不同业务的数据表保存到不同的节点,让不同的业务调用不同的数据库
七.NoSQL和Hadoop
NoSQL的核心是非结构化,通过多个块存储数据,其操作大数据的速度也非常快;
Hadoop是针对大数据处理的一套框架,将同一个表中的数据分成多块保存到多个节点(分布式),而且每一块数据都有多个节点保存(集群),集群除了可以并行处理相同的数据,还可以保证数据的稳定性,在其中一个节点出现问题后数据不会丢失。每个节点都不包含一个完整的表的数据,但是一个节点可以保存多个表的数据。
--------------------------------------------------------------------------------------------------------------------------------
高并发
一.应用和静态资源分离他
二.页面缓存
Nginx服务器可以使用它自带的缓存功能,也可以使用专门的Squid服务器
数据实时性高的页面,可以先生成静态页面,然后使用Ajax来读取并修改相应的数据
三.集群与分布式
集群:一种是静态资源集群,另一种是应用程序集群
应用程序集群:应用程序在缓存的过程中可能会使用到一些缓存的数据,如果集群需要同步这些数据,其中最重要的是Session,Session同步也是应用程序集群中非常核心的一个问题。
session同步有两种处理方式:一种是在Session发生变化后自动同步到其他服务器,tomcat默认使用的就是第一种方式;另一种是用一个程序统一管理Session,使用专门的服务器安装Memcached等高效的缓存程序来统一管理Session。
集群有一个核心的问题:负载均衡,即接收到一个请求后具体分配到哪个服务器去处理的问题
四.反向代理
反向代理指的是客户端直接访问的服务器并不真正提供服务,他从别的服务器获取资源,然后将结果返回给用户
代理服务器的作用是代我们获取想要的资源,然后将结果返回给我们,所要获取的资源是我们主动告诉代理服务器的;
反向代理服务器是我们正常访问一台服务器的时候,服务器自己调用了别的服务器的资源并将结果返回给我们;
代理服务器是我们主动使用的,是为我们服务的,他不需要有自己的域名;反向代理服务器是服务器自己使用的,我们并不知道,他有自己的域名,我们访问他跟访问正常的网址没有任何区别。
反向代理服务器有三个作用:1.可以作为前端服务器跟实际处理请求的服务器(如tomcat)集成;
2.可以用作负载均衡;
3.转发请求
五.CDN
CDN是一种特殊的集群页面缓存服务器,他和普通集群的多台页面缓存服务器比主要是它存放的位置和分配请求的方式有点特殊。CDN分配请求的方式是使用专门的CDN域名解析服务器在解析域名的时候就分配好的,一般的做法是在jsp那里使用CNAME将域名解析到一个特定的域名,然后再将解析到的那个域名用专门的CDN服务器解析到相应的CDN节点。
--------------------------------------------------------------------------------------------------------------------------------
底层优化
Google制定了Quic、Spdy等协议来传输数据,Quic比TCP效率高且比UDP安全,Spdy协议在现有HTTP协议的基础上增加了很多新特性,提高了传输效率,一些新特性包含到了HTTP/2协议中,Google已经放弃Spdy而使用HTTP/2了。