探祕阿里聚石塔技術架構實現(一)

一、 聚石塔准入架構

若是塔內的系統與商家IDC非淘系業務系統進行交互,沒法知足上述應用架構准入規則的要求,但必須提交塔內系統與塔外系統數據交互的業務場景及字段說明,平臺審覈經過後,開發者應經過開放平臺奇門標準接口體系對塔外系統交互.消息(數據)服務。本篇文章主要是從API調用和推送去闡述。java

2.一、TOP主動通知

提供SDK長鏈接支持,接收到通知後而後去調用API接口獲取相應的數據。mysql

JAVA接口使用說明:git

public interface MessageHandler {
 
    /**
     * 消息通道客戶端收到消息後,會回調該方法處理具體的業務,處理結果能夠經過如下兩種方式來表述:
     * <ul>
     * <li>拋出異常或設置status.fail()代表消息處理失敗,須要消息通道服務端重發
     * <li>不拋出異常,也沒有設置status信息,則代表消息處理成功,消息通道服務端不會再投遞此消息
     * 
     * @param message 消息內容
     * @param status 處理結果,若是調用status.fail(),消息通道將會擇機重發消息;不然,消息通道認爲消息處理成功
     * @throws Exception 消息處理失敗,消息通道將會擇機重發消息
     */
    public void onMessage(Message message, MessageStatus status) throws Exception;
 
}

JAVA使用代碼示例:github

TmcClient client = new TmcClient("app_key", "app_secret", "default"); // 關於default參考消息分組說明
client.setMessageHandler(new MessageHandler() {
    public void onMessage(Message message, MessageStatus status) {
        try {
            System.out.println(message.getContent());
            System.out.println(message.getTopic());
        } catch (Exception e) {
            e.printStackTrace();
            status.fail(); // 消息處理失敗回滾,服務端須要重發
          // 重試注意:不是全部的異常都須要系統重試。 
          // 對於字段不全、主鍵衝突問題,致使寫DB異常,不可重試,不然消息會一直重發
          // 對於,因爲網絡問題,權限問題致使的失敗,可重試。
          // 重試時間 5分鐘不等,不要濫用,不然會引發雪崩
        }
    }
});
client.connect("ws://mc.api.taobao.com"); // 消息環境地址:ws://mc.api.tbsandbox.com/

消息重發邏輯是怎麼樣的?
對於斷開鏈接(如應用掛了)狀況,服務端會堆積消息,等應用從新鏈接進來後,再把堆積的消息順序推送給客戶端。一條消息從誕生開始,若是應用一直不接收,服 務端最長保留時間爲3天,超過3天會自動清除。對於鏈接正常,但消息處理失敗的狀況,服務端會最快隔10分鐘進行第一次重發,若是應用一直處理失敗,服務 端會一直定時重發,直到消息被清理爲止。sql

2.二、訂單同步服務

mysql主備複製實現原理.jpg

其實是利用binlog這種原理,用主從複製的原理。數據庫

同步方式:DB=>DBapi

數據位置:數據存放在系統自建的SYS_INFO庫裏,每一個服務商申請RDS的時候都有系統自建一個sys_info庫。服務器

業務支持:訂單、商品、淘寶退款、天貓退款、分銷數據的同步。網絡

實時性:正常的數據是實時同步,延遲1~3S左右; 補單機制,交易的補單間隔時間5~20分鐘(商品和退款補單時間稍長,約爲10~30),下完單以後99%的訂單是3s之內推送,1% 5~20分鐘內補上架構

權限:只讀,涉及UPDATE操做任然是經過接口處理,好比發貨等接口。

數量限制:暫時沒有,單應用建議最大不要超過50萬

數據時長:最多推送3個月曆史數據

2.三、開放消息ONS

ONS(Open Notification Service)是基於阿里開源消息中間件MetaQ(RocketMQ).包含如下三種業務消息類型:

官方消息通知:向開發者推送阿里官方消息,例如類目促銷活動報名、聚划算報名、商品違規類通知.

平臺業務變動消息:即向外推送淘寶的交易、商品、退款退貨、物流流轉、訂單評價語譯分析等平臺業務變動消息

用戶自定義消息:以集羣消費或廣播消費方式將開發者自定義的高併發業務發送到客戶端,例如訂單轉單、短信羣發、批量處理等.

 

二、 三種消息的對比

其它對比:

訂單同步與TOP主動通知的區別?

TOP主動通知實時性比較高,只包含部分的變化信息,完整的信息須要經過API來調用
訂單同步服務實時性要慢於TOP主動通知,可是數據較全和API返回數據相同;實時性要求特別高的不適合使用

 

開放消息ONS適用場景?

異步解耦: 消息系統的典型業務場景,用來爲多個系統之間作解耦.

削峯填谷:高併發的業務數據洪峯須要一個高性能的MQ雲削峯填谷.

數據同步:ONS獨特的廣播消息和集羣消息讓多個子系統間的數據及時同步.

 

三、 技術實現

TOP主動通知:利用提供的java或者.net版本的sdk程序與淘寶消息服務器創建長鏈接通道,好比netty實現。

訂單同步服務:經過binlog方式訂閱業務數據庫中的數據,咱們有相似的中間件cannel。

開放消息ONS:是一種MQ服務,阿里是基於RocketMQ,咱們相似的中間件是AMQ。

四、 總結

阿里官網文檔以及ISV的統一語言:消息,就是指數據,業務數據。聚石塔在TOP淘寶開放平臺接口中提供了SDK嵌入到服務商的系統中,經過SDK的長鏈接在接收的業務消息狀態變動後收到一個通知,隨後調用TOP的開放接口,拉取該業務對應的全量信息。這種方式的實時性是最高的。訂單同步解決的一個異常場景是網絡、服務器、開發技術水平等影響,經常會出現數據重複、數據漏單或者是獲取不了數據的現象那麼經過DB之間的數據複製功能,將數據準確的推送給服務商。開放消息ONS是一種基於MQ的處理,能夠接入阿里官方的消息也能夠在服務商系統之間使用,提供了一種系統間的異步機制支持。

 

 

轉載請註明做者並標明出處:https://my.oschina.net/wangxindong/blog/1560584

參考資料:

https://open.taobao.com/docs/doc.htm?spm=a219a.7629140.0.0.cOu4tc&treeId=2&articleId=101744&docType=1

https://github.com/alibaba/canal

相關文章
相關標籤/搜索