合约广告系统-经常使用广告系统开源工具

 

 

经常使用广告系统开源工具

经常使用广告系统开源工具

       是否能够用开源工具快速地搭建广告系统?能够确定的说,基本是能够的。不少重要的模块,如上章所讲的architecture里的模块不少均可以借助开源工具实现。程序员

计算广告学-合约广告系统-经常使用广告系统开源工具 - quweiprotoss - Koala++s blog

 

       在实际的广告系统中咱们会用到不少的开源工具。下面我将分别讲述几个开源开具。基本上全部的大的广告系统公司都要使用Hadoop平台,除了google。Hadoop是广告平台中建模的基础,Hadoop有不少子项目,有的子项目与Hadoop有密切的联系,有的子项目仅是在Hadoop框架体系下深挖出来的一些Idea。简单介绍一下,Hadoop如今核心的项目只剩下来两个,HDFSMapReduce,之前Hadoop有不少子项目,中间两列之前都是Hadoop的子项目,但不少如今都已经独立出来,成为顶级项目了。Hadoop自己是一个大数据的存储和计算的平台。算法

图中的工具能够分为两类,一类是离线的数据处理,另外一类是在线的数据处理。离线的数据处理,经常使用的是HBase,它是基于Hadoop的列存储数据库,并非关系型数据库,是NoSql型数据库。和HBase功能类似的数据库有不少,好比google的BigTable,和HBase对应的HyperTableHyperTable是c语言写的工具,效率比HBase高一些,还有Facebook开源的Cassandra。它们都是解决大数据上半结构化存储的问题,在实际的系统中均可能会用到。sql

       oozie是把Hadoop上的流程控制工具,好比咱们天天的日志处理,要等日志收到后,进行各类分析,好比有的进行CTR预测,有的进行Audience Targeting,有的交由BI系统,它们这些分析之间可能有一些依赖关系。Hadoop提供了一个管理这些依赖的工具就是oozie,oozie能够认为是比较底层的,能够用API开发的一个framework,我我的感受是很很差用,也没看到有多少用人这个工具,但它在设计上比较完善。数据库

Hadoop上有两个很重要的脚本语言,PigHive。它们的做用有些类似,功能都是但愿将Hadoop上的非结构化的数据,能够用sql语言的方式来访问和加工。这样在拉一些简单的数据报表时,就不用写MapReduce程序去获得数据,只用写pig或hive的脚本。Pig和Hive的区别是:若是你的数据是用分隔符分好的数据,你就能够写Pig脚本直接访问了,因此用起来比较直接方便。而Hive须要预先加工,创建相似于Index的数据才能够操做。因此Pig更接近于程序员的习惯,Hive更适合作BI的习惯。服务器

Mahout是一个在Hadoop上用Map/Reduce作数据挖掘,机器学习的工具,我我的感受除了几个算法外,其它的算法并不太好用。但这也是机器学习算法的本质决定的,机器学习算法须要根据数据和实际状况作调整,加工,因此若是不了解内部实现,调整模型比较麻烦。数据结构

在线部分,最经常使用的是ZooKeeperZooKeeper是分布式环境下解决一致性问题的开源解决方案,它对应的是更有名的Google的ChubbyZooKeeper和Chubby的理论基础不彻底一致。Chubby是严格按照Paxos算法来实现的,Paxos是Lamport是提出的解决分布式环境下的一致性问题的一个完备的算法,而ZooKeeper是这个算法的简化版,它把Paxos简化成两段式提交后实现的一个版本,没法在理论上证实它是正确的,但实践中没有问题,这个是咱们在作在线服务中常常要用到的一个工具。框架

Avro知道的人可能并很少,由于并不经常使用它,经常使用的是Facebook的Thrift,它解决的是分布式环境里的跨语言通讯的问题,很是好用,而Avro仅是Hadoop的做者实现的一个代替产品,Google的ProtoBuffer也是相似的工具。机器学习

S4类比于更经常使用的Twitter的Storm,是咱们上章Architecture里的流式计算平台,进行日志快速处理反馈的一个计算平台。S4是最先Yahoo!用于搜索广告系统分析目的而开发的,Storm是为了知足Twitter上一些快速的计算任务,好比快速计算Fans数,Repost数。两种有必定不一样,S4主要优化的是吞吐量,它彻底不用磁盘,而Storm还要用到少许的磁盘操做,由于它要保证数据的一致性,保证每一条数据至少被处理一次,但它不保证仅被处理一次。分布式

Chuhwa对应的是Facebook的Scribe,它是上章Architecture里提到的Data Highway,它是分布式的日志收集工具,一个广告系统有不少的广告投放引擎,这些投放引擎,Data Highway准实时地把多个服务器的日志准实时地都收集到一块儿,准实时地投到Hadoop或是Storm上,如今还有一个经常使用的是Flume。工具

Elephant-Bird是一个有意思的小工具,它是配合Pig使用的,若是咱们的系统中大量使用Thrift或是ProtoBuffer,它的结构都是序列化的,二进制的,你用Pig没法直接访问,Twitter为了解决这个问题提供了Elephant-Bird工具,使用Elephant-Bird后,Pig就能够直接访问序列化的数据了。

图中有阴影的表示是我我的感受好用的工具,但仅表明我我的观点。在这里我也想介绍一点我我的对开源社区的一些见解,如今开源社区已经和若干年前已经彻底不一样,如今再也不是一个质量不能保证,内容比较芜杂的环境了。缘由是有不少大公司在竭尽全力地在支持开源项目,比较典型的是Twitter,Yahoo!,Facebook。咱们认为开源工具可选的缘由是这些工具是在Twitter,Facebook这种数据量上进行验证的,而其它公司很难有真实的环境去测试这种大规模数据的,好比Facebook在测试Scribe的时候,数据达到过每秒10T,因此开源工具的质量和可靠性很是高。

跨语言服务搭建工具

       在搭建一个广告系统的时候,遇到的第一个问题可能就是多模块的语言不统一,Facebook在这方面是比较开放的,它提供了一个工具Thrift,它容许工程师各自喜欢或是习惯的语言去开发,Thift就是一个跨语言服务快速搭建的工具。它的使用方法很是简单,第一步是用struct定义语言无关的通讯数据结构,用IDL语言描述,好比下面的KV,它有两个字段一个是32位int类型的key,一个是string类型的value。Thrift会将IDL语言的定义转为你所须要的语言(好比c语言)的定义。

struct KV

{

1:optional i32 key=10;

2:optional string value=“x”

}

搭建服务也是在IDL文件里写,好比KVCache是存KV pair的一个服务,它有几个接口,set,get和delete,这些定义都是语言无关的,你根据定义实现本身的逻辑。

service KVCache

{

void set(1:i32 key, 2:string value);

    string get(1:32 key); void delete(1:i32 key);

}

若是不是进行特殊的协议层优化,Thrift就能够知足需求了。而且它能实现结构和接口的向后兼容(backward compatible),类型的工具备Hadoop的Avro和google的ProtoBuffer。

相关文章
相关标签/搜索