H5牌九棋牌网站搭建架构(Q1687054422)以及Ignite如何处理各种类型的集群节点,下面是在剩下的文章中要覆盖的主题:
- 并发模型和隔离级别
- 故障转移和恢复
- Ignite持久化层中的事务处理(WAL、检查点及其他);
- 第三方持久化中的事务处理
在本文中,我们会聚焦并发模型和隔离级别。 大多数现代多用户应用允许并发数据访问和修改。为了管理此功能,并确保系统从一个一致状态切换到另一个一致状态,使用了事务的概念。事务依赖于锁,它可以在事务开始时(悲观锁)获得,也可以在事务结束提交之前(乐观锁)获得。 Ignite支持两种并发模型:下面先讲悲观并发模型。
悲观并发模型
悲观并发模型的一个例子是两个银行账户之间的转账,需要确保两个银行账户的借贷状态正确记录。这时需要给两个账户加锁来确保更新全部完成并且余额正确。 在悲观并发模型中,应用需要在事务开始时锁定即将要读、写或者修改的所有数据。Ignite还支持一组悲观并发模型的,在读写数据时提供了灵活性:
- 读提交
- 可重复读
- 序列化
在读提交模型中,锁是在写操作对数据进行任何改变之前获得的,比如put()或者putAll(),而可重复读以及序列化模型用于读写操作都需要获得锁的场景。Ignite还有些内置的功能,使得调试和解决分布式死锁问题更容易。 下面的代码示例展示了可重复读的悲观事务,因为应用需要对一个特定银行账户进行读和写的操作:
try (Transaction tx = Ignition.ignite().transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
Account acct = cache.get(acctId);
assert acct != null;
...
// Deposit into account.
acct.update(amount);
// Store updated account in cache.
cache.put(acctId, acct);
tx.commit();
}
本例中,通过**txStart()和tx.commit()方法分别来进行事务的开启和提交。txStart()方法传递了PESSIMISTIC和REPEATABLE READ参数,在try块体中&#x