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


声明:本文转载自https://my.oschina.net/wangxindong/blog/1560584,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

1、 聚石塔准入架构

如果塔内的系统与商家IDC非淘系业务系统进行交互,无法满足上述应用架构准入规则的要求,但必须提交塔内系统与塔外系统数据交互的业务场景及字段说明,平台审核通过后,开发者应通过开放平台奇门标准接口体系对塔外系统交互.消息(数据)服务。本篇文章主要是从API调用和推送去阐述。

2.1、TOP主动通知

提供SDK长连接支持,接收到通知后然后去调用API接口获取相应的数据。

JAVA接口使用说明:

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使用代码示例:

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分钟进行第一次重发,如果应用一直处理失败,服务 端会一直定时重发,直到消息被清理为止。

2.2、订单同步服务

mysql主备复制实现原理.jpg

实际上是利用binlog这种原理,用主从复制的原理。

同步方式:DB=>DB

数据位置:数据存放在系统自建的SYS_INFO库里,每个服务商申请RDS的时候都有系统自建一个sys_info库。

业务支持:订单、商品、淘宝退款、天猫退款、分销数据的同步。

实时性:正常的数据是实时同步,延迟1~3S左右; 补单机制,交易的补单间隔时间5~20分钟(商品和退款补单时间稍长,约为10~30),下完单之后99%的订单是3s以内推送,1% 5~20分钟内补上

权限:只读,涉及UPDATE操作任然是通过接口处理,比如发货等接口。

数量限制:暂时没有,单应用建议最大不要超过50万

数据时长:最多推送3个月历史数据

2.3、开放消息ONS

ONS(Open Notification Service)是基于阿里开源消息中间件MetaQ(RocketMQ).包含以下三种业务消息类型:

官方消息通知:向开发者推送阿里官方消息,例如类目促销活动报名、聚划算报名、商品违规类通知.

平台业务变更消息:即向外推送淘宝的交易、商品、退款退货、物流流转、订单评价语译分析等平台业务变更消息

用户自定义消息:以集群消费或广播消费方式将开发者自定义的高并发业务发送到客户端,例如订单转单、短信群发、批量处理等.

 

2、 三种消息的对比

其它对比:

订单同步与TOP主动通知的区别?

TOP主动通知实时性比较高,只包含部分的变化信息,完整的信息需要通过API来调用
订单同步服务实时性要慢于TOP主动通知,但是数据较全和API返回数据相同;实时性要求特别高的不适合使用

 

开放消息ONS适用场景?

异步解耦: 消息系统的典型业务场景,用来为多个系统之间做解耦.

削峰填谷:高并发的业务数据洪峰需要一个高性能的MQ云削峰填谷.

数据同步:ONS独特的广播消息和集群消息让多个子系统间的数据及时同步.

 

3、 技术实现

TOP主动通知:利用提供的java或者.net版本的sdk程序与淘宝消息服务器建立长连接通道,比如netty实现。

订单同步服务:通过binlog方式订阅业务数据库中的数据,我们有类似的中间件cannel。

开放消息ONS:是一种MQ服务,阿里是基于RocketMQ,我们类似的中间件是AMQ。

4、 总结

阿里官网文档以及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

本文发表于2017年11月03日 22:34
(c)注:本文转载自https://my.oschina.net/wangxindong/blog/1560584,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 3749 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1