一.引言
大家在上网的过程中是不是经常有这样的体验,我在百度(或者京东、淘宝)上搜索一件商品(比如说:我搜索了一台iphone 手机看了看,但是没买),奇怪的是过两天,我竟然在某视频平台或者某网页上又看到了它?
而且更加奇怪的是,我明明是在电脑pc 端搜索的手机,但是我在手机上看电影的时候却能看到它,是不是也太奇怪了。
难道我的电脑、我的手机、我的ipad 等等电子设备都被监控了吗?
二、背景
《阿里巴巴大数据之路》中有讲到关于数据中台OneData 的方法论,其中分别涉及到OneModel、OneService、OneID。OneService 在之前的文章中已经有过分享,参考:
引言中所提到的小故事其实就是本文着重要分享的关于OneID 的部分
三、概念介绍
OneID是指同一用户、同一设备的一个唯一ID。
例子一:我用我自己的电脑搜索小米11,我又用这台电脑浏览其他网站,然后这个网站给我弹小米11的广告,对,也许你认为这种都是同一台电脑,非常简单,只需要根据ip等相关信息进行匹配就可以了。
例子二: 我用我自己的电脑搜索小米11,然后用自己的苹果手机,去浏览其他网站,然后其他网站又给我弹了小米11的广告,这怎么识别的呀?
我们认为这台电脑、这部手机、以及其他的电子设备是可以构成一个唯一的ID,即:OneID
但是你一定会问了,那他们是怎么关联上的呢?而不会关联错呢?比如说没有把我在电脑上搜索的小米11,推到我的手机上,而不是推到我女朋友的手机上
这个映射的过程,称之为:ID-Mapping
四、核心架构设计
1.业务逻辑
当使用安卓手机安装app,启动时会上报 IMEI,Mac地址 ,AndroidID,手机型号等设备信息
同理ios 会上报相关启动信息 idfa,手机设备等信息;pc 浏览器端会上报 cookie、浏览器相关信息。
但是每一次上报的信息不一定完全相同,比如说手机权限问题,浏览器cookie 清空等问题。
LocalID:app 启动会根据AndroidID生成本地id(不需要连网),记录为本地ID
OneID:app 联网上报的设备相关信息,用来打通多个app以及多端应用的唯一ID
OneID的作用:
(1)打通手机上多个app,比如说:淘宝、支付宝、高德等等是同一个用户(未登录时,登录时用账号id)
(2)打通多端应用,比如说你在手机端看剧,然后pc web 端能知道还是同一用户(解决账号共享无法定位同一用户的问题)
2.生成流程解析
(1)HBase数据表结构设计
安卓端表映射表结构(android_id_mapping),其他端类似:
OneID imei mac_adress android_id oaid
本地id 和 OneId映射表结构(local_id_mapping):
LocalID OneID
(2)为了应对高并发场景,将HBase 提前预热至Redis 缓存,redis 表设计
imei_value oneid1,oneid2...
mac_address_value oneid1,oneid2...
(3)ID-Mapping 映射流程
票选服务:
根据客户端上报的参数信息去redis 里面匹配OneID,核心权重设置
五、总结
最后来回答下开头提出的两个问题
问题一:我在百度(或者京东、淘宝)上搜索一件商品(比如说:我搜索了一台iphone 手机看了看,但是没买),奇怪的是过两天,我竟然在某视频平台或者某网页上又看到了它?
在视频平台看视频的时候,获取到浏览器的cookie等相关信息,通过调用百度的服务去匹配同一个设备的最新的搜索数据,然后进行广告投放,做到千人千面
问题二:而且更加奇怪的是,我明明是在电脑pc 端搜索的手机,但是我在手机上看电影的时候却能看到它,是不是也太奇怪了。
手机端装了看电影的app,同时我在pc web 端之前也看在该网站有观影信息,结合账号信息+设备信息+观影信息,生成一个OneID,打通该视频网站,所有端的数据。
后续我在pc web 看电影取获取当前唯一id的所有端的信息,然后调用京东或者淘宝的广告服务,进行投放。