背景
项目地址: https://github.com/rtbkit/rtbkit/wiki/What-is-RTBkit%3F
RTBkit是一个开源软件包,通过将问题分解为明确定义的组件,可以完成创建实时广告投放的大部分困难的工程工作。其开放的、面向服务的架构可用于满足简单或者复杂的投放需求。RTBkit可以通过自定义配置文件或者开发接口的形式进行策略制定和扩展。
RTBkit架构
部署准备
操作系统:ubuntu:14.04.1
安装RTBkit:
apt-get -y update |
构建基于docker的服务
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 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
Banker模块的JSON API说明
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/
从父账号转换预算给子账号以平衡请求数量
参数为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/
通过请求为用户设置预算金额,只允许为顶级账户设置。
POST内容为 “{ “USD/1M”: 金额 }” ,表示加入XX美元。
用法:curl http://localhost:9985/v1/accounts/hello/budget -d ‘{ “USD/1M”: 123456789 }’
GET /v1/accounts/
返回指定账户的子账号列表。参数为depth
表示返回深度,默认为不限。(效果未知)
POST,PUT /v1/accounts/
更新响应的支付账号的spend和commitment
body:
The body for that command must contain a representation of the shadow
account in JSON.
GET /v1/accounts/
返回指定账号和其子账号的属性表示。参数为depth
表示返回深度,默认为不限。
GET /v1/accounts/
关闭一个账号和其所有子账号。
GET /v1/accounts/
账号的汇总信息
GET /v1/summary
所有账号的汇总信息