cpu从32位提升到64位内存从64GB提升至256GB,比如缓存服务器磁盘从HDD(Hard Disk Drive)提升为SSD(Solid State Drive,固态硬盘),针对有大量读写的应用磁盘扩容,1TB扩展到2TB,比如文件系统千兆网卡提升至万兆网卡
不管怎么提升硬件性能,硬件性能的提升也不可能永无止境,最终还是要靠分布式解决
@AutowiredHttpServletRequest request;@AutowiredHttpServletResponse response;//DateFormat format=new SimpleDateFormat(" yyyy HH:mm:ss 'GMT'", Locale.CHINA);//当前时间//long now=System.currentTimeMillis()*1000*1000;response.addHeader("Date",new Date().toString());//过期时间http1.0支持
// response.addHeader("Expires", format.format(new Date(now+20*1000)));//文档生存时间http1.1支持response.addHeader("Cache-Control","max-age=20");
在/usr/loca/nginx/conf/nginx.conf中加入一下代码
location /static {root /opt/static;expires 1d; #1天
}
内存缓存
速度快,重启后缓存丢失
磁盘缓存
速度稍慢,重启后缓存不丢失
代码组件:Guava,Ehcache
服务器:Redis,MemCache
http缓存->CDN->nginx->redis->DB
1.经常要读取的数据
2.频繁访问的数据
3.热点数据缓存
4.IO瓶颈数据
5.计算昂贵的数据
6.无需实时更新的数据
缓存的目的是减少对后端服务的访问,降低后端服务的压力
可以服务器(tomcat)集群【用nginx转发】、mysql集群降低并发,可以负载均衡的就可以降低并发
把不同业务维度的表分到不同的数据库
把表的某些列分到一个数据库,另一些列分到其他的数据库
还可以用mycat读写分离
对于一些访问量大的,更新频率较低的数据,可直接定时生成静态html页面,供前段访问
常用的 静态化技术:freemaker,velocity
定时任务:每个5分钟生成一次首页的静态页面
页面静态化首先可以大大提升访问速度,不需要去访问数据库或者缓存来获取数据,浏览器直接加载html页即可
页面静态化可以提升网站稳定性,如果程序或者数据库出了问题,静态页面仍然可以正常访问
RestTemplate restTemplate=new RestTemplate();String str=restTemplate.getForObject("url",String.class);
url为你需要生成静态页面的地址,把str作为html存储到nginx可以访问的位置,页面上其他的局部更新可以用ajax
采用nginx实现动静分离,nginx负责代理静态资源,tomcat负责处理动态资源,nginx可为tomcat分担压力redis并发5w左右,nginx并发5w左右,tomcat并发1000左右,mysql并发1000左右
采用队列是解决高并发大流量的利器
队列的作用是:异步处理,流量削峰,系统解耦
异步处理:比如注册成功了,发优惠券、发短信、发红吧等一些其他的操作可以入队列异步处理
流量削峰:比如下单、秒杀等,用入队的方式将流量削平,变成平缓请求进行处理,避免系统崩溃
系统解耦:比如支付成功了,发消息通知物流系统,而无需直接调用这些系统
队列的应用场景
不是所有的处理都必须实时处理
不是所有的请求都必须实时告诉用户结果
不是所有的请求都必须100%一次性处理成功
保证最终一致性,不需要强一致性
常见的消息队列:ActiveMQ,RabbitMQ,RocketMQ,Kafka