基于身份标识引用计数的Web并发操作控制方案.docVIP

基于身份标识引用计数的Web并发操作控制方案.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于身份标识引用计数的Web并发操作控制方案   摘要:并发访问控制是Web应用中常见的问题,传统的基于数据库的控制策略通过添加唯一约束等方式,虽然能保证数据的完整性,可是当并发问题出现时,不可避免的出现回滚而影响用户体验,数据库或临界区加锁也会降低系统的并发能力。该文通过一个具有通用性的真实案例,提出一种对用户身份标识进行引用计数的细粒度的并发控制解决方案,能灵活控制锁的粒度,消除回滚的可能,提高并发的吞吐量,该方案目前在某大型互联网广告投放平台上使用。   关键词:身份标识;并发控制;细粒度;引用计数   中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2009)29-7264-02   The Identity Counting Based Web Cconcurrent Access Controll Solution   GUAN Zhi-wei   (Guangzhou Academy of Special Equipment Inspection Testing, Guangzhou 510180, China)   Abstract: Concurrent access control is a common problem in Web applications. The traditional control strategy based on database, for example, adding a unique constraint, can ensure the data integrity, but problems arise when concurrent access occur and roll back, which make bad user experience. The lock from DB or critical section also reduces the concurrency. This paper, based on a real case, presents a users fine-grained concurrency control solution by identity reference counter in the application server side that can flexibly control the lock granularity, eliminate the possibility of rollback and improve the throughput of concurrency. The solution is currently used in a large Internet advertising platforms.   Key words: identity; concurrency control; fine-grained; reference counter   Web服务器支持多个进程(或线程)并发访问,多进程提高了系统的处理效率,但是并发操作也给数据带来不一致性等风险。出现丢失修改、幻读、读“脏”数据等问题。数据库和现代的程序设计语言都提供一些方法进行并发控制,然而对于某些复杂需求,使用传统方法处理,要么锁粒度太粗,牺牲了系统的并发能力,要么无法完全规避数据出现不一致。   本文提出如何使不同用户操作可以并发执行,而只对相同用户发出的不同请求加锁,在不影响全局并发处理效率的情况下,保证数据的完整性。   1 并发控制策略   并发控制与需求紧密相关,对于不同的需求使用并发控制的策略都不一样。下面总结一些常见的情况。   1.1 内存全局数据结构   某些全局的静态数据结构,或者单例,如果有多个进程同时修改则会数据不一致。解决方法以Java为例,可以在并发操作的代码包含synchorized(this){//需要避免并发的逻辑},这种方法能保证数据不出现异常,但是由于锁的粒度太粗,每次只有一个进程可以执行临界区的代码,其他进程都被阻塞了,牺牲了系统的并发处理能力。更好的方法是使用concurrent包,JDK1.5以后加入了concurrent包,主要是为了提高多线程的开发效率,其中提供了很多支持并发的集合类,大量使用了新的锁机制,新的锁机制最终归结到一个原子性操作上,比使用synchronized(this)关键字有更高的性能。   1.2 数据表唯一性要求   通常为了保证每个身份标识(用户)在某个数据表不出现重复记录。处理流程如图1所示。   如图2的处理流程并非线程安全,在多线程环境下,例如因网络延时用户点击按钮2次,刚好数据

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档