Web应用程序并发问题处理的一点小经验

简介: Web应用程序并发问题处理的一点小经验

在web应用中,一个账户,会有N多个涉及到数字的字段。比如一个账户的金额,积分等。这些字段就涉及到增减的情况。如果是在测试环境下,靠程序员或者测试手动点击。一般是发现不了问题。

一旦上到正式环境下。有真实用户做操作了,就很容易出现莫名其妙的金额和流水记录不一致的情况。如果没有足够的经验,很难排查出问题。

据我了解,业界一般用使用三种解决方案

  • 1.使用消息队列
  • 2.悲观锁
  • 3.乐观锁

因为博主自身处于小公司,对于消息队列没有实际操作经验。所以本篇文章主要讨论后面两种。

悲观锁

从名字上看,就是认为一定会发生并发的可能性,从源头上杜绝数据错乱的情况。

常见的处理方式:

数据库加锁。如SQL server的RowLock和Mysql中的for update

优点:程序没问题的情况下完全不会出现数据问题

缺点:性能不太好,数据库锁是非常消耗资源的行为

乐观锁

乐观锁和悲观锁相反。认为不会有并发问题。只在提交修改的时候,去检查一下当前这条数据是否有修改的迹象。

常见处理方式:

在数据库中加入一个列。记录下当前修改的版本号。每次修改的时候,判断版本号是否和之前查询出的是否一致,如果一致的。修改成功,不一致,无法修改。需要重新加载一次查询数据,然后循环判断操作

伪代码如下:

ndex = 1  //约定重试次数
while(true){
selct id ,money ,version from table  //查询当前记录
money+=1; //修改数据
update table set money = money,version = (version+1) where id = @id and version = version //更新到数据库,判断是否更新成功
if(update){
break;
}
//
index+=1;
if(index>3){
break;
}
}

乐观锁优点: 可以实现无锁操作,性能会比悲观锁高很多

乐观锁缺点:有脏读问题,而且查询次数会比悲观锁多几倍

了解这两种方式,已经可以纵横各大中小型应用了。

目录
相关文章
|
2月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
22 0
|
4天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
17 4
|
13天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
20 0
|
2月前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
15 4
|
2月前
|
SQL 运维 监控
什么是Web应用程序防火墙,WAF与其他网络安全工具差异在哪?
总之,WAF是一种专门用于保护Web应用程序的网络安全工具,与其他网络安全工具在焦点、层级、检测方式、部署位置和针对性等方面存在差异,以确保Web应用程序的安全运行。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
123 0
|
2月前
|
缓存 监控 前端开发
如何优化 Python WEB 应用程序的性能?
【2月更文挑战第27天】【2月更文挑战第93篇】如何优化 Python WEB 应用程序的性能?
|
2月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0
|
2月前
|
存储 安全 数据安全/隐私保护
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
12 2
|
2月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
2月前
|
Web App开发 前端开发 测试技术
Web应用程序测试工具Selenium用法详解
Web应用程序测试工具Selenium用法详解
37 0