项目地址: https://github.com/rtbkit/rtbkit/wiki/What-is-RTBkit%3F
RTBkit是一个开源软件包,通过将问题分解为明确定义的组件,可以完成创建实时广告投放的大部分困难的工程工作。其开放的、面向服务的架构可用于满足简单或者复杂的投放需求。RTBkit可以通过自定义配置文件或者开发接口的形式进行策略制定和扩展。
操作系统:ubuntu:14.04.1
安装RTBkit:
apt-get -y update
apt-get install -y linux-tools-generic libbz2-dev python-dev scons unzip\
libtool liblzma-dev libblas-dev make automake \
ccache ant openjdk-7-jdk libcppunit-dev doxygen \
libcrypto++-dev libACE-dev gfortran liblapack-dev \
libevent-dev libssh2-1-dev libicu-dev libv8-dev \
g++ google-perftools libgoogle-perftools-dev \
zlib1g-dev git pkg-config valgrind autoconf \
libcurl4-openssl-dev cmake libsigc++-2.0-dev
mkdir -p $HOME/local/bin
PATH="$HOME/local/bin:$PATH"
mkdir -p $HOME/local/lib
export LD_LIBRARY_PATH="$HOME/local/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$HOME/local/lib/pkgconfig/:$HOME/local/lib/pkg-config/"
source ~/.profile
env | grep PATH
git clone https://github.com/rtbkit/rtbkit-deps.git
cd rtbkit-deps
sed -i 's/git@github.com:/https:\/\/github.com\//g' .gitmodules
git submodule update --init
make all NODEJS_ENABLED=0
export PATH=/root/local/bin:$PATH
cd /
git clone https://github.com/rtbkit/rtbkit.git
cd rtbkit
cp jml-build/sample.local.mk local.mk
make compile NODEJS_ENABLED=0
export LD_LIBRARY_PATH='/root/local/share;/root/local/lib'
zookeeper集群服务
使用 docker-compose 来启动 ZK 集群,创建一个名为 docker-compose.yml 的文件:
version: '3'
services:
zook1:
image: zookeeper
restart: always
container_name: zk1
networks:
- rtbkit-network
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
zook2:
image: zookeeper
restart: always
container_name: zk2
networks:
- rtbkit-network
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
zook3:
image: zookeeper
restart: always
container_name: zk3
networks:
- rtbkit-network
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
redis:
image: daocloud.io/library/redis:3.2.9
restart: always
container_name: redis02
networks:
- rtbkit-network
ports:
- "16379:6379"
volumes:
- "/home/dataspark/rtbcode/rtbkit/rtbkit/sample.redis.conf:/usr/local/etc/redis/redis.conf"
Graphite:
image: graphiteapp/graphite-statsd
restart: always
container_name: graphite_test
networks:
- rtbkit-network
ports:
- "6080:80"
- "8003-8004:2003-2004"
- "8023-8024:2023-2024"
- "14125:8125/udp"
- "14126:8126"
networks:
rtbkit-network:
driver: bridge
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 ZK 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一. ZOO_SERVERS 是ZK 集群的主机列表.server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
运行docker compose: COMPOSE_PROJECT_NAME=rtbkit_cluster docker-compose -f rtbkit-compose.yml up -d
docker compose 会创建一个新的网桥rtbkit_cluster_default
修改sample.bootstrap.json
文件中的zookeeper端口配置
"zookeeper-user":"localhost:2181"
改为
"zookeeper-user":"zk1:2181,zk2:2181,zk3:2181",
Graphite
docker run -d \ –name graphite \ –restart=always \ -p 5080:80 \ -p 7003-7004:2003-2004 \ -p 7023-7024:2023-2024 \ -p 13125:8125/udp \ -p 13126:8126 \ graphiteapp/graphite-statsd
修改sample.bootstrap.json
文件中的carbon端口配置
"carbon-uri": ["carbon1.kittens.org:2003", "carbonA.kittens.org:2003"]
改为
"carbon-uri": ["graphite:2003"]
redis服务
docker run -p 6379:6379 -v /home/dataspark/rtbcode/rtbkit/rtbkit/sample.redis.conf:/usr/local/etc/redis/redis.conf –name redis01 -d daocloud.io/library/redis:3.2.9 redis-server /usr/local/etc/redis/redis.conf
修改rtbkit/sample.launch.json
里面的’banker’
将其参数”-B”, “rtbkit/sample.bootstrap.json”, “-r”, “localhost:6379”
改为 “redis02:6379”
启动主服务rtbkit
docker run -it –name rtbkit01 –link graphite:graphite –link redis01:redis -p 5212:22 rtbkit bash
./build/x86_64/bin/launcher –node localhost –script ./launch.sh –bin ./build/x86_64/bin –launch rtbkit/sample.launch.json
GET /
类似于help命令,用法:curl http://localhost:9985/
GET /ping
检查Banker服务是否对HTTP有效,有效返回“pong”
GET /v1/accounts
获取用户账号信息,如果没有参数默认返回全部,后面参数可以跟maxDepth
和accountPrefix
。
maxDepth:
an integer describing the maximum length at which keys will be
sought (default: unlimited)
accountPrefix:
a string that specifies the prefix against which the returned account
names will be matched
POST /v1/accounts
POST为创建用户。后面参数跟accountType
和accountName
。
GET /v1/accounts/
返回指定用户的信息
POST,PUT /v1/accounts//balance
从父账号转换预算给子账号以平衡请求数量
参数为accountType
,POST内容为”{ “USD/1M”: 金额 }”
body:
The body for that command must contain an amount encoded in a JSON Object.
For example::
“{ “USD/1M”: 123456 }” (123456 micro USD)
parameters: accountType: If the account does not exist, this parameter defines the type of account to be created (“spend” or “budget”)
POST,PUT /v1/accounts//budget
通过请求为用户设置预算金额,只允许为顶级账户设置。 POST内容为 “{ “USD/1M”: 金额 }” ,表示加入XX美元。 用法:curl http://localhost:9985/v1/accounts/hello/budget -d ‘{ “USD/1M”: 123456789 }’
GET /v1/accounts//children
返回指定账户的子账号列表。参数为depth
表示返回深度,默认为不限。(效果未知)
POST,PUT /v1/accounts//shadow
更新响应的支付账号的spend和commitment body: The body for that command must contain a representation of the shadow account in JSON.
GET /v1/accounts//subtree
返回指定账号和其子账号的属性表示。参数为depth
表示返回深度,默认为不限。
GET /v1/accounts//close
关闭一个账号和其所有子账号。
GET /v1/accounts//summary
账号的汇总信息
GET /v1/summary
所有账号的汇总信息