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

简介:事务策略 系列文章的作者 Mark Richards 将讨论如何在 Java 平台中为具有高吞吐 量和高用户并发性需求的应用程序实现事务策略。理解如何进行折衷将帮助您确保高水平的数据完整性和 一致性,并减少随后开发流程中的重构工作。

我在本 系列 的前几篇文章中所介绍的 API 层 和 客户端编排策略 事务策略是应用于大多数标准业 务应用程序的核心策略。它们简单、可靠、相对易于实现,并且提供了最高水平的数据完整性和一致性。 但有时,您可能需要减小事务的作用域以获取吞吐量、改善性能并提高数据库的并发性。您如何才能实现 这些目的,同时仍然维持高水平的数据完整性和一致性呢?答案是使用 High Concurrency 事务策略。

High Concurrency 策略源自 API 层 策略。API 层策略虽然非常坚固和可靠,但它存在一些缺点。始 终在调用栈的最高层(API 层)启动事务有时会效率低下,特别是对于具有高用户吞吐量和高数据库并发 性需求的应用程序。限制特定的业务需求,长时间占用事务和长时间锁定都会消耗过多资源。

与 API 层策略类似,High Concurrency 策略释放了客户机层的任何事务责任。但是,这还意味着, 您只能通过客户机层调用一次任何特定的逻辑工作单元(LUW)。High Concurrency 策略旨在减小事务的 总体作用域,以便资源锁定的时间更短,从而增加应用程序的吞吐量、并发性以及性能。

通过使用此策略所获取的好处在一定程度上将由您所使用的数据库以及它所采用的配置决定。一些数 据库(比如说使用 InnoDB 引擎的 Oracle 和 MySQL)不会保留读取锁,而其他数据库(比如没有 Snapshot Isolation Level 的 SQL Server)则与之相反。保留的锁越多,无论它们是共享还是专用的, 它们对数据库(以及应用程序)的并发性、性能和吞吐量的影响就越大。

但是,获取并在数据库中保留锁仅仅是高并发性任务的一个部分。并发性和吞吐量还与您释放锁的时 间有关。无论您使用何种数据库,不必要地长时间占用事务将更长地保留共享和专用锁。在高并发性下, 这可能会造成数据库将锁级别从低级锁提高到页面级锁,并且在一些极端情况下,从页面级锁切换到表级 锁。在多数情况下,您无法控制数据引擎用于选择何时升级锁级别的启发方法。一些数据库(比如 SQL Server)允许您禁用页面级锁,以期它不会从行级锁切换到表级锁。有时,这种赌博有用,但大多数情况 下,您都不会实现预期中的并发性改善。

底线是,在高数据库并发性的场景中,数据库锁定(共享或专用)的时间越长,则越有可能出现以下 问题:

数据库连接耗尽,从而造成应用程序处于等待状态

由共享和专用锁造成的死锁,从而造成性能较差以及事务失败

从页面级锁升级到表级锁

换句话说,应用程序在数据库中所处的时间越长,应用程序能处理的并发性就越低。我所列出的任何 问题都会造成您的应用程序运行缓慢,并且将直接减少总体吞吐量和降低性能 — 以及应用程序处理大型 并发性用户负载的能力。

时间: 2025-01-02 08:46:33

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略的相关文章

用于App服务端的MySQL连接池(支持高并发)_Mysql

本文向大家介绍了简单的MySQL连接池,用于App服务端比较合适,分享给大家供大家参考,具体内容如下 /** * 连接池类 */ package com.junones.test; import java.sql.Connection; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import com.mysql.jdbc.jdb

高负载均衡学习haproxy之配置文件详解

通过前一篇文章的介绍,我们知道了haproxy的配置文件主要包含以下几个部分: global全局配置.defaults默认配置.监控页面配置.frontend配置.backend配置 下面对每一部分分别进行讲解. PS:本文部分内容借鉴马哥haproxy视频. 一.global全局配置 全局配置的标志参数为global,全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关. 1.1 进程管理及安全相关的参数 chroot <jail dir>:修改haproxy的工作目录至

高并发 抢购 超发-javaweb系统实现抢购功能,使起支持高并发,并且不出现超发的现象

问题描述 javaweb系统实现抢购功能,使起支持高并发,并且不出现超发的现象 使用javaWeb来实现一个抢购的功能,例如抢购某一个商品,现在我的解决方案是使用synchronized关键字,不过这种实现方式太挫了,请求大了之后服务直接挂掉. 各位大神都是如何实现 抢购功能的,使其 支持高并发,并且 不回出现超发(库存只剩一个,最后好几个人都抢到)的现象 解决方案 大部分抢购都是用缓存实现的,卖出一个将缓存里的库存数-1,直到为0 解决方案二: 你这不算什么高并发,这种进程内的同步对于分布式多

开发支持高并发的webservice,现在一般用哪些技术?

问题描述 开发支持高并发的webservice,现在一般用哪些技术? 开发支持高并发的webservice,现在一般用哪些技术?python?c++? 解决方案 你可以试试node.js 解决方案二: 可以尝试从硬件.中间件.服务端程序设计几个方面来看应用软件可以考虑对数据结构.线程.实时运算与缓存等方面提升分发.排队.复用等增加效率比如对请求的处理器可以考虑分门别类给不同模块处理,数据存储可以考虑循环队列或堆栈等存取效率的差异,重复计算结果可考虑缓存复用 中间件的话,对请求的代理分发,结合硬件

每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

原文:每一个程序员都应该知道的高并发处理技巧.创业公司如何解决高并发问题.互联网高并发问题解决思路.caoz大神多年经验总结分享 本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头的方案可能并不适合创业公司,那么如何保证高并发问题不成为创业路上的拦路虎,是每一个全栈工程师.资深系统工程师.有理想的程序员必备的技能,希望本文助您寻找属于自己的"成金之

请问,有没有支持高并发的Java爬虫服务器????

问题描述 请问,有没有支持高并发的Java爬虫服务器???? 请问,有没有支持高并发的爬虫服务器.... 目前想实现支持一个高并发的爬虫.. 解决方案 你应该说的是开源的爬虫框架吧,可以看看这个: nutch 另外,C++的larbin也不错

管理Web应用程序的若干策略

从当前集成的J2EE应用程序到SOA的出现,企业Web应用程序变得越来越复杂.越动态并且对于企业的成功越来越重要.这个回报是巨大的,但是,由此产生的新的风险也是巨大的.IT团队日益需要新的管理解决方案提供可见性.分析和所有层次的控制.这些层次包括从应用程序运行时间环境到数据和http://www.aliyun.com/zixun/aggregation/13729.html">Web服务以及业务流程等. 什么是Web应用程序? 当前的Web应用程序有许多形式.Web应用程序可以是基于.NE

高负载均衡学习haproxy之安装与配置

一.haproxy介绍 以下开始介绍有关haproxy的原理及其优点. 1.1.haproxy原理 haproxy提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理.haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到

Java 并发编程学习笔记之核心理论基础_java

并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这样才能写出高效.安全.可靠的多线程并发程序.本系列会从线程间协调的方式(wait.notify.notifyAll).Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制.在此基础上,我们会进一步分析java.util.concurrent包的工具类,包括其使用方式.实现源码及其背后的原理.本