系统程序优化实战(下)

微信小程序电商系统开发实战与性能优化 微信小程序电商系统作为移动互联网时代的主流电商形态,凭借其无需下载安装、即用即走的特性,已成为零售行业数字化转型的重要载体。其技术实现通常采用微信小程序原生框架(WXML+WXSS+JS)作为前端,Java Spring Boot构建RESTful API作为后端,MySQL作为数据库,确保事务完整性和ACID特性。在性能优化方面,通过本地缓存+CDN加速、数据库主从复制+读写分离等手段,可显著提升系统吞吐量和响应速度。典型应用场景包括商品展示、订单支付、用户管理等,其中支付流程需严格遵循微信支付规范,并采 阅读详情

本文接上篇“系统程序优化实战(上)

分析优化

基于发现的问题,但找到问题原因很难,此处罗列了发现过程(看似容易,实际痛苦):
1、测试网络带宽,并监控测试时网络带宽流量。
2、所有Redis缓存,改为本地二级缓存。流量降低很有限。改为固定信息,立马就下来80%。非常纳闷。
3、三个固定信息(Account,User,PermList),逐一从固定信息改为从缓存读,最后发觉是PemList引起,但郁闷的是PermList并没有从网络读啊。
4、再次分析程序,发掘PermList存到SpringSession了,最后查看redis缓存,发现SpringSession非常大(一个大约66k,去掉PermList,则只有6k多)。最后计算了并发量(66kByte*180=11MBps)确实大。SpringSecurity的Session相关信息保存到redis,保存数据很多。
5、最后改变程序逻辑:权限认证时从缓存中拿,不从SpringSession取,SpringSession中保存认证信息为一个固定值。测试结果(300个线程,跑15分钟,同一个用户)如下:
在这里插入图片描述
优化后,性能完全满足,且超出很多。但到此优化工作并未完成!

关联程序适应性改造

程序优化必须考虑相关功能适应性改造!!!
由于改用缓存机制,必然涉及到刷新。登陆涉及到的刷新程序如下:
1、修改密码
2、用户信息修改、停用
3、用户绑定或解除角色权限
4、角色授权
逐一对上述程序修改,并测试保证达到预期目的。

延展性优化

优化方案可能带来新问题,需要解决!!!
只要涉及缓存,必然涉及刷新。本功能优化涉及两级缓存:
1、本地缓存的时效问题。(redis设置过期时间,本地缓存可继续有效,因为变化引起会从本地缓存更新开始)
2、Redis缓存,一旦刷新即全局的。
3、在应用服务器中使用本地缓存(二级缓存),刷新时是局部的,在分布式环境下,一台服务器刷新另一台服务器并不知道。需要建立相关机制解决。(利用redis的消息机制)

优化后再次测试

所有优化完成(测试方案300次,每5秒启动300线程),测试效果如下:
TPS:400-450;平均响应时间均在1s内

附1:多用户并发测试

本次优化目标有3个,之前解决了2个。限于篇幅,第三个目标测试过程简单罗列如下:
生产10000个账户数据。
测试时随机取一个账户进行登陆测试。
用jmeter-GUI方式测试,第一次测就把系统搞崩溃了,注意如下提示:
在这里插入图片描述
改用CLI模式测试:
1、用CLI模式测试,测试次数最好是具体,不要无限循环,因为中断后不能出report报告。
2、可直接打开jmx文件,修改信息,如修改文件路径或文件名。
用循环随机取账户模式,“循环次数”不能为永远,否则不会自动结束,只有中断。
循环随机取账户模式运行结果吞吐量始终很少?
10次,每5秒启动100线程,循环每次100
10次,每5秒启动300线程,循环每次10,吞吐量:5.1
10次,每5秒启动300线程,循环每次10,吞吐量:3.8
用循环随机取账户模式运行结果吞吐量始终很少,解决方法如下:
失败方式:“随机数变量+循环控制器+Csv Data set Config+if控制器+http请求”组装后,吞吐量很少。
成功方式:bzm-Random CSV Data Set Config(需下载安装)+http请求 组装,吞吐量就正常。
10分钟内有10000个账户登陆。通常单台客户端机器是不能承受的。采用多台PC联合压力测试。

附2:其它分享

本次测试过程中发现其它可分享经验罗列如下:
1)现在系统每个租户都要建一个数据库链接,目前配置最大链接数300,意味着最多300个链接,需优化。设置为:16384
2)redis一般数据每次存取响应时间100-160us,通过1000M网络,大约300-400us。如果流量很大,网络容易存为瓶颈。
3)用Redis不同库测试结果差异大:
Reids用0库测试吞吐量达到400,CPU jumps 17.7k/25.94k,CPU utilization为68%。
Reids用2库测试吞吐量达到280,CPU jumps 22.89k/32.47k,CPU utilization为50%。
网络流量、磁盘、内存均差不多。很明显CPU切换频率2库远高于0库,导致吞吐量小。
该点不能理解
4)系统刚启动,第一次跑性能测试,通常不准,多跑几次观察。

本次系统程序优化实战分享完成,大家多多指教!

Windows隐性程序清理与系统优化实战指南 Windows系统在长期使用过程中,常因隐性程序(PUP)和系统残留导致性能下降。这些程序通常通过软件捆绑安装,具有隐蔽性强、卸载残留多的特点。通过PowerShell脚本可高效检测可疑程序,重点识别无发布者信息或异常体积的安装项。系统优化需结合注册表清理、临时文件删除和更新残留处理等技术手段,其中自动化维护脚本能定期清理浏览器缓存、日志文件等可回收空间。实际工程中,配合Windows原生工具如DISM组件清理和计划任务设置,可使系统保持最佳状态。本文方案经实测可释放近10GB空间,显著提升开机速度,适用于 阅读详情

相关推荐

秒杀系统库存扣减的演变:从数据库行锁到 Redis + Lua 原子化

超卖本质是“多放了”;少卖本质是“放了但没成交,库存却回不来”。生产系统里,少卖通常比超卖更隐蔽,因为它不会立刻炸,但会持续吞库存和转化率。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 167

系统程序优化实战()

java系统优化实践,过程全记录

davidwkx的博客 133

西门子PLC布袋除尘系统程序优化实战

布袋除尘系统,也称为袋式除尘器,是一种广泛应用于工业生产中的粉尘治理设备。它通过过滤袋捕集空气中的粉尘,以达到净化空气的目的。布袋除尘器主要由以下几个部分组成:进气部分:包括除尘器的外壳、进风口等,其设计应保证含尘气体均匀分布进入除尘室。过滤单元:这是除尘系统的核心,由数百到数千个布袋组成,布袋材质通常为聚酯、聚丙烯、玻纤等耐高温、耐腐蚀的材料。清洁机构:用于周期性地清除布袋表面积聚的粉尘,它包括脉冲喷吹装置、机械振动装置等。排灰系统

weixin_29443363的博客 1086

易语言程序优化系统托盘操作实战指南

本文还有配套的精品资源,点击获取 简介:易语言是一种为初学者设计的编程语言,以自然语言语法简化编程过程。本文章将介绍易语言的基础知识,探讨如何编写优化程序,并实现将程序最小化到系统托盘的功能。通过实例教学,包括代码优化、数据结构选择、内存管理、并发处理以及托盘操作的实现,帮助初学者掌握易语言的程序优化系统交互技巧,最终提升编程效率和理解程序运行机制。 1. 易...

weixin_32687875的博客 1808

程序租赁系统开发实战优化策略

《小程序租赁系统开发实战优化策略》深度解析移动端租赁系统开发全流程,涵盖Vue+Java技术栈实现、多角色协同备案机制及电子合同签署方案。通过真实案例剖析租赁业务系统设计要点,重点讲解MySQL数据库优化、全流程线上化改造及安全认证体系构建策略,提供可复用的性能提升方案与标准化技术文档交付规范。

红点租赁系统开发 672

Windows预装程序清理与系统优化实战指南

系统资源优化是提升计算机性能的关键环节,其核心原理在于减少非必要进程对CPU、内存及存储资源的占用。在Windows环境中,OEM厂商预装软件和系统组件常成为资源消耗的主要来源,通过科学清理可实现显著性能提升。技术实现层面涉及标准卸载流程、PowerShell深度清理以及第三方工具辅助等方法,特别适用于新购电脑初始化、系统卡顿优化等场景。实测数据显示,合理清理可使开机时间缩短32%,内存占用降低34%,其中Bulk Crap Uninstaller等专业工具能额外清理25-40%残留文件。注册表修改和自动化

weixin_30614109的博客 278

Windows系统隐性程序清理与C盘空间优化实战

计算机系统资源管理是运维和性能优化的重要环节,其中磁盘空间清理直接影响系统运行效率。Windows系统在长期使用过程中会产生大量隐性冗余文件,包括系统更新残留、临时文件、休眠文件等,这些文件通常不会出现在常规卸载列表中。通过PowerShell脚本和系统工具进行深度清理,可以有效回收磁盘空间并提升系统性能。本文以Windows系统为例,详细介绍如何识别和清理这些占用空间的隐形程序,包括使用WizTree进行磁盘分析、通过注册表检查安装信息等实用技巧。掌握这些方法不仅能解决C盘空间不足的常见问题,还能优化系统

weixin_31309419的博客 224

程序租赁系统开发关键步骤与实战优化

程序租赁系统开发需聚焦核心功能设计、业务流程优化与用户体验提升,涵盖需求分析、技术架构搭建及系统测试全流程,重点强化多端数据同步、智能合约配置与权限管理体系,结合租赁行业特性优化订单管理、支付结算及信用评估模块,通过微服务架构与API接口实现高效扩展,同步部署性能监控与安全防护机制,确保系统稳定运行与后期运维迭代。

hdyzu的博客 1057

redis的持久化

机制一句话概括RDB定时拍内存快照,恢复快、文件小,但可能丢数据AOF记录每条写命令,数据安全、可实时持久化,但文件大、恢复慢混合AOF 重写时前半段用 RDB、后半段用 AOF,兼顾两者优点核心选择逻辑能丢数据 → RDB不能丢数据 → AOF(everysec)又要快又要安全 → RDB + AOF 混合。

qq_31532983的博客 332

Spring Cloud Gateway限流:Redis令牌桶防刷实战

e> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ### 3.3 配置官方令牌桶限流(application.yml) ``

会编程的吕洞宾的博客 349

redis-shake的使用windows版本

RedisShake 不是“客户端扫数据”,而是把自己伪装成 Redis 的一个“从节点(Slave)”,走的是 Redis 主从复制协议。这和 Canal 伪装成 MySQL Slave 抓 binlog,思路一模一样。

xrkhy的博客 228

gozero整合mysql,gorm,redis.jwt

gozero,是一个常见的微服务框架,这里分享一下整合mysql,redis,jwt的相关的代码。

KEELON的博客 77

redis + redission: 实现分布式锁

你设置了 30 秒过期,但数据库查询很慢,业务执行了 35 秒。如果所有商品共用一把锁,用户 A 买商品 1 时,用户 B 买商品 2 也会被阻塞,系统吞吐量急剧下降。既然 Redis 是所有实例都能访问的,最直观的思路就是:用 Redis 的一个 Key 来表示锁。如果业务执行了 35 秒,第 30 秒锁自动过期,另一个实例拿到锁,两个实例同时执行业务。分布式锁,就是让多个不同机器、不同 JVM 的服务实例,也能够竞争同一把锁。,如果锁已经被 Redis 自动过期删除了,另一个实例又创建了新锁,你的。

qq_31532983的博客 311

Redis 五种核心数据类型详解与经典使用场景总结

数据类型核心特征典型场景选型关键词String单值、二进制安全、支持数值运算缓存、计数器、分布式锁、位图单值缓存计数原子操作Hash字段-值映射、可部分更新存储对象、购物车、配置项对象存储多属性部分更新List有序、可重复、双向操作消息队列、最新列表、操作日志顺序性队列时间线Set无序、元素唯一、集合运算标签系统、共同好友、随机抽奖去重集合关系随机Sorted Set有序、唯一、带权重排行榜、延迟队列、范围查找排序排行榜带权队列通用原则需要原子计数器或简单缓存?→ 首选。

KevinChen2019的博客 33

MySQL__MongoDB__Redis 入门

本文总结了MySQL数据库的基本操作,包括连接数据库、DDL数据定义语言、DML数据操作语言和DQL数据查询语言。主要内容有: 数据库连接与基本操作:展示不同方式的MySQL连接命令,以及创建、查看、删除数据库等基础操作。 数据定义语言(DDL):详细说明表的创建、修改和删除操作,包括列定义、索引创建和表结构调整。 数据操作语言(DML):涵盖数据的插入、更新和删除操作,包括单条/批量处理、条件操作和使用子查询等高级用法。 数据查询语言(DQL):介绍基础查询语法,包括列选择、别名、条件查询、NULL值处理

m0_59041021的博客 243

等保测评命令——redis

依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级"安全计算环境" 条款,结合 Redis 6.x/7.x 官方安全指南及多家测评机构现场实践,给出可直接落地的 测评命令清单。

好学分子的博客 425

Redis--基础知识点--33--String Hash List Set ZSet

设计原则体现小数据省内存listpack / intset 紧凑存储大数据保性能hashtable / skiplist 保证 O(1) 或 O(log n)编码自动切换根据元素数量和大小自动升级,对用户透明空间换时间ZSet 同时维护跳表+哈希表。

Chasing__Dreams的博客 205

用 Next.js 和 Redis 撸一个 Markdown 笔记系统:RSC 实战与组件化拆解

return (</p></header>这里我们用dayjs格式化时间,并截取内容前 20 个字符作为摘要。:服务端组件拿数据,客户端组件做交互。Redis 哈希存储:轻量、快速、零配置。BEM 命名 + 组件拆分:代码可维护性拉满。别名配置:告别相对路径地狱。搜索功能:目前是预留,可以在里做客户端过滤,或服务端搜索接口。持久化:Redis 数据在内存里,重启会丢,可以配合 MySQL 做持久化。

2403_88631208的博客 496
上一篇: 系统程序优化实战(上)
下一篇: 好用的DNS服务器及各自特点
乐享技术
博客等级 码龄5年 254粉丝 · 103原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值