探秘阿里聚石塔技术架构实现(一)

一、 聚石塔准入架构

若是塔内的系统与商家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

相关文章
相关标签/搜索