精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分布式事務之最終一致性在得物倉儲的實踐

開發
本地消息表這個方案最初是ebay提出的,核心就是將需要分布式處理的任務通過本地消息日志存儲的方式來異步執行。該方案可以存到本地文本,數據庫或消息隊列,再通過異步線程或者自動job發起重試。

1、背景介紹

供應鏈倉儲域子域繁多,例如庫存域,lpn域等,平時開發的過程中涉及很多分布式事務的場景,例如收貨加庫存,發貨扣庫存,揀貨入箱,發貨出箱等一些分布式事務場景,所以迫切需要出一套分布式事務處理方案,在調研了市場上的分布式事務解決方案,結合wms自身業務域不是強一致性的特色,選擇了最終一致性,且使用本地消息表去實現它。

本地消息表這個方案最初是ebay提出的,核心就是將需要分布式處理的任務通過本地消息日志存儲的方式來異步執行。該方案可以存到本地文本,數據庫或消息隊列,再通過異步線程或者自動job發起重試。

2、設計前的思考

在操作本地事務的同時,需要額外寫入一張需要最終一致性業務記錄的表,即本地消息表,且該業務記錄是有狀態的,在本地事務提交后,再執行需要最終一致性的方法,成功后更新記錄狀態為成功,如果失敗了,還要引入兜底重試機制,下圖能簡單介紹它的功能:

圖片

為了實現以上最終一致性的功能。我們同樣還需要做到以下幾點:

  1. 無侵入:這個好理解,對于需要最終一致性的場景,可以很簡單的實現
  2. 策略化:包括重試次數,重試的間隔時間,是否使用異步方式等
  3. 通用性:最好是無改動(或者很小改動)的支持絕大部分的場景,拿過來直接可用
  4. 復用性:對于異常場景存在需要重試場景,同時希望把正常邏輯和重試邏輯復用

3、架構設計

調研了大家對一致性框架的訴求,最終定義了如,入參自定義序列化,環境隔離,同步異步執行切換,注解支持,自定義執行攔截器,以及適配得物倉儲業務的業務上下文訂制以及持久化等一系列的核心能力,底層依賴了Spring的生態,在數據存儲依賴了Mysql,Mongodb,緩存分布式鎖上依賴了Redis等一系列主流的中間件,最終以jar包形式實現,盡可能做到即拿即用。

圖片

4、詳細設計

基于在以上的架構設計后,做了以下設計

4.1 注解支持:@EnableConsistency

為了讓用戶更快,更方便的接入一致性框架,我們在早期的抽象類繼承的方案上做了一版本升級,使用注解,使得使用方式跟@Transactional注解一樣,只要加上@EnableConsistency就支持最終一致性的支持,非常方便。

4.2 自動重試&重試等待策略可配:

最終一致性有個天然的組成部分就是需要重試,一致性框架也不例外,引用了Spring的

ScheduledTask實現定時重試那些運行失敗的記錄,另外重試等待策略同樣可配置:

4.2.1 重試等待策略

固定時間重試

支持配置固定時間間隔重試

延遲指數重試

底層采用Math.pow函數在重試次數越多次,執行間隔時間呈指數級增長


圖片

4.2.2 自定義重試次數

注解式支持重試次數的定義

4.3 自定義攔截器

在執行需要最終一致性方法的時候,我們同樣提供了如Spring AOP一樣被代理方法的前置,成功,異常后需要做的一些切面功能,非常方便的滿足使用者的擴展,解耦了實現與擴展。

圖片


/**
* 在記錄重試次數失敗后 執行
* @param context
* @param lastException
*/
void close(ConsistencyContext context, Throwable lastException);
/**
* 開始執行重試前 攔截器
* 如果返回false 則 執行期不繼續進行
* @param context
* @return
*/
boolean open(ConsistencyContext context);
/**
* 發生異常攔截器
* @param context
* @param throwable
*/
void onError(ConsistencyContext context, Throwable throwable);

4.4 業務上下文&持久化

在業務系統的開發中,存在一個ThreadLocal的上下文,記錄了用戶的組織架構,簽到等一系列用戶信息。在設計一致性框架的時候我們考慮到用戶上下文的存在,暴露了業務上下文擴展,以及存儲業務上下文供重試時使用的能力。

圖片

public interface ContextListener {

/**
* 獲取上下文內容
* @return
*/
Map<String,String> getContext();

/**
* 設置用戶上下文
* @param contextMap
*/
void setContext(Map<String, String> contextMap);

/**
* 清除用戶上下文
* @param contextMap
*/
void clear(Map<String, String> contextMap);
}

4.5 環境隔離

由于得物的預發環境與生產環境采用的同一批數據庫,故也將一致性框架記錄采用了spring.profile.active的值做環境隔離,確保重試時不會預發的跑到生產的數據。

圖片

4.6 入參自定義序列化

由于需要在本地消息表中記錄需要重試的方法的入參,故就涉及到入參序列化的問題,在思考良久之后,只提供默認的Json方式的序列化與反序列化,如果用戶需要額外的序列化與反序列化方法,我們也支持,提供了暴露序列化與反序列化的口子供用戶實現。

public interface SerializerListener{

/**
* 進行序列化
* @param params
* @return
*/
String serializer(Object[] params);


/**
* 反序列化
* @param str
* @return
*/
Object[] deserializer(String str);
}

4.7 執行模式可配置

一般用本地消息執行最終一致性的部分,開始的設計是異步化執行,后續收到使用者用戶的反饋,也有部分同步執行的場景,故增加了同步異步執行開關,開發者自行選擇。

4.8 數據模型&狀態機

圖片


4.9 核心代碼展示

4.9.1ExecutorAutoConfiguration框架初始化


/**
* 加載為切面增強提供織入接口advice,和注入advice的pointcut
*/
@PostConstruct
public void init() {
Set<Class<? extends Annotation>> eventualConsistencyAnnotationTypes = new LinkedHashSet<Class<? extends Annotation>>(1);
eventualConsistencyAnnotationTypes.add(EventualConsistency.class);
this.pointcut = buildPointcut(eventualConsistencyAnnotationTypes);
this.advice = buildAdvice();
buildExecutorManager();
if (this.advice instanceof BeanFactoryAware) {
((BeanFactoryAware) this.advice).setBeanFactory(beanFactory);
}
}

4.9.2 核心注解@EventualConsistency

使用最終一致性方法的核心注解:

public @interface EventualConsistency {
/**
* 第一次執行是否異步執行
* @return
*/
boolean async() default true;

/**
* 最大重試次數
* @return
*/
int maxRetryTimes() default 6;
/**
* 延遲時間
* @return
*/
Delay delay() default @Delay;

/**
* Bean names 攔截器
* @return retry listeners bean names
*/
String[] listeners() default {};

@Deprecated
String label() default "";

String beanName() default "";

/**
* Bean names 攔截器 用來進行序列化和反序列化
* @return retry listeners bean names
*/
String serializerListener() default "";

String referenceNo() default "";

@AliasFor(annotation = Transactional.class)
Class<? extends Throwable>[] rollbackFor() default Exception.class;

@AliasFor(annotation = Transactional.class)
Class<? extends Throwable>[] noRollbackFor() default {};

boolean manageContext() default true;
}

4.9.3 核心實現Advice,MethodInterceptor的AnnotationAwareRetryOperationsInterceptor

圖片


@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
// 獲取最終執行攔截的委托
MethodInterceptor delegate = getDelegate(invocation.getThis(), invocation.getMethod());
if (delegate != null) {
return delegate.invoke(invocation);
} else {
return invocation.proceed();
}
}

4.9.4 延遲執行策略


public interface DelayPolicy {
/**
* 獲取下次執行時間
* @return
*/
Long nextTime();
}
/**
* 延遲指數
*/
public class ExponentialDelayPolicy implements DelayPolicy {

public static final long DEFAULT_INITIAL_INTERVAL = 2L;

public static final int DEFAULT_MULTIPLIER = 3;

/**
* 默認重試最大延遲時間 (24小時)
*/
public static final long DEFAULT_MAX_INTERVAL = 86400L;
/**
* 初始間隔
*/
private volatile long initialInterval = DEFAULT_INITIAL_INTERVAL;

private volatile int multiplier = DEFAULT_MULTIPLIER;
/**
* 最大延遲時間
*/
private volatile long maxInterval = DEFAULT_MAX_INTERVAL;

@Override
public Long nextTime() {
ConsistencyContext context = ConsistencyContextHolder.getContext();
Double pow = Math.pow(initialInterval + context.getRetryCounts(), multiplier);
if(pow > maxInterval){
return maxInterval;
}
return pow.longValue();
}
}
/**
* 固定時間
*/
public class FixedDelayPolicy implements DelayPolicy {
private static final long DEFAULT_DELAY_PERIOD = 10L;

private volatile long delayPeriod = DEFAULT_DELAY_PERIOD;

@Override
public Long nextTime() {
return this.delayPeriod;
}
}

4.9.5 AsyncConsistencyExecutor異步最終一致性執行

圖片

5、未來展望

(1)后臺管理頁面設計,支持報表查詢,以及錯誤異常處理

(2)trace監控接入,方便定位問題

(3)適配業務支持類型DB

(4)自定義歸檔策略

最終一致性框架是由wms全組同學一起設計和開發完成,并且陪伴了得物快速發展的兩年多,經歷了2個618以及3個雙十一,若干個情人節,圣誕節的考驗。系統運行健康,無性能瓶頸,提升了很多場景下最終一致性的開發速度。目前仍在安全穩健的保障著倉儲域服務的正常運轉。

責任編輯:龐桂玉 來源: 得物技術
相關推薦

2021-06-16 08:33:02

分布式事務ACID

2023-07-25 09:52:00

本地事務宕機

2025-08-05 04:22:00

2024-01-31 09:54:51

Redis分布式

2019-10-11 23:27:19

分布式一致性算法開發

2019-09-05 08:43:34

微服務分布式一致性數據共享

2021-11-22 16:30:30

分布式一致性分布式系統

2017-09-21 10:59:36

分布式系統線性一致性測試

2021-07-28 08:39:25

分布式架構系統

2015-10-19 10:42:37

分布式一致性應用系統

2018-04-10 16:24:03

算法分布式一致性

2024-06-04 10:58:30

2021-10-27 10:55:29

分布式

2024-11-28 10:56:55

2022-06-07 12:08:10

Paxos算法

2021-06-03 15:27:31

RaftSOFAJRaft

2023-08-22 09:32:44

邊緣計算管理

2020-02-25 23:39:11

架構運維技術

2025-06-09 08:00:37

分布式文件系統

2018-03-13 08:20:48

區塊鏈數據安全
點贊
收藏

51CTO技術棧公眾號

а√天堂8资源中文在线| 91高潮大合集爽到抽搐| 无码日韩精品一区二区免费| 色88888久久久久久影院野外| 日本一区二区在线视频| 国产男女猛烈无遮挡| 在线亚洲国产精品网站| 中文字幕一区日韩电影| 国产免费一区二区三区最新6| 香蕉成人av| 一区二区三区毛片| 日韩伦理一区二区三区av在线| 国产精品无码专区av免费播放| 影音先锋中文字幕一区二区| 色妞一区二区三区| 青青草视频播放| 奇米一区二区| 在线观看视频欧美| www.av片| а√天堂8资源在线官网| 久久久久久久综合色一本| 亚洲精品免费av| www.久久视频| 日韩一级精品| 欧美国产日韩一区二区在线观看 | 每日在线观看av| 免费人成在线观看播放视频| 久久久久久电影| 国产一区精品在线| 国产夫妻在线观看| 国内精品免费在线观看| 国产精品成人品| 四虎成人在线观看| 亚洲国产99| 久久国产精品久久久| 后入内射无码人妻一区| 国产一区日韩| 亚洲另类激情图| xxxx黄色片| 成人高潮a毛片免费观看网站| 91.com视频| 天天综合网日韩| 国产成人免费9x9x人网站视频| 丰满岳妇乱一区二区三区| 男人c女人视频| 男女免费观看在线爽爽爽视频| 亚洲欧洲另类国产综合| 亚洲精品无人区| 福利在线播放| 国产精品污www在线观看| 亚洲欧洲精品一区二区三区波多野1战4 | 19禁羞羞电影院在线观看| 伊人色综合久久天天人手人婷| 一区二区欧美日韩| 免费黄色在线网站| 亚洲色图19p| av电影一区二区三区| 99视频免费在线观看| 亚洲精品v日韩精品| 黄色污污在线观看| 在线播放蜜桃麻豆| 亚洲国产欧美另类丝袜| 欧美黑人经典片免费观看 | 亚洲一区二区三区四区在线观看 | 久草成人在线视频| 亚洲黄色av| 国产999精品| 国产精品xxxxxx| 精品亚洲成a人在线观看| 亚洲一区二区三区视频| 黑人精品一区二区三区| 99国产精品一区| 日本一区二区三区视频在线播放| 自拍视频在线免费观看| 依依成人精品视频| 北条麻妃在线视频观看| 色尼玛亚洲综合影院| 欧美日本在线视频| 日韩欧美中文在线视频| 秋霞午夜一区二区三区视频| 日韩激情片免费| 娇妻被老王脔到高潮失禁视频| 国产精品精品国产一区二区| 欧美精品少妇videofree| 成人免费区一区二区三区| 亚洲欧美日韩国产一区二区| 成人看片人aa| 天堂av手机版| 国产精品久久久久影院| 久久这里只有精品23| 写真福利精品福利在线观看| 777久久久精品| 成年人网站免费看| 久久久久免费av| 91精品国产91久久久久久最新| 91黑人精品一区二区三区| 国产美女娇喘av呻吟久久| 国产一区自拍视频| 香蕉视频在线看| 亚洲二区视频在线| 成人性生交免费看| 精品av导航| 久久久精品视频在线观看| 久久午夜免费视频| 国产一区二区三区免费播放| 欧美动漫一区二区| 青青草视频在线免费直播| 在线免费不卡视频| 人妻av一区二区| 成人毛片在线| 精品91福利视频| 秋霞av在线| 波多野结衣一区二区| 免费精品99久久国产综合精品| 91精品在线播放| 男人的天堂av高清在线| 樱桃视频在线观看一区| 日韩不卡一二三| 婷婷精品在线| 久久久久免费视频| 国产精品亚洲欧美在线播放| 国产天堂亚洲国产碰碰| 婷婷五月综合缴情在线视频| avtt久久| 日日骚久久av| 免费看av在线| 久久精品一区二区| 欧美s码亚洲码精品m码| 日韩一区二区三区高清在线观看| 色爱av美腿丝袜综合粉嫩av | 亚洲 美腿 欧美 偷拍| 亚洲品质自拍视频| 女同激情久久av久久| 国产中文字幕一区二区三区| 51久久精品夜色国产麻豆| 丰满大乳国产精品| 一区二区三区不卡在线观看| 男插女视频网站| 亚洲精品国产成人影院| 成人免费淫片视频软件| 无遮挡的视频在线观看| 欧美老肥妇做.爰bbww| 日韩福利在线视频| 日韩成人精品视频| 日韩欧美精品一区二区| 欧美极品免费| 国产亚洲成av人片在线观看桃| 国产精品久久久久久久久久精爆| 久久综合色8888| av片中文字幕| 欧美日韩中文字幕一区二区三区| 国产成人激情视频| 超碰国产在线| 欧美精品在欧美一区二区少妇| 欧美xxxx精品| 极品尤物av久久免费看| 一区二区三区四区免费观看| 国产美女精品视频免费播放软件| 操人视频在线观看欧美| 亚洲AV无码精品色毛片浪潮| 亚洲国产色一区| 亚洲精品乱码久久久久久久| 亚洲欧美成人综合| 日韩欧美精品久久| 国产精品毛片无码| 久久久久中文字幕2018| 日本午夜在线| 欧美老女人在线| 国产一区二区日韩| 日韩精品第一页| 色在线中文字幕| 亚洲欧美综合v| 涩涩视频在线观看| 成人一区而且| 欧美激情一级欧美精品| 少妇精品高潮欲妇又嫩中文字幕 | 亚洲精品视频网上网址在线观看 | 国产一区激情在线| 国产九色porny| 欧美禁忌电影| 91视频国产一区| 九色porny自拍视频在线播放 | 亚洲精品国产一区黑色丝袜| 精品一区二区免费| 成年人看的毛片| 欧美丝袜激情| 国产精品成人一区二区三区 | 亚洲精品少妇| 亚洲欧洲精品一区二区| 99re8这里有精品热视频8在线| 38少妇精品导航| 日本免费视频在线观看| 亚洲国产精品免费| 一级特黄特色的免费大片视频| 亚洲一区二区三区四区在线观看 | 亚洲第一区色| 亚洲国产日韩综合一区| 国产精品三p一区二区| 国产精品人成电影| 97在线超碰| 精品国产网站地址| 青青九九免费视频在线| 欧美一区二区三区婷婷月色 | 奇米精品一区二区三区四区| www.成年人视频| 日韩av在线中文字幕| 国产丝袜不卡| 成人在线精品| 国产精品亚发布| 三级在线看中文字幕完整版| 久久国产精品久久精品| 国产在线观看网站| 亚洲国语精品自产拍在线观看| 一区二区久久精品66国产精品 | 日本欧美三级| 99在线热播| 在线视频成人| 国产精品精品视频| 亚洲欧洲高清| 欧美性资源免费| 菠萝蜜视频在线观看www入口| 久久精品亚洲一区| 欧美18hd| 中文字幕日韩av电影| 人操人视频在线观看| 亚洲精品国产免费| 人人妻人人澡人人爽精品日本| 欧美精品久久99久久在免费线 | 伊人久久大香线蕉精品| 国内精品视频在线观看| 美乳视频一区二区| 欧美一性一交| 精品国产中文字幕| 日本欧美韩国国产| 九九久久99| 群体交乱之放荡娇妻一区二区| 成人免费看片网址| 亚洲国产欧美在线观看| 亚洲xxxx做受欧美| www一区二区三区| 成人欧美一区二区三区在线| 青娱乐极品盛宴一区二区| 国产免费久久av| 亚洲日日夜夜| 91免费在线观看网站| 视频一区国产| 动漫3d精品一区二区三区 | 激情综合亚洲精品| 最新av免费在线观看| 国产在线国偷精品产拍免费yy| 51自拍视频在线观看| 国产一区美女在线| 欧美日韩一区二区区别是什么| 国产盗摄一区二区三区| 野战少妇38p| 91视频一区二区三区| 天天躁日日躁aaaxxⅹ | 色爱区成人综合网| 日韩一区二区在线| 欧洲美女和动交zoz0z| 亚洲一本视频| 国产免费黄视频| 久久久综合网| 手机av在线免费| 国产成人午夜视频| www.88av| 欧美激情在线观看视频免费| www.xxxx日本| 亚洲高清免费在线| 麻豆成人免费视频| 欧美三级电影网| wwwav在线播放| 欧美a级理论片| 精品一区二区三区毛片| 好看不卡的中文字幕| 国产午夜伦鲁鲁| 日本中文字幕一区二区视频 | 日韩 国产 欧美| 欧美日韩精品专区| 不卡视频免费在线观看| 日韩电影中文字幕在线| 日韩精品毛片| 性色av香蕉一区二区| 欧美aaa视频| 999精品在线观看| 伊人春色之综合网| 亚洲黄色网址在线观看| 国产欧美另类| 亚洲理论中文字幕| 91美女片黄在线观看| 国产jizz18女人高潮| 午夜欧美在线一二页| 伊人久久成人网| 亚洲精品美女在线观看播放| 黄色网页在线播放| 国产成人一区二| 国产欧美三级电影| 久久久成人精品一区二区三区| 夜夜嗨网站十八久久 | 99久久精品费精品国产一区二区| av永久免费观看| 午夜欧美视频在线观看| 国产精品一品二区三区的使用体验| 亚洲国产成人精品一区二区| 久久国产精品一区| 青青青国产精品一区二区| 日韩精品视频中文字幕| 亚洲一区二三| 美女精品一区| 水蜜桃av无码| 一区二区三区不卡视频| 中文字幕在线日本| 日韩大陆毛片av| 9765激情中文在线| 成人av在线网址| 精品日产免费二区日产免费二区| 日韩 欧美 视频| 国模一区二区三区白浆| 欧美精品日韩在线| 色美美综合视频| 四虎精品在线| 性欧美在线看片a免费观看| 日韩一二三区| 中文字幕色呦呦| 黄色小说综合网站| 五月婷婷六月香| 欧美在线观看一区| 国产午夜在线视频| 日本韩国欧美精品大片卡二| 欧美变态挠脚心| 亚洲 自拍 另类小说综合图区| 国产精品一区二区男女羞羞无遮挡| 毛片视频免费播放| 精品视频免费在线| 91精品国产91久久久久游泳池 | 美国成人xxx| 一卡二卡三卡视频| 成人黄页毛片网站| 精品小视频在线观看| 精品三级在线看| 波多野结衣在线高清| 国产在线欧美日韩| 99热这里只有成人精品国产| 蜜臀av粉嫩av懂色av| 亚洲国产综合视频在线观看| 欧美一级在线免费观看| 久久久综合免费视频| 狼人精品一区二区三区在线| 人人妻人人做人人爽| 不卡一卡二卡三乱码免费网站| 奇米影视第四色777| 国产偷国产偷亚洲清高网站| 国产伦精品一区二区三区视频金莲| 精品一区日韩成人| 天堂午夜影视日韩欧美一区二区| 99久久久无码国产精品性| 欧洲av一区二区嗯嗯嗯啊| 欧美性天天影视| 999视频在线观看| 亚洲美女啪啪| 人妻av无码一区二区三区| 欧美日韩综合一区| av片在线观看永久免费| 国产精品美女诱惑| 美女久久一区| 日韩亚洲欧美中文字幕| 日韩一区二区三区高清免费看看| av在线资源| 日本公妇乱淫免费视频一区三区| 麻豆精品一二三| 真实国产乱子伦对白在线| 亚洲精品成人av| 国产极品嫩模在线观看91精品| 99精品视频网站| 不卡影院免费观看| 国产乱码在线观看| 欧美超级免费视 在线| 黄色免费大全亚洲| 在线观看的毛片| 亚洲一区二区在线视频| 男女网站在线观看| 91免费看网站| 日韩精品一级中文字幕精品视频免费观看| 黄色录像免费观看| 亚洲高清免费观看高清完整版| 成人全视频在线观看在线播放高清| 中文字幕精品在线播放| 久久综合九色综合97婷婷女人| 在线观看免费高清视频| 国内精品模特av私拍在线观看| 国产免费播放一区二区| 无码人妻一区二区三区在线视频| 欧美日韩一区二区免费视频| 亚洲xxxxxx| 免费一区二区三区| 丁香另类激情小说| 中文字幕乱码人妻二区三区| 午夜精品福利视频| 91精品秘密在线观看| 免费黄色在线视频|