做为TANX SSP的系统入口,需要在网站(如有问必答)上嵌入阿里妈妈的广告调度代码。如:
<script type="text/javascript">
alimama_pid="mm_37227883_3484494_11371704";
alimama_width=300;
alimama_height=250;
</script>
<script src="https://a.alimama.cn/inf.js" type="text/javascript"></script>
以上广告代码中的关键信息意义如下:
阿里妈妈的广告前端系统的入口点(inf.js)中,首先对包和模块进行定义。代码如下:
var l = {
lt_pkgs: {
inf: "https://a.alimama.cn/",
packages: "https://a.alimama.cn/inf/"
},
lt_v: "1.1.5",
lt_t: "20130523.js"
};
意义如下:
参见kslite框架开发团队的github项目etaoux/kslite
kslite框架会根据包和模块的定义,异步加载模块的入口点(inf/main.js)。
kslite框架加载模块入口点(inf/main.js)脚本时,会携带参数。如下:
GET参数
在模块的入口点(inf/main.js)脚本中,负责向常规广告调度系统发出广告调度请求。
提供常规广告调度服务的URL地址是https://p.tanx.com/ex,负责接收由阿里妈妈广告前端系统发起的广告调度请求,进行常规的、不限于TANX SSP的广告调度。
GET参数
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
在接收到以广告位编号为主要参数的调度请求后,调度系统根据特定的广告调度逻辑,确定是否为该广告位提供TANX服务,然后回复特定分支的200 OK响应。
200 OK中定义TANX服务的关键数据如下:
var o = {
... ...
sd : "toruk.tanx.com"
},
p = {
c : 'gbk',
s : 'https://cdn.tanx.com/t/tanxssp.js'
};
主要定义的是:
这一设计,为广告流量的灵活分配提供了可能性,可以用于小流量测试、负载分担、单一化系统职责等各种场景。
广告调度请求的200 OK响应会执行程序,加载TANX SSP的广告前端系统的入口点脚本(tanxssp.js)。
Cookie参数
如果浏览器客户端存在TANX域的Cookie,在加载入口点时携带Cookie信息。如果没有,则不必携带。
如同阿里妈妈的入口点脚本,TANX SSP的入口点(tanxssp.js)也首先对模块和包进行了定义。如:
var l = {
lt_pkgs: {
tanxssp: "https://cdn.tanx.com/t/",
charset: "gbk"
},
lt_v: "1.0.0",
lt_t: "20130516.js"
};
与其不同的是,对同步加载时需要的模块入口点地址也进行了定义。如:
var a = "https://cdn.tanx.com/t/tanxssp/main.js?_t=20130516";
kslite框架会异步或同步的加载模块的入口文件(tanxssp/main.js)。
加载模块入口点(tanxssp/main.js)脚本时携带参数。如下:
GET参数
Cookie参数
当客户端存有TANX域的Cookie时,携带Cookie参数。没有Cookie,则不必携带。
在模块的入口点(tanxssp/main.js)脚本中,负责组装广告请求参数,向TANX广告调度系统(https://toruk.tanx.com/ex)发出广告调度请求。
同时,在模块的入口点(tanxssp/main.js)脚本中,也定义了TANX广告调度服务响应后,用于回调执行的函数。如:
var k = "jsonp_callback_" + parseInt(Math.random() * 100000, 10);
window[k] = function(s) {... ...}
提供TANX广告调度服务的URL地址是https://toruk.tanx.com/ex,负责接收由TANX广告前端系统发起的广告调度请求。
这里的toruk.tanx.com,是由常规广告调度服务器投放TANX SSP广告时,在200OK的响应中确定的TANX广告调度服务使用的域名。
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
GET参数
TANX广告调度系统(https://toruk.tanx.com/ex)响应的内容格式如下:
jsonp_callback_5021({
"pid":"mm_37227883_3484494_11371704",
"acookie":"1","width":"300","height":"250",
"distype":"1","webwidth":"","adboardtype":"98","fvs":"","title":"",
"clickurl":"",
"data":"<iframe scrolling=\"no\" height=250 frameborder=\"0\" width=300
style=\"border: 0pt none;\" marginheight=\"0\" allowtransparency=\"true\"
marginwidth=\"0\" border=\"0\"
src=\"http:\/\/strip.taobaocdn.com\/tfscom\/T1vEk0XatbXXbMsGbX.html?
name=itemdsp&url=www.120ask.com&iswt=1&pid=tt_37227883_3484494_11371704
&refpos=,n,i&adx_type=0&pvid=ac17d84c7c3c51a9b39900000012325a_0
&tanxdspv=http%3A%2F%2Frdstat.tanx.com%2Ftrd%3F%26f%3D%26k%3Da09e279ad7f7a12a
%26p%3Dmm_37227883_3484494_11371704%26pvid%3D0af6086e0820519ec01b0000000560d8\"
><\/iframe>",
"icon":"1","feedback":"","unregist":""
});
jsonp_callback_5021是在模块的入口点(tanxssp/main.js)脚本中定义的回调函数,负责将“data”字段中的iframe标签文本输出到页面中,向舞女页面发起请求。舞女页面是整个系统的神来之笔,后文会使用一个比较大的篇幅专题分析。
虽然这里只是从前端代码的角度分析整个系统,但是不分析业务管理系统,这个分析就是不完整的。
业务管理系统不外乎两个方向,一个是媒体管理方向,一个是广告管理方向。下面对这两个系统的职责作个简单的分析,不进行深入探讨。
估计系统是使用的是c.tanx.com(原域名:c.alimama.com)这个网站进行媒体管理的。
系统的主要职责如下:
橱窗推广的广告管理系统应该不是独立的,而是与淘宝网店系统(www.taobao.com)集成在一起的。
系统主要职责如下:
漫长的文档看到这里,就像83版《西游记》西梁女国那一集,太师引领着唐僧穿过秩序井然的皇家庭院,突然间闯入女王的寝宫,看到了御床上活色生香、温情脉脉的女王。然而,更让人激动不已的,这里竟然是此行的目的地。
这个系统设计的太高明、太复杂、太有灵性,无法用一个简单的词汇命名,恰好阿里系的架构师们使用了strip.taobaocdn.com域名,姑且就命名为脱衣舞橱窗展示系统吧。
把脱衣舞舞女与女王相提并论,似乎唐突佳人。但是,这里的舞女页面比女王更加顾盼多情、长袖善舞。更了不起的是,你无法记住每一个舞女页面的名字(如T1vEk0XatbXXbMsGbX.html),因为这都是由系统生成出来的,而这个系统必然会有可视化的管理系统去管理。
舞女页面是一个纯静态的HTML页面(地址如:https://strip.taobaocdn.com/tfscom/T1vEk0XatbXXbMsGbX.html),存储在CDN加速的静态服务器上(strip.taobaocdn.com),由一个系统拼装生成。
在前端系统执行回调函数,向舞女页面发起请求时,会携带一组参数。
舞女页面上的javascript的程序,负责解析使用这一组参数。
GET参数列表
舞女页面一手接住前端系统抛来的参数,另一手魔术般的调用淘宝的商品数据服务,将系统中需要展示的橱窗商品在广告位上一一展示出来。
淘宝商品信息数据服务URL的域名是tns.simba.taobao.com,接收舞女页面的请求参数,根据一个业务逻辑,把客户端需要展示的淘宝商品数据返回给舞女页面。
GET参数
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
tbcc_p4p_c2013_5_108621_13700760834161370076083497 = [{
"CUSTOMERID": "",
"TITLE": "\u82cf\u5b89\u771fSwise\u6b63\u54c1\uff01\u6b27\u6839\u7eb1\u4e0a\u8863
\u767d\u8272\u77ed\u8896t\u6064",
"DESC": "null",
"URL": "",
"RESOURCEID": "23639392129",
"GOODSPRICE": 24900,
"REDKEY": "",
"LOCATION": "\u6d59\u6c5f \u676d\u5dde",
"TBGOODSLINK": "http:\/\/img03.taobaocdn.com\/bao\/uploaded\/i3\/13892021309981906
\/T1ZdV2XAFdXXXXXXXX_!!0-item_pic.jpg_sum.jpg",
"WANGWANGID": "swise\u65d7\u8230\u5e97",
"EURL": "http:\/\/redirect.simba.taobao.com\/rd?w=mmp4ptest
&f=http%3A%2F%2Ftao.etao.com%2Fauction%3Fkeyword%3DT%25D0%25F4%26catid%3D50000671
%26refpid%3Dmm_37227883_3484494_11371704%26digest%3DB41CA84DF7A1F6A5BA9B11A299A4E52F
%26crtid%3D207543981%26itemid%3D23639392129%26adgrid%3D194389084
%26eurl%3Dhttp%253A%252F%252Fclick.simba.taobao.com%252Fcc_im%253Fp%253D%2526s%253D101579514
%2526k%253D288%2526e%253DqXhvVZ1o4lINKsYj8kZeljogOpoXgh03d2ByUOsMbpVCqy%25252BUFBA5jyzOsW4Yd
u3h21TcM78lZnZxuhrp93p%25252BzmTJuUEeDdZBMu33MUNq72RaC9QIzaMM3a0HSq4LDODxZYVuqHIwgPNzp
BcBlCh4A0bg0OxrKYkVV9N9YGVqKZDu4YRXY287eUTmrkbeHdEX4g8ojjF7O6GxFvFGRnXPFlSkghrhkAJhGLy4mUa5y9
ubk8MdSNDD%25252BmWprP1HRmiZRKsdofWb05R4yNH69PRxiz5jEdah9ftU&k=edce2b64d0a4b4b1",
"CP": "",
"DISPLAY_RESOLUTION": "80*80",
"RANKSCORE": "",
"ISPREPAY": "1",
"MATCHTYPE": "",
"PRICE": "",
"GRADE": "54545",
"ISMALL": "1",
"ADGEXTENSION": "location:\u6d59\u6c5f \u676d\u5dde;expire:2524579200;postage:0.00;isSupportVip:0;
vipDiscountRate:goldCard~100$platinaCard~100$diamondCard~100;isPostFree:1;ordinaryPostFee:0;
isCommend:0;spuId:216512255;skuPrice:null;isNew:1",
"SELLEREXTENSION": "manjiusong:1;creditPay:1;vertical3C:0;verticalGame:0;sevendaysRefundment:1;matchScore:4.8;
serviceScore:4.8;speedScore:4.8;realDescribe:1;genuineGuarantee:1;cod:0",
"ISHK": "0",
"ISGLOBAL": "0",
"SELL": "1813"
}, ... ... ]
淘宝商品特征数据服务的URL是https://show.re.taobao.com/feature.htm,接收舞女页面的请求参数,根据一个业务逻辑,把客户端需要展示的淘宝商品数据返回给舞女页面。
如果广告投放的淘宝商品是一组促销的商品,则请求这个服务,获取实时的促销信息。如果不是促销的商品,则不需要请求这个实时的服务。
GET参数
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
如tbcc_items_discounts_1369909156781([{
"promoOtherNeed": "",
"promoPrice": "",
"auction_id": "22441192364"
}, ... ...])
如果只是上述这些,那么我们可以说架构设计的合理、程序设计的水平高,但是还不至于让我们大肆褒扬,不至于让我们花如此大的篇幅分析学习。
我们看到了舞台上表演,舞女一手接过观众抛上来的参数,一手把参数抛给藏在背后的助手,接过助手抛回的衣服,迅速更衣换上。有时甚至还需要助手抛回活的鸽子、燃烧的火焰。
舞台上的这一切,都让人目炫神迷,赞叹不已。然而,你再一次买票来看的时候,却发现舞台上换人了。一样的动人,不一样的风情。如此许多次,你都不能记住他们每个人的名字。
你不禁要疑惑,幕布后面到底有多少神乎其技的美女?有什么样的一个养成系统在支撑这样层出不穷的表演?
舞女的前台是CDN加速的静态服务器(strip.taobaocdn.com),所有对舞女页面的访问都是通过这里进行的。
这里存放着诸多的舞女页面,大约5分钟会与舞女的后台进行同步,及时反映出新增和修改。
舞女的后台是CDN的源服务器,所有对页面的新增和修改,都是首先在这里进行,然后CDN会自动同步到舞女的前台。
样式、功能等各各不同的舞女页面都是通过系统自动化生成的,而不是人工制作的。这个自动化的系统可以称为舞蹈学院。
舞蹈学院的出现,意味着阿里系的架构师们很好的解决了下面的一系列问题:
这样一个庞大的自动化构建和拼装系统,没有一个可视化的管理系统是不可思议的。
广告点击分析前端系统的URL地址是https://cdn.tanx.com/t/tanxclick.js。
在加载的时候,可以带有参数。列表如下:
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
前端系统文件中,虽然只有区区几十行代码,但是承担了点击行为分析在浏览器客户端上的工作。
目测是在body上注册了点击事件。当用户点击的时候,进行一些统计行为。
进行点击重定向统计分析的URL地址是:https://rdstat.tanx.com/trd。
当用户在点击广告进行重定向跳转的时候,发出统计请求。参数如下:
Cookie参数
当客户端存有TANX域的Cookie时,广告调度请求携带Cookie参数。没有Cookie,则不必携带。
GET参数
提供点击重定向统计计数服务的URL地址是:https://redirect.simba.taobao.com/rd。当用户点击广告的时候,负责进行点击的统计计数,并根据参数跳转至最终的着陆页面(landingpage)。
点击跳转时的参数如下:
Cookie参数
GET参数
如果还没有cookie的rdc的参数,则写cookie如下:
TANX前端系统的模块入口点(tanxssp/main.js)脚本在完成了广告任务后,还负有为阿里系的产品识别用户的重要职责。
如果发现客户端还没有用户Cookie标识,则创建一个隐身的iframe,去加载阿里系的Cookie灯塔入口(https://cdn.tanx.com/t/acookie/acbeacon2.html)。
灯塔入口的响应是一个纯粹的HTML文件,负责创建一组img标签,请求TANX、淘宝和阿里妈妈的Cookie标识服务。
TANX系统的Cookie标识服务地址是:https://acookie.tanx.com/1.gif。
在请求时携带一组参数,列表如下:
GET参数
在请求的过程中,302跳转至统一的Cookie服务平台(阿里妈妈统计平台中转,https://hz.mmstat.com/a)。
跳转时携带一组参数,如下:
GET参数
阿里妈妈统计平台会写下如下的一组cookie标识:
在阿里妈妈统计平台在写下cookie标识后,携带一组参数,再302跳转回最初的TANX Cookie服务地址(https://acookie.tanx.com/1.gif)。
参数如下:
GET参数
TANX Cookie服务会写下如下的cookie标识:
淘宝系统的Cookie标识服务地址是:https://acookie.taobao.com/1.gif。
在请求时携带一组参数,列表如下:
GET参数
在请求的过程中,302跳转至统一的Cookie服务平台(阿里妈妈统计平台中转,https://hz.mmstat.com/a)。
跳转时携带一组参数,如下:
GET参数
Cookie参数
阿里妈妈统计平台会写下如下的cookie标识:
在阿里妈妈统计平台在写下cookie标识后,携带一组参数,再302跳转回最初的淘宝Cookie服务地址(https://acookie.taobao.com/1.gif)。
参数如下:
GET参数
淘宝Cookie服务会写下如下的cookie标识:
淘宝系统的Cookie标识服务地址是:https://acookie.alimama.com/1.gif。
在请求时携带一组参数,列表如下:
GET参数
在请求的过程中,302跳转至统一的Cookie服务平台(阿里妈妈统计平台中转,https://hz.mmstat.com/a)。
跳转时携带一组参数,如下:
GET参数
Cookie参数
阿里妈妈统计平台会写下如下的cookie标识:
在阿里妈妈统计平台在写下cookie标识后,携带一组参数,再302跳转回最初的阿里妈妈Cookie服务地址(https://acookie.alimama.com/1.gif)。
参数如下:
GET参数
阿里妈妈Cookie服务会写下如下的cookie标识:
img.alimama.cn存储系统中核心的静态的文件,比如通用图标、默认广告图片等。其他的产品图片,以及舞女页面的样式需要的图片资源等,分布在4台以上的服务器上。这些服务器都是使用了CDN加速的。
10个淘宝商品的图片等资源分布在4个域名的服务器下,使浏览器可以并行的同时加载图片,而不必加载完一张图片,再加载下一张。
以一张淘宝商品的图片地址(https://img01.taobaocdn.com/bao/uploaded/i1/1014142759/T2Njj8XbJXXXXXXXXX_!!1014142759.jpg_250x250.jpg)为例分析,大约知道以下设计意图: