西维蜀黍

【Distributed System】一致性哈希(Consistent Hashing)

问题

在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点。

  ...


【Distributed System】分布式事务 - Saga

Context

You have applied the Database per Service pattern. Each service has its own database. Some business transactions, however, span multiple service so you need a mechanism to implement transactions that span services. For example, let’s imagine that you are building an e-commerce store where customers have a credit limit. The application must ensure that a new order will not exceed the customer’s credit limit. Since Orders and Customers are in different databases owned by different services the application cannot simply use a local ACID transaction.

  ...


【Distributed System】分布式事务 - TCC

Background

咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。

那对一个订单支付之后,我们需要做下面的步骤:

  • 更改订单的状态为“已支付”
  • 扣减商品库存
  • 给会员增加积分
  • 创建销售出库单通知仓库发货

这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。

进一步思考

好,业务场景有了,现在我们要更进一步,实现一个 TCC 分布式事务的效果。

什么意思呢?也就是说

  1. 订单服务-修改订单状态
  2. 库存服务-扣减库存
  3. 积分服务-增加积分
  4. 仓储服务-创建销售出库单

上述这几个步骤,要么一起成功,要么一起失败,必须是一个整体性的事务。

假设现在订单的状态都修改为“已支付”了,结果库存此时库存已经是0,因此该订单下单失败。

结果呢?还是扣了用户的钱,这不是坑人吗?

  ...


【Distributed System】分布式事务(Distributed Transactions)

背景

事务(Transaction)

**事务(Transaction)**提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。

数据库本地事务 - ACID

说到数据库事务就不得不说,数据库事务中的四大特性,ACID:

原子性(Atomicity)

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

就像你买东西要么交钱收货一起都执行,要么要是发不出货,就退钱。

  ...


【Java】锁 - Lock 接口

Lock接口

我们现在就来看看lock接口定义了哪些方法:

//获取锁 
void lock(); 

//获取锁的过程能够响应中断
void lockInterruptibly() throws InterruptedException 

//非阻塞式响应中断能立即返回,获取锁放回true反之返回fasle 
boolean tryLock();

//超时获取锁,在超时内或者未中断的情况下能够获取锁 
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

//获取与lock绑定的等待通知组件,当前线程必须获得了锁才能进行等待,进行等待时会先释放锁,当再次获取锁时才能从等待中返回
Condition newCondition();
  ...