23
SOHU 精精精精精精精@DJ_ 精精

SOHU 精准广告投放系统

  • Upload
    micheal

  • View
    189

  • Download
    0

Embed Size (px)

DESCRIPTION

SOHU 精准广告投放系统. @DJ_ 戴军. 系统逻辑结构. Adserver. Adserver. 标签库. CTIndex. NetWork. 广告请求参数接收 & 获取. 获得 UA 与 PA. ADIndex. 根据请求参数从相应广告来源获得广告. AdExchange. CTR 模块. Ranking. Layout. AdServer 实现. 开发环境: Linux 开发语言: C++ 服务架构: nginx + fastcgi 模块间通信: thrift 本地缓存: redis 日志记录: log4cxx - PowerPoint PPT Presentation

Citation preview

Page 1: SOHU 精准广告投放系统

SOHU 精准广告投放系统@DJ_ 戴军

Page 2: SOHU 精准广告投放系统

系统逻辑结构

AdServer

MonitorServer

CookieMappingServer

Page 3: SOHU 精准广告投放系统

系统逻辑结构

Page 4: SOHU 精准广告投放系统
Page 5: SOHU 精准广告投放系统

ADSERVER

Page 6: SOHU 精准广告投放系统

Adserver

广告请求参数接收 & 获取

获得 UA 与 PA

根据请求参数从相应广告来源获得广告

ADIndex

标签库CTIndex

CTR 模块

NetWork

Ranking

Layout

AdExchange

Page 7: SOHU 精准广告投放系统

AdServer 实现开发环境: Linux开发语言: C++服务架构: nginx + fastcgi 模块间通信: thrift本地缓存: redis日志记录: log4cxx服务运行方式:多进程多线程

Page 8: SOHU 精准广告投放系统

AdServer 前端 http 请求接收 AdServer 的 http 请求接收层采用 nginx 搭建, nginx 接收到 http 请求后会将请求转发给后端的 fastcgi 服务。通过 GET 方式接收的参数:广告位 ID广告位尺寸轮播数通过 http 请求头接收的参数:用户 IP

UserAgent通过查表获得的参数:用户当前所在地域 ID( 可通过 nginx 配置实现 )注意: nginx 安装时要 --with-http_realip_module

Page 9: SOHU 精准广告投放系统

AdServer 核心 AdServer 核心部分为使用 C++ 开发的多线程 fastcgi 进程。 FastCGI 像是一个常驻 (long-live) 型的 CGI ,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 ( 这是 CGI 最为人诟病的 fork-and-execute 模式 ) 。它还支持分布式的运算 , 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

Use

r

fastcgi

Ngi

nx

fastcgi

fastcgi

fastcgi

Page 10: SOHU 精准广告投放系统

AdServer 核心AdServer 的 fastcgi 进程利用 C++ 开发,采用固定线程数的多线程模型。

全局连接池 (index & ctr module)

线程 0接收 http 请求Popconn查询 indexPushconnPopconn查询 CTRPushconn排序输出

线程 1接收 http 请求Popconn查询 indexPushconnPopconn查询 CTRPushconn排序输出

线程 n接收 http 请求Popconn查询 indexPushconnPopconn查询 CTRPushconn排序输出

辅助线程Popconn ,关闭损坏连接,创建新的连接,Pushconn

待维修连接池

Page 11: SOHU 精准广告投放系统

AdServer 与其他模块间通信AdServer 与 AdIndex 、 CTR 模块间通信采用 thrift 。 thrift 是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thrift 最初由 facebook 开发, 07 年四月开放源码, 08 年 5 月进入apache 孵化器。 thrift 允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。

Page 12: SOHU 精准广告投放系统

struct query_info {1: optional string adid,2: optional string score,3: optional i64 bid,

}

struct ret_info {1: optional string adid,2: optional double ecpm,3: optional string bucket,4: optional double ctr

}

struct CtrQuery {1: optional list<query_info> item,2: optional string adpid,3: optional string turn

}

struct CtrRet {1: optional map<string,ret_info>

eCPM_map,2: optional string adpid

}struct CtrQuery_list {

1: optional list<CtrQuery> query_list,2: optional string regionid,3: optional string browser,4: optional string os,

}struct CtrRet_list {

1: optional list<CtrRet> ret_list,2: optional string extdata

}

service CtrServ {CtrRet_list request(1: CtrQuery_list

req_info)}

Page 13: SOHU 精准广告投放系统

thrift --gen cpp ctrserver.thrift

Thrift 服务端代码Thrift 官方网站:http://thrift.apache.org/

Page 14: SOHU 精准广告投放系统

本地缓存 本地缓存采用 reids ,主要用于广告频次控制以及同一用户同一页面不同广告位之间广告去重逻辑的实现。频次控制:

1 、 monitor server 记录用户看过的广告2 、 AdServer 投放时读取用户当天看过的广告记录,去除达到频次控制 数的广告

去重控制:1 、 AdServer 以 MD5( 用户 ID+URL) 为 Key ,记录 5 秒内 Key 上投放的广告2 、 AdServer 以 MD5( 用户 ID+URL) 为 Key ,查询 5 秒内 Key 上记录的广告, 去除重复的广告

注意:本次作业不需要实现该功能

Page 15: SOHU 精准广告投放系统

日志记录日志记录采用 log4cxx 库结合 logrotate 实现 .需要注意的问题:1 、多进程写同一个日志文件2 、 为什么用 logrotate 进行日志文件切割,而不用 log4cxx 进行日志切割 ?

注意:本次作业可选择实现该功能,若不实现该功能则运行方式改为单进程多线程

Page 16: SOHU 精准广告投放系统

MONITORSERVER

Page 17: SOHU 精准广告投放系统

统计服务器工作流程用户浏览器

统计服务器广告投放数据库

监测请求

监测日志

Storm

Page 18: SOHU 精准广告投放系统

COOKIE MAPPING SERVER

Page 19: SOHU 精准广告投放系统

Cookie Mapping Server工作方式

SOHU 为 cookie mapping 发起方 对方为 cookie

mapping 发起方

Page 20: SOHU 精准广告投放系统

SOHU 为 cookie mapping 发起方Sohu.com 页面 第三方广告公司或广告主

Server(thirdparty.com)

Sohu Cookie Mapping Server(sohu.com)

Sohu 用户 ID

对方用户ID与用户

标签

记录日志 (Sohu 用户 ID,对方用户 ID,对方用户标签 )

标签转换

Page 21: SOHU 精准广告投放系统

对方为 cookie mapping 发起方对方投放广告页面

(thirdparty.com)

Sohu Cookie Mapping Server

(sohu.com)

第三方广告公司或广告主Cookie mapping Server

(thirdparty.com)

对方用户 ID 与标签302跳转,sohu用户

ID

记录日志 (Sohu 用户 ID,对方用户 ID,对方用户标签 )

标签转换

Page 22: SOHU 精准广告投放系统

Q&A

Page 23: SOHU 精准广告投放系统

谢谢