一、缓存和页面静态化
缓存
缓存的使用方式可以分为通过程序直接保存到内存中和使用缓存框架两种方式。程序直接主要是使用Map,尤其是ConcurrentHashMap;而常用的缓存框架有Ehcache、Memcache和Redis等。
页面静态化
缓存是将从数据库中获取到的数据保存起来,而页面静态化是将程序最后生成的页面保存起来,使用页面静态化后就不需要每次调用都重新生成页面了,不但不需要查询数据库,而且连应用程序处理都省了。 所以,页面静态化同时对数据量大和并发量高两大问题都有好处。 页面静态化可以在程序中使用模板技术生成,如Freemarker和Velocity都可以根据模板生成静态页面,另外也可以使用缓存服务器在应用服务器的上一层缓存生成的页面,如可以使用Squid,另外Nginx也提供了相应的功能。
二、数据库优化
数据库的优化方法非常多,常用的有如下: 表结构优化
SQL语句优化
分区和分表
索引优化
使用存储过程代替直接操作
使用合理的冗余
三、分离活跃数据
通过一个定期处理的任务,将不活跃的用户转移到别的数据表中
四、批量读取和延迟修改
批量读取和延迟修改的原理是通过减少操作的次数来提高效率,如果使用得恰当,效率将会呈数量级提升。
批量读取是将多次查询合并到一次中进行。有效的减少查询数据库的次数,这种类型可以用异步请求来处理。 延迟个性主要针对高并发而且频繁修改的数据,如一些统计数据。这种情况可以先将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存到数据库中,程序在读取数据时可以同时读取数据库中和缓存中的数据。通常用于保存不那么重要的数据。
五、读写分离
读写分离的本质是对数据库进行集群,这样就可以在高并发的情况下将数据库的操作分配到多个数据库服务器去处理,从而降低单台服务器的压力。但需要保证每台服务器所保存的数据都需要一致,数据同步。
六、分布式数据库
分布式数据库是将不同的表存放到不同的数据库中,然后再放到不同的服务器。这样在处理请求时,如果需要调用多个表,则可以让多台服务器同时处理,从而提高处理速度。
分布式与集群的区别:
1.分布式需要调用多台服务器协同工作,处理单个请求;而集群是应用高并发,将多个请求分摊到不同的服务器进行处理。 2.集群是每个节点都有处理一个请求有一完整的方法和机制,而分布式是把一个请求的不同业务,不同业务逻辑方法放到不同的节点,任何一个节点不能处理一个完整的请求任务。
七、NoSQL和Hadoop
高并发的解决方案
前端:异步请求+资源静态化+cdn
后端:请求队列+轮询分发+负载均衡+共享缓存
数据层:redis缓存+数据分表+写队列
存储:raid阵列+热备
网络:dns轮询+DDOS攻击防护