聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】03_分布式扩展

本章目标

  • nginx反向代理均衡
  • 分布式会话管理
  • 使用redis实现分布式会话存储

4-1 Nginx反向代理

上一章我们看到当单机系统时候,容量有限,响应时间变长TPS上不去的问题。nginx反向代理的功能就是代理后端Tomcat服务器集群,以统一域名方式来访问

  • 单机容量问题,水平扩展
  • nginx反向代理
  • 负载均衡配置

当我们用top -H命令查询cpu运行状况时,单机运行很卡,表象是cpu使用率增高,内存memory占用增加,网络带宽使用增加,有几个参数值得注意

  • cpu us : 用户空间cpu使用情况(用户态进程占比)
  • cpu sy:内核空间cpu使用情况(核心态进程占比)
  • load average:1分钟/5分钟/15分钟负载load平均值,跟着核系数变化,0表示正常,1表示cpu打满,1+代表等待阻塞
  • memory:free 空闲内存,used使用内存

4-2 单机容量问题,水平扩展

这次的水平扩展指的是对应用系统程序扩展,而mysql数据库只有一个,用来开放远端连接(mysql读写分离、分库分表等方法可实现mysql水平扩展,这里没讨论),服务端实现水平对称部署,最后验证访问

Nginx系统框图如下:

我们在阿里云就需要4台服务器(其中1台用作数据库,2台用作应用进程,1台用作nginx反向代理)

4-3修改前端资源用于部署nginx

nginx有三种用途:

  1. 使用nginx作为web服务器(静态资源访问)
  2. 使用nginx作为动静分离服务器
  3. 使用nginx作为反向代理服务器(动态资源请求)

整个项目前端H5请求的类型有两种,一种是静态资源,一种是ajax请求动态资源。对于ajax向域名miaoshaserver请求时,mginx会作为反向代理部署到不同miaosha项目jar包下;而对于静态资源(static,HTML,CSS等)访问域名miaoshaserver/resources时,nginx会向本地磁盘请求资源(企业级应用通常使用的是NAS

那先部署静态资源请求:

在static静态资源目录下新建gethost.js,用来方便配置修改远端连接地址,然后在每个页面上对应修改,然后将静态资源上传到服务器上

4-4 部署Nginx OpenResty

使用Nginx的框架OpenResty来开发配置Nginx,OpenResty是基于NGINX和LuaJIT的动态Web平台。优点是可以支持lua的一些开发。

安装OpenResty

将nginx指定成web服务器

  • location节点path :指定url映射key
  • location节点内容:root指定location path后对应的根路径,index指定默认的访问页
  • sbin/nginx -c conf/nginx.conf启动
  • 修改配置后直接sbin/nginx -s reload无缝重启

访问nginx服务器ip地址,出现welcome to OpenResty 则成功😄

4-5/6 前端资源部署

  1. scp 指令将htmlStable文件夹上传到//usr/local/openresty/nginx/html目录下

  2. 修改本地hosts文件指定nginx的IP地址域名为miaoshaserver

  3. 修改nginx目录下conf文件:

当我们浏览器访问miaoshaserver/resources/…时,访问的是/usr/local/openresty/nginx/html/resources/目录下的静态资源文件,做到H5请求静态资源到nginx服务器

  1. 使用sbin/nginx -s reload无缝重启,指的是修改nginx配置文件后不需要重启nginx服务器,连接不会断,只变化了进程号

可以看到执行命令前后 master进程不改变,worker进程的进程号变化

4-7 Nginx配置动静分离服务器

location 节点path特定resources : 静态资源路径

location节点其他路径:动态资源用

  • 设置upstream server

  • 设置动态请求location为proxy pass 路径

  • 开启tomcat access log 验证

设置upstream server

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip 章节笔记 第1章-课程介绍及项目框架搭建 知识点 使用spring boot 搭建项目基础框架 使用Thymeleaf做页面展示,封装Result统一结果 集成 mybatis + druid 做数据操作 继承redis, 使用Jedis操作redis数据, 封装了统一的缓存key. 第2章-实现用户登录以及分布式session功能 学习了自己通过 cookie 实现分布式session, 不使用spring boot默认提供的 知识点 数据库设计 明文密码两次md5处理 JSR303参数校验 + 全局异常处理器 分布式session, 通过cookie完成分布式session功能. 将cookie存放到redis中. 第3章-秒杀功能开发及管理后台 学习到了基础的商品下单流程, 查库存,查是否重复下单,减库存,创建订单等过程 知识点 数据库设计(业务第一原则, 无需太注意三大范式) 完成商品列表页 完成商品详情页 完成订单详情页 第4章-秒杀压测-Jmeter压力测试 学习使用jmeter做压力测试, 学习jmeter变量定义, redis压力测试工具 知识点 jemter入门 自定义变量模拟多用户(线程组 -> 添加 -> 配置元件 -> CVS数据文件设置) jmeter在命令行下的使用. 下载tgz,解压缩并替换windows视窗下面配置的CVS信息路径 执行脚本 ./bin/jmeter.sh -n -t xxx.jmx -l result.jtl 完成后可以将result下载下来导入到 聚合报告 中查看 spring boot 打war包. 添加 plugins 插件 <!--打war包插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> 添加tomcat依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> 编写启动类 public class ServletApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(ServletApplication.class); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值