IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 《谷粒商城》开发记录 7:压力测试 和 性能调优 -> 正文阅读

[开发测试]《谷粒商城》开发记录 7:压力测试 和 性能调优

1 压力测试

通过压力测试,我们有希望找到许多种用其他测试方法难以发现的错误,如内存泄漏、线程不安全。
有效的压力测试系统将应用以下这些关键条件:重复、并发、随机变化。

压力测试主要关注的性能指标有:
● 吞吐量:单位时间内系统能够处理请求的数量。
● 响应时间:用户从客户端发起请求开始,到客户端接收到服务端返回的响应,整个过程所耗费的时间。通常会关注响应时间的 平均值、中位数、最小值、最大值、第90百分位数、第99百分位数等等。
● 错误率:一批请求中结果出错的请求所占的比例。

本项目使用的压力测试工具是 JMeter、使用的监测内存的工具是 JVisualVM。

2 性能调优

2.1 调优方案

1 给服务分配更大的内存

● 搭建分布式集群,理论上可以使内存无限大。

2 优化业务逻辑

● 优化数据库查询逻辑。
● 引入 Elasticsearch 优化检索。
● 引入 Nginx 实现动静分离。
● 引入 Redis 实现分布式缓存。

2.2 优化数据库查询逻辑

1 避免在循环中操作数据库

可以在准备数据时一次查询所有可能用到的数据,再在服务层对数据进行过滤。

2 尽量不采用联表查询,而是采用 单表查询 + 代码层组装 的方式

单表查询 SQL 的复用率较高,缓存利用率也较高。
联表查询情况下,表结构变动导致查询 SQL 需要同步修改的可能性更高。
两个大表联查的效率可能很低。

2.3 引入 Elasticsearch 优化检索

《谷粒商城》开发记录 6:Elasticsearch 和 商品上架

2.4 引入 Nginx 实现动静分离

用户浏览器向服务器请求的页面资源分为静态资源和动态资源,其中静态资源对任何请求的返回结果都是一致的,包括 js文件、css文件、图片等。
引入 Nginx 实现动静分离,就是让 Nginx 处理对静态资源的请求,让服务器专注于处理对动态资源的请求,可以有效提升服务器的吞吐量。

2.4.1 引入 Nginx 搭建域名访问环境

首先,修改本机 hosts 文件:C:\Windows\System32\drivers\etc\hosts
在 hosts 中添加配置:
====================
192.168.56.10 gulimall.com
====================
这样在本机使用浏览器访问域名 gulimall.com 时,会访问 192.168.56.10,即虚拟机 IP 地址。

然后,配置 Nginx。
Nginx 配置文件的格式为:
====================
nginx.conf {
? ? 全局块
? ? events 块
? ? http 块 {
? ? ? ? http全局块
? ? ? ? server 块
? ? }
}
====================

配置 Nginx 负载均衡。
在 http 全局块中配置上游服务器:(88端口是 Gateway 服务)
====================
upstream gulimall {
? ? server 192.168.56.10:88;
}
====================
表示将大括号内的所有服务器,整体上当作一个逻辑上的单独服务器 gulimall。然后 Nginx 会将所有发送给服务器 gulimall 的请求,负载均衡地转发给大括号内的每个服务器。

配置 Nginx 反向代理。
在 nginx.conf 的一个 server 块中配置:
====================
listen ? ? ? ? ? ? ? ? ? ? 80;
server_name ? ? ? ?gulimall.com;
location / {
? ? proxy_set_header Host $host
? ? proxy_pass http://gulimall;
}
====================
表示监听 gulimall.com 的 80 端口,将发送给 gulimall.com:80 的所有请求转发给服务器 gulimall。
Nginx 在做反向代理转发请求的时候,会丢失请求的 Host 信息,这里也做了配置。

在gateway的配置文件中添加路由规则。
====================
? - id: gulimall_host_route
? ? uri: lb://gulimall-product
? ? predicates:?
? ? ? Host=**gulimall.com, gulimall.com
====================
至此,配置完成。

从浏览器发送请求到浏览器收到响应的整个流程为:
1. 在浏览器输入域名 gulimall.com,访问到虚拟机 192.168.56.10,默认访问 80 端口;
2. Nginx 监听虚拟机的 80 端口,收到来自浏览器的请求;
3. Nginix 做负载均衡、反向代理,将请求转发给网关服务 Gateway (88 端口);
4. Gateway 根据路由规则,将请求转发到商品服务。

2.4.2 Nginx实现动静分离

定下规则:来自前端页面的所有 /static/** 请求由 Nginx 直接返回结果。

首先,在虚拟机上 Nginx 的安装路径下创建目录 nginx/html/static/,把静态资源 (js、css、img 等) 都放进去。
配置 Nginx,在配置反向代理的 location / { … } 前面添加配置:
====================
location /static/ {
? ? root /usr/share/nginx/html;
}
====================
然后,把前端页面文件中所有 href、src、url 链接前加上 /static/。
这样,来自前端页面的所有对静态资源的请求,全部由 Nginx 直接返回。

2.5 引入 Redis 实现分布式缓存

下一篇。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:07:17  更:2022-04-22 19:09:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 8:47:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码