课程目标:秒杀核心技术(针对瞬间的并发,方法有:加缓存,异步化来提高系统的吞吐量)
中间件:
RabbitMQ介绍:(AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。)
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
Redis介绍:(与MemoryCache的区别:Redis的好处是在服务器重启之后可以保持数据不丢,类似于一个内存的数据库,而MemoryCache无法做数据持久化。)
Druid介绍:阿里巴巴开源的一款连接池。特性:可以监控数据池中的连接,比如最大连接数,最长的时间等;
前端:
Thymeleaf介绍:服务端模版(类似JSP的功能)
后端:
MyBatis介绍:访问数据库,这里不用xml,直接在sql语句处加注解,将sql语句和dao的方法写在一起,方便理解。
JSR303介绍:服务端的一个验证框架。
搭建好之后实现一个分布式session,因为该应用一定分布式部署的。
顺序:缓存优化(将静态页面缓存到用户的浏览器端或手机端),用户请求到达cda(网站缓存重定向),cdn再往后是网关nginx,niginx也可以加缓存,nginx再往后是应用服务器,应用服务器也可以加缓存,比如页面缓存(将页面缓存到Redis中),秒杀系统的请求太多,需要用到消息队列处理异步,(大并发的瓶颈在数据库),最后安全优化(防刷,限流,验证码等)。
学到什么?
1、应对大并发?(a如何利用缓存;b如何使用异步)应用的横向扩展:分布式和负载均衡
2、如何编写优雅的代码(易扩展,好修改)
第一章
springboot环境搭建
集成Thymeleaf,Result结果封装
访问数据库MyBatis连接池+Druid
集成Jdeis+Redis安装+通用缓存Key封装
第二章 实现登录功能
数据库设计
明文密码两次MD5处理后存入数据库(安全方面考虑)
JSR303参数检验+全局异常处理器
分布式Session
第三章 实现秒杀功能
数据库设计
商品列表页(点击商品进入商品详情页)
商品详情页(点击秒杀按钮进入订单详情页)
订单详情页
第四章 JMeter压测
JMeter入门
自定义变量模拟多用户
JMeter命令行使用
Spring Boot打war包(Spring Boot很多时候并不是以jar包的方式运行的,而是打成war包放在Tomcat下面)
第五章 页面优化技术
(通过压测发现的不足进行优化)
页面缓存+URL缓存+对象缓存(目的是减少对数据库的访问,因为并发的瓶颈在数据库)
页面静态化,即前后端分离
静态资源优化
CDN优化
第六章 接口优化
Redis预减库存减少数据库访问
内容标记减少Redis访问
RabbitMQ队列缓存,异步下单,增加用户体验
RabbitMQ安装与Spring Boot集成
访问Nginx水平扩展
压测(对比优化前的压测)
第七章 安全优化
秒杀接口地址隐藏(防止秒杀之前获取到秒杀地址)
数学公式的验证码(防止恶意机器人,而且可以加长系统访问的时间)
接口防刷(1min限制访问10次)