快速业务通道

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
效数据异常。为了应对可能的这种情况,如果在此事务策略中使用对象关系映射(ORM )框架,则应确保使用了版本验证功能。

为了演示这种先读取技巧,我们从一些实现 API 层事务策略的代码入手。在清单 1 中,事务在 API 层中开始,并且包围了整个工作单元,包括所有的读取、处理和更新操作:

清单 1. 使用 API 层策略

   
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public void processTrade(TradeData trade) throws Exception { 
  try { 
   //first validate and insert the trade 
   TraderData trader = service.getTrader(trade.getTraderID()); 
   validateTraderEntitlements(trade, trader); 
   verifyTraderLimits(trade, trader); 
   performPreTradeCompliance(trade, trader); 
   service.insertTrade(trade); 
 
   //now adjust the account 
   AcctData acct = service.getAcct(trade.getAcctId()); 
   verifyFundsAvailability(acct, trade); 
   adjustBalance(acct, trade); 
   service.updateAcct(trade); 
 
   //post processing 
   performPostTradeCompliance(trade, trader); 
  } catch (Exception up) { 
   ctx.setRollbackOnly(); 
   throw up; 
  } 
}

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略(4)

时间:2011-10-21 IBM Mark Richards

注意在 清单 1 中,所有的处理都包含在 Java Transaction API (JTA) 事务的作用域内,包括所有 的确认、验证和兼容性检查(提前和事后)。如果您通过探查器工具来运行 processTrade() 方法,那么 就会看到每个方法调用的执行时间将与表 1 相似:

表 1. API 层方法探查 — 事务作用域

方法名称 执行时间 (ms)
service.getTrader() 100
validateTraderEntitlements() 300
verifyTraderLimits() 500
performPreTradeCompliance() 2300
service.insertTrade() 200
service.getAcct() 100
verifyFundsAvailability() 600
adjustBalance() 100
service.updateAcct() 100
performPostTradeCompliance() 1800

processTrade() 方法的持续时间稍微长于 6 秒 (6100 ms)。由于事务的起始时间与方法相同,因此 事务的持续时间也是 6100 ms。根据您所使用的数据库类型以及特定的配置设计,您将在事务执行过程中 保持共享和专用锁(从执行读取操作开始)。此外,在由 processTrade() 方法调用的方法中执行的任何 读取操作也可以在数据库中保持一个锁。您可能会猜想,在本例中,在数据库中保持锁持续 6 秒以上将 不能扩展以支持高用户负载。

清单 1 中的代码在没有高用户并发性或高吞吐量需求的环境中可能会非常出色地运行。遗憾的是,这 只是大多数人用于测试的一种环境。一旦此代码进入生产环境,其中数以百计的交易者(或者是全球的) 都在进行交易,则该系统最有可能会运行得非常糟糕,并且极有可能会遇到数据库死锁(根据您所使用的 数据库而定)。

现在,我将修

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号