一个网站的广告服务器(Ads Server)模块部分从业务模式上看,广告服务器需要最少支持两个计费模式:按时及按点击次数计费。
对于按发布时间计费,发布事件是很容易获得的,难的是终止发布时间,假如没有一个计时器的话。对于大量应用运行的服务器,鉴于资源消耗量的考虑,使用多线程的计时器要慎重,毫无疑问,分散到模块级自行决定计时器是低效而且危险的。如果是单一模块中使用完整的计时器,也会令这个模块的开发显得过大,边缘性的功能占据了主要的开发工作;如果共用一个计时框架,那么就需要对已有的计时功能进行整体规则,令其使用新的计时框架,这实际上是一个升级。
即使是对于点击次数的计费方式,发布时间计费仍是必须的,这与Googgle的广告不一样;后者没有一个固定的页面,也没有固定的格式。而前者,却有固定的地方,如果单纯采用点击计费,那么谁都希望放到首页首栏,因为不点击是不收钱的。
二、广告栏目和广告条目;
把广告位置(栏目)看作是一个广告框,那么发布到这个框的广告条目应该看作是广告主的所有物,他是租用网站的广告和相应的计费服务,发布自已的广告,然后向网站支付广告费用。每一个广告条目包括有广告内容(发布代码);而每一个广告栏目(位置)包括有价格信息和滚动设定,也即轮换广告的设定,以及默认空白内容。广告条目与广告位是一个多对多的关系,通过一个广告条目订单的实体实现联系。
广告条目定单是这样的意思:每一个广告条目可以发布到不同的广告位(定单),以用将发面布多长的时间,多个订单按先后顺序排队。这就意味着需要有一个双向的广告定单管理模块存在。
广告的发布实现是通过标签完成。该标签应用时需要包括如下属性:广告位ID,广告条目ID。广告位的ID把广告标签与广告位置绑定,获得广告的价格和更替内容,以及发布时间;通过广告条目ID获得所要发布的的广告内容。
三、网站管理者制定广告栏目
广告栏目主要与费用相关,但不包含位置信息,这时侯与在那一个页面没有关系(那是由标签使用决定),一般情况下与费用相关。位置信息只是它的一个提示属性。这样,广告位就可以不确定伴置地出现在“某类”伴置,同一个广告栏目可以出现在不同的版面;而同一个版也可以出现多个广告位置。所以,广告栏目本质上也等同于是版面广告伴的集合。这样的原因是由于无论如何定义广告位置,最终都需要通过页面的jsp代码反应,既然jsp标签本身与位置绑定,就不必在抽象层对它进行细化管理了。这样,可以省下管理员大量的工作。
四、广告客户制定广告条目,并挂靠发布到具体单位、科室的各个广告栏;
广告客户对广告条目的管理应用黄页逻辑。自行管理其中的广告内容,然后发布到某几个广告栏。不同的广告栏有不同的(较低的)基础发布费用,然后每次点击就增加一次点击收费。每个广告的表达方式大致包括显示效果-》点击链接-计数-转向目标界面;显示效果上是由广告客户自已管理还是由网站管理,还是有点未定论的,大概最合适的方式是使用模板;iframe可以令效果代码的错误不至于影响到发布版面的布局,同时目标代码的下载不会影响主版面的显示。总的来说,是尽可能减小网站本身的管理要求,越是能够达到这个目的,实际运行效果就越佳。
五、广告栏目对广告定单的处理;
广告条目定单中带有发布时间的长短设定,发布事件可以轻易得到,这样就可以在广告栏目中得到一个该广告定单有限期的起始和终止时间。广告标签对服务器时间的对照,确定该广告条目是否在有效期内,如果不是在有效期内,就把广告条目清除,读出下一条排队的定单;如果没有排队定单,就拿出默认的栏目内容,并且把广告栏目置为空闲。这样就不需要一个计时器了。
六、轮换广告的实现
同一个广告伴置按随机性出现不同的内容,即出现不同的广告订单,只有对需求强烈的广告位置,既希望客户能够签署较长期的定单,又不希望低价独占最大潜在收益的广告位置时,才真正适用。轮换可以看作是广告栏目本身带有一个随机转换的方法。使用随机数而不是时间段分割是肯定的,这样算法较之使用时间段的分割显得更高效也更简单。
无论是使用一个带机率分享方法的轮换广告伴置,还是几个广告预设栏随机分享一个广告位置,两种抽象模型看来效果差不多。前者是在广告栏目的属性上设定,后者是在调用标签上可以使用多个栏目。相对而言,从维持广告栏目一致性考虑,我倾向使用后一种逻辑。即在同一个栏目随机分享的广告栏目看作是不同的栏目,分别设定它的价钱,通过在调用标签上进行均分调用。
七、广告模块需要的开发工作总结:
- 最少三个数据实体:广告栏目、广告栏目定单、广告条目及其常规管理操作界面;
- 一个计数转向的cgi程序;
- 广告条目发布的jsp标签;
- 对广告栏目的发布使用情况的统计界面;
- 对广告栏目定单的跟踪界面;
- 对广告条目发布后的统计界面;