企业应用架构模式学习笔记(并发)

来源:互联网 发布:js将timestamp 编辑:程序博客网 时间:2024/05/16 06:26
 

第五章:并发

并发——企业应用致命杀手。

事务——简化企业应用开发,控制并发。

离线并发(offline concurrency):多数据库事务中数据操作的并发控制。

并发本质问题:

1、更新丢失(Lost updates):

2、不一致读(inconsistent read

要在正确性与并发处理能力的灵活性之间寻找平衡。

进程:重量级执行语境,将正在处理的内部数据与外部隔离开。

线程:轻量级活跃执行单元,一个单独进程里可以有多个活跃线程。

注意:线程是共享内存的,可能导致并发问题。

 

服务器处理模式:

1、只有一个进程,每次处理一个请求。

优点:避免出现并发问题。

缺点:处理能力非常弱。

2、每个请求分配一个独立的进程。

优点:同样可以避免出现并发问题。

缺点:创建进程的开销非常大,严重减低服务器性能。

3、只有一个进程,为每个请求分配一个独立的线程。

优点:大大增加服务器的处理能力。

缺点:可能会出现并发问题,需要较高的技能。

 

事务:数据库操作执行语境。

1、系统事务:应用程序与数据库之间的事务。

2、业务事务:用户与应用程序之间的事务。

 

并发问题解决方法:

1、隔离(isolation):划分数据,使得每一片数据都只能被一个执行单元访问。

最佳实践:找到各种创建隔离区的办法,并且保证在每个隔离区里能够完成仅可能多的任务。

注意:隔离只能减小错误发生的机率,但不能完全避免。

2、不变性(immutability):只有在共享数据可以修改的情况下,才会出现并发问题。

 

并发控制策略:

1、乐观并发控制(乐观锁策略):用于冲突检测,不能避免冲突。

优点:提高系统性能和可用性。

缺点:不能控制并发,当出现并发时很难处理。

2、悲观并发控制(悲观锁策略):用于冲突避免。

优点:可以控制并发。

缺点:严重降低系统性能和可用性。

选择标准:冲突的频率与严重性。

乐观锁通常将冲突检测建立在数据的某种版本标记上,可能是时间戳,也可能是顺序计数器。

 

读锁与写锁:

1、读锁(read lock):也称共享锁,允许多个人对同一数据加锁,一旦有人获取读锁,其他人便不能获得写锁。

2、写锁(write lock):也称排他锁,一旦有人得到了写锁,其他人便不能获得读锁或写锁。

 

死锁:

1、现象:两个锁资源互相等待,谁也不能释放。

2、原因:在已经得到锁的情况下希望得到更多的锁(或从读锁升级到写锁)。

3、防治:强制在工作开始的时候就获取所有的锁,之后不允许得到更多的锁。

4、处理:超时控制和检测机制。

超时控制:为每个锁都增加一个超时期限,容易实现,但在没有死锁的情况下可能因为持锁时间过长而失败。

检测机制:难于实现。

 

事务:

定义:

1、有边界的工作序列,开始和结束都有明确定义。

 2、所有相关资源在事务开始和结束时都保持一致。

属性:

1、原子性(Atomicity):动作序列的每个步骤要么全部成功,要么全部回滚。

2、一致性(Consistency):事务开始和结束时,系统资源必须处于一致状态。

3、隔离性(Isolation):一个事务,直道提交之后,其结果才对其他事务可见。

4、持久性(Durability):一个已提交事务的任何结果都必须是永久性的。

长事务:跨越多个请求的事务。

请求事务:请求开始时开启事务,请求结束时提交事务。可以处理最大的吞吐率。

延迟事务:只在修改数据时开启事务。不能控制并发,可能出现不一致读。

 

锁升级(lock escalation):一个事务锁住了一个表的许多行,数据库无法处理那么多锁,只能将锁升级到锁住整个表。对并发有很大的影响。

 

隔离级别:

隔离级别

脏读

不可重复读

幻读

可串行化(Serializable

N

N

N

可重复读(Repeatable Read

N

N

Y

读已提交(Read Committed

N

Y

Y

读未提交(Read Uncommitted

Y

Y

Y

 

选择事务的隔离级别要在灵活性和正确性之间做出权衡,在错误于性能之间取得折衷!

 

离线并发控制模式:

1、拆分成多个系统事务。

2、采用长事务。可伸缩性会受到损失。

3、乐观离线锁。在业务事务间使用乐观的并发控制机制。

优点:1、易于编程实现。

 2、提供最好的灵活性。

缺点:1、只有在提交事务时才能发现错误。

4、悲观离线锁。

优点:1、尽可能早的发现错误。

缺点:1、难于编程实现。

 2、降低系统灵活性。

5、粗粒度锁。以一组对象为单位管理并发。

6、隐含锁。

原创粉丝点击