Commit 351fa6e1 authored by frank.chen's avatar frank.chen

增加

parent e191a957
## 流程 ## api_v0 流程
- api_v0 请求,dsp配置转发。 - 按 openRtb 标准,解析请求数据。
- 协议转换,生成返回。 - 处理部分Ext数据,并适当调整。
- 按imp对返回进行归类。 - 读取配置,实例化dsp对象。
- 开启协程,协议转换,生成返回。
- 按 imp 类型,对所有返回进行归类。
- 一个imp下,多家dsp的返回做排序,按 ecpm ratio price 的顺序,做高低排序。 - 一个imp下,多家dsp的返回做排序,按 ecpm ratio price 的顺序,做高低排序。
- 同imp下,选取广告: - 同imp下,选取广告:
- 相同包去重 - 相同包去重
- 价格加1分 - 价格为二价加1分
- 计算dealPrice - 计算dealPrice,payPrice
- 不同dsp做计算加密价格串 - 不同 dsp 计算加密价格串
- winNotice存入redis - winNotice存入redis
- 注意广告位要求的最大广告数 - 注意广告位设置的最大广告数,匹配满后,停止该imp的匹配。
- 修改返回串 - 修改返回串
- 创建adsource - 创建adsource
- 附加我们的track:展示、点击、视频事件、开始下载、下载完成、开始安装、安装完成。 - 附加我们的track:展示、点击、视频事件、开始下载、下载完成、开始安装、安装完成。
- 宏替换:不同dsp有不同的宏 - 宏替换:不同dsp有不同的宏
- DSP 做收尾工作。
- 不同dsp可能有不同的任务,比如 穿山甲,需要把展示、点击、等等广告通知,缓存起来。穿山甲还需要对竞价失败的广告,发送通知。
- 生成我们的返回结构 - 生成我们的返回结构
- 缓存设备ID - 缓存设备ID
- 记录匹配日志 - 记录匹配日志
## 系统环境
centos 7
## 库
### librdkafka
其他主机上找即可,一般在~/app 文件夹。
### lzma
yum install xz-devel
### stdc++
yum install glibc-static libstdc++-static
\ No newline at end of file
## 概述
因 libc.a 库版本升级导致不兼容,adx-core 无法正常编译。
## 研究 ssp-core
* 手动编译其依赖的静态库。
## 安装pip
* github上下载 20.2.4 版本。
* root 下配置 ~/.pip/pip.conf 设置清华源
```
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
```
## 安装 Fabric
- pip 安装
## 基础服务程序部署
* adx-web adx-core adx-notify 的 systemctl 脚本改变,几个程序的启动命令,参数有 prd 改为 stg。
* appstore-thrift ssp-web ssp-core 这几个是 adx-1 的镜像没有的,需要加上。
## 定时任务
## 辅助程序
- 一些 gocode
\ No newline at end of file
## 新的adx-test
* 创建 adx-user 的用户和组
* 使用root创建/data,并改变用户和组为adx-user。然后用adx-user细化 /data 里的文件夹。
* yum install git
* yum install gcc gcc-c++
* yum install autoconf automake libtool
* yum install openssl-devel
* 下载cmake,源码安装
* git 下 clone 源码。
## 家里做的
## 继续
* adx-user 添加 sudo
* 需要升级sudo,依赖新版 autoconf
* 启动 Thriftc
* 执行源码里的script/dist.sh
* 从其他机器拷贝文件,/data/appstore/cached/Ipp2.txt
* 建文件夹 /data/log/appstore-thrift
\ No newline at end of file
## 概述
- 2023-09-01 14:00 出现 adx-prd4 cpu 占用突然升高
- 新买一台 adx-web,另外,前些天,adx-core 已合并入 adx-web
- 配置为 8核16G
- 注意:改主机名,会导致主机重启
## 操作
- root 登陆,编辑 .bashrc
- groupadd adx-user && useradd -g adx-user adx-user
- 从 adx-1 拷贝 /etc/hosts 部分内容
### 安装常用
- yum install git
### golang
- wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz
- /etc/profile 末尾添加
```
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPROXY=https://goproxy.cn,direct
```
- root 下,编辑 ~/.bash_profile,增加内容
```
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
```
### 配置ssh免密码登陆
- 为用户adx-user设置,则进入用户 adx-user
- mkdir ~/.ssh && chmod 700 ~/.ssh
- cd .ssh ,新建 authorized_keys,添加登陆机器的id_rsa.pub,
- 一般从 adx-1 的 adx-user 同文件,拷贝内容过来
- chmod 600 authorized_keys
### 业务
* 进入服务文件夹 cd /usr/lib/systemd/system/
* 参照stg服务器上,添加新的服务文件。
* root 下 mkdir /data && chown adx-user /data && chgrp adx-user /data
* adx-user 下 mkdir -p /data/adx/release
* adx-stg 上,添加 /etc/hosts 内容
* adx-stg 上,adx-web 代码中的 deploy,添加新加主机
### adx-user
- .bash_profile 末尾添加
```
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
```
- .bashrc 添加内容
- golint
* git clone https://github.com/golang/lint.git
* cd lint/golint/ && go install
## cron 内容
```
::::::::::::::
/var/spool/cron/adx-user
::::::::::::::
0 12 * * * cd /data/adx/release/shell/Monitor && python logcleaner.py > /dev/null 2>&1
::::::::::::::
/var/spool/cron/root
::::::::::::::
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
::::::::::::::
/etc/cron.d/0hourly
::::::::::::::
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
::::::::::::::
/etc/cron.d/raid-check
::::::::::::::
# Run system wide raid-check once a week on Sunday at 1am by default
0 1 * * Sun root /usr/sbin/raid-check
::::::::::::::
/etc/cron.d/sysstat
::::::::::::::
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
```
\ No newline at end of file
## 概述
adx-log 和 adx-trace 需要新服务器,选用了较新的centos系统。
## 环境搭建
* yum install git
* /etc/hosts 增加 192.168.16.51 git.DT-DTG5.com
* groupadd adx-user && useradd -g adx-user adx-user
* root 用户 创建 /data 并 chgrp chown 改变所属组和用户。
* mkdir /data && chown adx-user /data && chgrp adx-user /data
* 安装 golang,配置环境
* 打开 https://golang.google.cn/dl/ 复制go的 linux tar.gz 下载链接,比如:https://golang.google.cn/dl/go1.20.2.linux-amd64.tar.gz
* 下载压缩包,解压,将解出来的go文件夹,移到 /use/local/ 路径下。
* 编辑 /etc/profile,增加内容:
PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
* 编辑 ~/.bash_profile,增加内容:
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
* 安装 golint
* git clone https://github.com/golang/lint.git
* cd lint/golint/ && go install
* adx-user 添加到 sudo 信任列表。
* chmod u+w /etc/sudoers
* vim /etc/sudoers
* 在 root 配置那一行的下面(约文件末尾),添加一行
* adx-user ALL=(ALL) NOPASSWD: ALL
* 改完,重新设置权限,chmod u-w /etc/sudoers
* 配置ssh免密码登陆
* mkdir ~/.ssh && chmod 700 ~/.ssh
* cd .ssh ,新建 authorized_keys,添加登陆机器的id_rsa.pub
* chmod 600 authorized_keys
## 业务
* 进入服务文件夹 cd /usr/lib/systemd/system/
* 参照stg服务器上,添加新的服务文件。
* root 下 mkdir /data && chown adx-user /data && chgrp adx-user /data
* adx-user 下 mkdir -p /data/adx/release
## 基本思路
- 利用已有adx镜像来新开云主机。
- 注意 adx-1 与其他机器可能不一样。
## 步骤
* 百度云上,购买新机器,注意cpu和内存。硬盘使用adx-1的镜像。
* 观察业务程序:
* adx-web
* adx-core
* adx-notify
* shell/Monitor
* 用adx-stg执行各个模块的 fab deploy
## 购买机器
* 8核 32G
* 高性能云磁盘 80G
* 公网EIP 1m
* root 密码
* 机器名 adx-prdx adx-x (注意x代表数字编号)
## adx-stg 配置变动
* 要更新/etc/hosts
* 部署的fabfile.py里,更新配置。
## 删除老数据
* 各个模块的logs
* /home/adx-user /root 里的旧数据
## systemctl
* /usr/lib/systemd/system/
- appstore-thrift.service
- ssp-core.service
- ssp-web.service
## 监控
* 定时任务
- `/var/spool/cron/root`
```
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
0 */1 * * * cd /data/appstore/appstore-thrift/monitor && python main.py > /dev/null 2>&1
0 18 * * 1 sh /data/appstore/shell/rm_backup.sh
0 6 * * * sh /data/appstore/shell/rmlog.sh
```
- `/var/spool/cron/adx-user`
```
0 12 * * * cd /data/adx/release/shell/Monitor && python logcleaner.py > /dev/null 2>&1
*/1 * * * * cd /data/adx/release/shell && sh observer.sh
```
## 概述
* 服务器地址 192.168.0.47 180.76.188.27
* 有多个程序在这台服务器上运行:数据拉取落盘,数据修正
## 数据拉取
* http://git.DT-DTG5.com/t1/tools.git
* 用户app安装与卸载,拉取 redis 数据,然后写到本地文件。
* 数据由ssp nginx 上的php脚本接收并放入redis。
### 程序说明
* 程序原来在 /data/appstore-api/sync_appstore_userdata,后来代码整理到git,程序改到 /data/appstore-api/tools/installer_sync
* 程序编译的可执行文件为 sync
* 程序以crontab方式被执行,启动脚本在/etc/cron.d/sync-userdata
* crontab 每分钟调用一次 sh 脚本 /data/appstore-api/shell/sync_appstore_userdata.sh
* sync_appstore_userdata.sh 会隔几秒启动一次 sync
* 做的比较绕,不直观。
## 数据修正
* http://git.DT-DTG5.com/frank.chen/update_oaid.git
* 程序名 update_oaid
* 源码位置 /root/frank/update_oaid
* redis集群的用户信息,以前接收的oaid,是个base64值,后来变为原始值。所以中间有部分数据冲突。某些数据为base64值,某些为原始oaid。
* update_oaid 用于刷新数据。
\ No newline at end of file
## /var/spool/cron/adx-user
```
*/1 * * * * cd /data/adx/release/adx-server/bin && ./actionReport > /dev/null 2>&1
0 * * * * cd /data/adx/shell/AdxMonitor && python checker.py > /dev/null 2>&1
* */1 * * * cd /data/adx/shell/AdxMonitor && python logcleaner.py > /dev/null 2>&1
```
- actionReport 现有可执行程序,代码在adx-server,由侯莹重构,未上线。
- AdxMonitor checker.py 日志大小监控
- AdxMonitor logcleaner.py 保证只存放 2 天的广告日志文件,因 adx_log_monitor_new.sh 会做备份 bos,所以这里的 logcleaner 实际上用处不大。
## /var/spool/cron/root
```
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
#将adxlog 备份至bos,并删除本地文件
25 */1 * * * sh /data/shell/adx_log_monitor_new.sh > /data/shell/adx_log_monitor_new.sh.log
```
- adx_log_monitor_new.sh 将adxlog 备份至bos,并删除本地文件
## 概述
* 以前是2台机器,用于代理请求dmp预测。
* 后来增加2台,用于代理请求dsp。
* 配置上,4台机器,功能是全的,各服务器请求时,可以配置使用任意代理服务器。一般dmp请求使用旧的2台,dsp使用新加2台。
## proxy-1
* 相比其他,这台机器还会统计头条dmp的预测超时率,并发送邮件。
* crontab
` 0 8 * * * cd /var/log/nginx/analyze && nohup python main.py &`
* python 代码托管在git上,http://git.DT-DTG5.com/ops/proxy_status.git
* 另外,还有一个服务,dsp-notify,用于转发dsp的win和loss通知。
* adx服务器在请求了dsp广告,并做了广告筛选,需要通知dsp: 选中和未选中结果回执(也就是win和loss通知)。
## proxy-3,4
* 因dsp请求量大,日志太大,所以日志分割策略不一样。
## 通用
* 配置 nginx /etc/nginx/conf/default.conf
* crontab
* /etc/cron.daily/logrotate
* 注意 /etc/logrotate.d/nginx 有调整。
\ No newline at end of file
## 概述
- 优先列出与自己模块关系紧密的任务
```
Minute Hour Day Month Week command
分钟 小时 天 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
```
## 1. /etc/cron.daily
- logrotate 做日志压缩
- 由 ssp-cron.git 的 deploy 代码做部署
## 2. /var/spool/cron/
### root
```
0 */3 * * * sync && echo 3 > /proc/sys/vm/drop_caches
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 6 * * * sh /data/appstore/shell/rmlog.sh
20 6 * * * sh /data/appstore/shell/rm-bmrlog.sh
*/5 * * * * cd /data/appstore/IntimeStat/ && python main.py > /data/log/IntimeStat.log 2>&1
*/5 * * * * cd /data/appstore/IntimeStat/ && python ctr-keywords.py > /data/log/ctrKeywords.log 2>&1
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
#每隔1分钟监控一次scan transfer 并发送告警邮件
*/1 * * * * sh /data/appstore/shell/monitor_scan_transfer.sh
00 10 * * * /usr/sbin/ntpdate -u cn.pool.ntp.org > /dev/null 2>&1; /sbin/hwclock -w
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
* 说明
- drop_caches nginx-1 为3小时一次,其他机器为6小时。清理系统缓存
- IntimeSynch-job.sh 文件找不到
- rmlog.sh stg 中无此文件,删除过期的备份avro日志。
- rm-bmrlog.sh 删除过期的备份 xxxbmr 文件。
- IntimeStat nginx-1 才有。
- main.py 整理 INTIME_STAT_ALL,即 实时 ctr。
- ctr-keywords.py 整理 ssp redis 里的 ssp:ctr:keywords
- 两个脚本,会在 /data/log/ 中留执行日志。
- scan-transfer-transferbmr-defend.sh 调起某个 jar,可能日志相关。
- monitor_scan_transfer.sh 看注释为监控上面的 transferbmr。stg 无。
- restart.sh 每月1,15两天零点,重启 nginx。nginx-1 关闭该项。
## 3. /etc/cron.d/
### appstore-thrift
`1 8 * * * root python /data/appstore/shell/appstore-thrift/clean_log.py`
- stg 无。
- 删除 appstore-thrift 太老的日志文件。
- 代码有问题,日志路径不对。
### check_folder_size
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_folder_size.py`
- 文件和文件夹大小检查
### check_process_alive
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_process_alive.py`
- 关键进程检查
### monitor
- 代码放入git,http://git.DT-DTG5.com/ops/ssp-cron.git
```
*/5 * * * * root cd /data/appstore/shell/monitor/ && python UserdataServiceMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python AppStoreLogMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python ProcessAliveMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DataMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DiskMonitor.py > /var/log/monitor.log 2>&1
#1 17 * * * root cd /data/appstore/shell/monitor/ && python ClearLogs.py > /var/log/monitor.log 2>&1
```
- UserdataServiceMonitor 访问 http://storedatasync.ad-survey.com/healthy
- AppStoreLogMonitor 监控 avro 日志
- ProcessAliveMonitor 关键进程检查,和 check_process_alive 完全重复。可去掉
- DataMonitor 监测 /data/ 文件夹大小。
- DiskMonitor 磁盘容量监测
- ClearLogs 在 nginx-1 上,功能注释了,清除一些日志文件。
### nginx-watch
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python run.py`
- nginx 进程检查,和 check_process_alive 有重复,可考虑去掉。
### thrift_watch
`*/1 * * * * root /usr/local/bin/thrift_watch > /var/log/thrift_watch 2>&1`
- 调用 thrift_watch(代码位于同名 c++ 项目的 Impl 文件夹内)
- 检查共享内存里的活动更新时间,如果长时间未更新,则 level 设置为 critical
```
redis.gvsdcennvpny.scs.bj.baidubce.com:6379> hgetall warn_msg:match-center:overtime
appstore-nginx5
{"level":"normal","msg":"match-center time is 2023-08-15 18:06:07","server":"appstore-nginx5","time":"2023-08-15 18:07:01"}
appstore-nginx1
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx1","time":"2023-08-15 18:07:01"}
appstore-nginx8
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx8","time":"2023-08-15 18:07:01"}
appstore-nginx2
{"level":"normal","msg":"match-center time is 2023-08-15 18:06:07","server":"appstore-nginx2","time":"2023-08-15 18:07:01"}
appstore-nginx7
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx7","time":"2023-08-15 18:07:01"}
appstore-nginx6
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx6","time":"2023-08-15 18:07:02"}
appstore-nginx9
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx9","time":"2023-08-15 18:07:01"}
appstore-nginx12
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:50","server":"appstore-nginx12","time":"2023-08-15 18:07:01"}
appstore-nginx3
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx3","time":"2023-08-15 18:07:01"}
appstore-nginx4
{"level":"normal","msg":"match-center time is 2023-08-15 18:04:52","server":"appstore-nginx4","time":"2023-08-15 18:07:01"}
```
## 概述
- 优先列出与自己模块关系紧密的任务
```
Minute Hour Day Month Week command
分钟 小时 天 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
```
## 1. /etc/cron.daily
- logrotate 做日志压缩
## 2. /var/spool/cron/
### root
```
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 */6 * * * sync && echo 3 > /proc/sys/vm/drop_caches
0 6 * * * sh /data/appstore/shell/rmlog.sh
20 6 * * * sh /data/appstore/shell/rm-bmrlog.sh
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
#每隔1分钟监控一次scan transfer 并发送告警邮件
*/1 * * * * sh /data/appstore/shell/monitor_scan_transfer.sh
00 10 * * * /usr/sbin/ntpdate -u cn.pool.ntp.org > /dev/null 2>&1; /sbin/hwclock -w
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
## 3. /etc/cron.d/
### appstore-thrift
`1 8 * * * root python /data/appstore/shell/appstore-thrift/clean_log.py`
### check_folder_size
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_folder_size.py`
### check_process_alive
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python check_process_alive.py`
### monitor
```
*/5 * * * * root cd /data/appstore/shell/monitor/ && python UserdataServiceMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python AppStoreLogMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python ProcessAliveMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DataMonitor.py > /var/log/monitor.log 2>&1
*/5 * * * * root cd /data/appstore/shell/monitor/ && python DiskMonitor.py > /var/log/monitor.log 2>&1
#1 17 * * * root cd /data/appstore/shell/monitor/ && python ClearLogs.py > /var/log/monitor.log 2>&1
```
### nginx-watch
`*/10 * * * * root cd /data/appstore/nginx-watch/ && python run.py`
### thrift_watch
`*/1 * * * * root /usr/local/bin/thrift_watch > /var/log/thrift_watch 2>&1`
## 代码
- gcc4.8.5 编译检查更严格,删掉部分变量
- cppjson 一些用法修改。
## 部署
- 因已存在其他业务,/data 路径权限问题,ssp nginx 的配置 nginx.conf 需做修改
- 修改 user adx-user; 原来是 nobody
## 系统
- /etc/hosts 更新,主要是加 nginx-1~12
- 整理登陆密钥
- 注意 用户 adx-user root
- 可能需要确认使用 root 来执行 ssp nginx 的部署。
## appstore-thrift
- ssp nginx 与 adx ssp-core 都存在 共享内存数据
- 共享内存数据结构不变,程序不需要移植
- ssp nginx 的 thrift 数据,代码更新一些。可考虑使用 ssp nginx 的 thrift 代码。
## 定时任务
- nginx 日志压缩先不管
### 原有 /var/spool/cron/root
```
#*/1 * * * * sh /data/appstore/intime/IntimeSynch-job.sh
0 */6 * * * sync && echo 3 > /proc/sys/vm/drop_caches
0 6 * * * sh /data/appstore/shell/rmlog.sh
0 0 * * * sh /data/appstore/shell/nginxLogRotate.sh
0 0 * * * sh /data/appstore/shell/cleanNginxHistory.py
*/15 * * * * sh /data/appstore/shell/scan-transfer-transferbmr-defend.sh
*/1 * * * * cd /data/appstore/IntimeStat/ && python main.py > /data/log/IntimeStat.log 2>&1
#*/1 * * * * cd /data/appstore/IntimeStat/ && python ctr-keywords.py > /data/log/ctrKeywords.log 2>&1
#*/2 * * * * cd /root/IntimeStat/ && python IntimeStat.py > /data/log/IntimeStat.log 2>&1
#*/2 * * * * cd /root/IntimeStat/ && python IntimeStatAll.py > /data/log/IntimeStatAll.log 2>&1
#*/5 * * * * cd /root/IntimeStat/ && python StrategyCounter.py > /data/log/StrategyCounter.log 2>&1
# restart nginx on the 1st and 15st of each month.
0 0 1,15 * * sh /data/appstore/nginx/restart.sh
*/5 * * * * /opt/hosteye/bin/upgrade --upgrade_mode=8>/dev/null 2>&1
```
- IntimeSynch-job.sh 找不到代码文件,忽略
- drop_caches 清理系统缓存,先不管
- rmlog.sh 找不到代码文件,忽略
- nginxLogRotate.sh 找不到代码文件,忽略
- cleanNginxHistory.py 找不到代码文件,忽略
- scan-transfer-transferbmr-defend.sh 大数据端的,忽略
- cd /data/appstore/IntimeStat/ && python main.py 需要迁移,先看代码
- restart.sh 之前因为内存泄漏问题,需要定期重启 nginx。现已修复内存泄漏,该任务可不执行。
## 代码与脚本
- scp 拷贝
## 部署任务代码
- scp 拷贝
## systemctl
- 服务配置路径 `/usr/lib/systemd/system/`
- 服务配置示例
```
- [Unit]
Description = ops notify Service
[Service]
LimitCORE=infinity
LimitNOFILE=102400
LimitNPROC=65535
Type=simple
WorkingDirectory=/data/ops-notify/
ExecStart=/data/ops-notify/ops-notify
KillSignal=SIGINT
Restart=on-failure
StandardOutput=null
[Install]
WantedBy=multi-user.target
```
- nginx
```
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
```
- 设置开机启动
- 建立好服务配置后,执行 `systemctl enable ops-notify.service`
- 执行完之后,`/etc/systemd/system/multi-user.target.wants/` 路径下,会多一个链接文件
\ No newline at end of file
## 原因
* git (1.7.1)版本低,导致 .git/config 里配置用户名+密码后,请求出错。
## 问题
- yum update git 升级不了
- 所以源码安装,但是提示缺少 msgfmt
- yum 安装 msgfmt 时,出错,猜测可能因为 centos 6.9 太老。
- 源码安装 msgfmt,发现依赖太多,弄其他依赖时,会再次出现各种错误,工作量太大,不确定因素过多。
## 方案
- 更改 yum 源为 腾讯源
- 从 nginx-test 拷贝源到有问题的机器上
- 先在 /etc/yum.repos.d 创建一个备份文件夹,备份原有配置。
- 将 nginx-test:/etc/yum.repos.d/CentOS-Base.repo 拷贝到目标机器 /etc/yum.repos.d/
- 执行 yum clean all
- 执行 yum makecache
- 更换好 yum 源后,安装 msgfmt 相关库,即执行 yum install gettext
\ No newline at end of file
## 概述
- 每双数月1号,检查报警配置。
- 云主机指标: cpu 占用率、内存占用率
- eip 带宽使用率
- redis 分片内存使用率,该项目前支持统一全体redis监控,不需要每个redis都设置一遍。
## 服务监控
- 进程存在
- 一个服务有多台机器
## 维护
- 定时脚本清理日志,释放磁盘空间
\ No newline at end of file
## 概述
- 这里是大纲,不涉及细节,看到整体即可。
### 服务器
- ssp nginx 10台
- dsp+dmp proxy 2台
- trace 2台
- huitoutiao 3台
## proxy
- nginx
- /data/action-report (proxy-3)
- /data/dsp-notify (proxy-3)
- /data/ops-notify (proxy-3)
## ssp nginx
- nginx
- Thriftc
## trace
- adx-cron (trace-1)
- ssp-notify
- adx-trace
## huitoutiao
- ssp-core
- ssp-web
- cpt-bid
- cpt-trace
\ No newline at end of file
## 百度云的 access key
* AccessKey: a65a1eefc9fd464bad41465426ba4f08
* SecretKey: 3466201a31be4b479d23278e03b700ac
## 数据
- 价格单位:分
## TODO
- 价格加密
- 注意价格单位转换,参考其他dsp
- 去掉返回的追踪url,存入redis,注意key的选取,注意重新构造adsource
- adsource若加了数据,可能需要和大数据那边同步。
- 之前用ssp对接,因为追踪信息,是写入本地文件,大数据监测flume。但adx不太一样。
- app 下载地址,要用三星商店的地址。
- appid,必须origin是穿山甲吗?
## 流程
- api_v0 请求,dsp配置转发。
- 协议转换,生成返回。
- 目前只有一个imp,广告匹配起来更简单。
- 穿山甲和百度,只投放下载类广告
- 按imp对返回进行归类。
- 一个imp下,多家dsp的返回做排序,按 ecpm ratio price 的顺序,做高低排序。
- 同imp下,选取广告:
- 相同包去重
- 价格加1分
- 计算dealPrice
- 不同dsp做计算加密价格串
- winNotice存入redis
- 注意广告位要求的最大广告数
- 修改返回串
- 创建adsource
- 附加我们的track:展示、点击、视频事件、开始下载、下载完成、开始安装、安装完成。
- 宏替换:不同dsp有不同的宏
- 生成我们的返回结构
- 缓存设备ID
- 记录匹配日志
## 注意
- HTTPS
- UA需要透传到HTTP头里
## TODO
- 索取 appid posid
- 第三方监控,存入redis,在触发时,需要大数据那边转发,并替换宏__TS__
- 价格加密与百度类似 123456789abcdefghijklmnopqrstuvw
## 疑问
- 宏替换 几乎不支持
- convUrl 转化链路上报url。这个是什么
\ No newline at end of file
## adx
### 新买服务器
- 包年包月、华北2、可用区B、计算型c2a
- adx-user
- mkdir ~/.ssh && chmod 700 ~/.ssh && cd .ssh
- vi authorized_keys 并 增加 adx-stg 的 pub key
- chmod 600 authorized_keys
- 拷贝 systemctl 文件
## adx-stg
- 从 adx-1 的镜像创建
- TODO 修改 systemctl 启动脚本,程序参数改为 stg 配置
- root 下 执行 pip install fabric
- 使用是出错,发现与百度云上版本不一致
- pip install six==1.10
- pip install fabric==1.14
- 增加 ssh key
- mkdir ~/.ssh && chmod 700 ~/.ssh
- 本人电脑上有 adx-user 的 key,不过拷贝到adx-stg 后,要改名
- chmod 600 id_rsa id_rsa.pub
## adx-trace
- 和 adx 一样,设置 sudo
- 和 adx 一样,设置 ssh 登陆免密
- 设置完,要使用 stg 登陆一下。避免部署业务时出现确认提示。
- 拷贝 systemctl 文件:adx-trace.service
## proxy
- yum install git && yum install nginx
- 拷贝 其他代理的 2 个nginx配置过来 nginx.conf conf.d/default.conf
## 其他
- 买完云主机后,要记得配置 安全策略,否则有可能连不上。
- 若要连redis,mysql,则需要加两种类型的白名单。
### 安装pip
- 百度云有老的 pip 安装包
- 安装时提示需要 setuptools
- 去 https://pypi.org/project/setuptools/#files 找旧版 25.2
- 下载到 setuptools 后,解压,执行 python setup.py install
- 然后再安装 pip
r.GET("/store/match", handler.GetOnlineAds_v1_Get)
r.POST("/store/match", handler.GetOnlineAds_v1_Post)
r.POST("/api/store/match", handler.GetOnlineAds)
r.GET("/sdk/match", handler.GetOnlineAds_SDK)
r.POST("/rtb/store/match", handler.GetRTBAds)
r.GET("/store/impression", handler.OnImpressionEvent)
r.GET("/sdk/impression", handler.OnImpressionEvent_SDK)
r.GET("/store/action", handler.OnActionEvent)
r.GET("/sdk/action", handler.OnActionEvent_SDK)
这个不对外公布,处理应用宝相关通知
r.GET("/yyb_track", handler.OnYYBTrack)
r.GET("/store/config", handler.GetConfig)
r.POST("/api/v0", handler.Get_Api_V0)
r.GET("store/event", handler.OnVideoEvent)
// 初始需求是,星钻这个需求,广告受众下载app时,需要从我们这边获取下载地址
r.GET("/store/adinfo/download_addres", handler.DownloadAddress)
//联盟广告app下载地址
//(NOTE 2023-06-15 经与产品确认,这个接口弃用)
// TODO 先注释掉接口,他日若无争议,再去掉相关代码
//r.GET("api/store/download_address_api", alliance.GetDownloadAddress)
//某些CPA类广告,apk存鹏泰这里,我们做了cdn加速,且做了防盗链,设置了有效期
r.GET("/apk_download", handler.APKCDNDownloadAddress)
// 隐私政策
r.StaticFS("/privacy", http.Dir("./web/privacy/"))
// 文件上传
r.GET("OnUpload", h5_deploy.OnUpload)
r.StaticFS("/h5/", http.Dir(setting.H5_DIR))
\ No newline at end of file
This diff is collapsed.
180.76.51.115 git.DT-DTG5.com
192.168.20.3 adx-1
192.168.20.25 adx-2
192.168.20.27 adx-3
192.168.20.28 trace-1
192.168.20.29 trace-2
192.168.20.10 proxy-1
192.168.20.24 proxy-2
192.168.20.5 log
\ No newline at end of file
## adx-web
* adx1.ad-survey.com
* 部署到 adx
* TODO crontab
* 模拟请求,dsp成功返回:oppo通过
## adx-cron
* 部署到 log
* 配置 conf
* 验证 ssp db 和 adx_db 是否 成功获取数据,并存入redis,adx-core 才需要这部分数据,这里不用考虑。
## adx-trace
* adxtracking1.ad-survey.com
* 部署到 adx
* 测试 trace
* kafka,根据代码来看,不需要kafka
## dsp-notify
* 部署到 proxy
* 验证,查看日志,是否存在发送
## nginx proxy
* NOTE 让 dsp 添加 ip 白名单,整理文档,有哪些dsp需要白名单
* NOTE 超时监控,待数据量大之后再上。
## redis
* NOTE 集群开启了 keys 命令,待过了调试阶段,要关掉。
* 验证 pega cluster 是否有 dsp trace url
## 变更
adx-blb 原来 101.126.32.90 变更为 180.184.56.130 adx1.ad-survey.com
adx-trace-blb 原来 101.126.33.134 变更为 180.184.56.131 adx1tracking.ad-survey.com
proxy 原来 101.126.45.126 变更为 180.184.56.132
adx 原来 101.126.42.254 变更为 180.184.56.133
## 调试
```
101.126.42.254:8080/api/v0?slot=1100&debug=7998444
{"app":{"bundle":"LockScreen"},"device":{"connectiontype":3,"devicetype":1,"ext":{"csc":"CHC","db":"samsung","imei":"","mcc":"460","mnc":"11","oaid":"d544470c20c96d389e74a1992015246262f69caa32c09872680bafdaba1e1383","orient":0,"sdkVerAndroid":"33"},"h":2316,"ifa":"d4f2dd753e377d96","ip":"","ipv6":"","ip":"210.46.222.81","make":"samsung","model":"SM-S9180","os":"Android","osv":"13","ppi":450,"ua":"Mozilla/5.0 (Linux; Android 13; SM-S9180 Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36","w":1080},"id":"6391e273-36fe-44b9-bd12-01c05994a4d5","imp":[{"bidfloor" : 0.1,"ext":{"rec":0,"searchWords":["dou"]},"id":"c467042a-eb00-4ce5-ab0f-61b318cd3d5e","native":{"request":"{\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"img\":{\"h\":504,\"type\":3,\"w\":1440},\"required\":1}]}"}}],"user":{"id":"d544470c20c96d389e74a1992015246262f69caa32c09872680bafdaba1e1383"}}
带 download_refetch
180.184.56.130/api/v0?slot=415&debug=7998444
180.184.56.133:8080/api/v0?slot=415&debug=7998444
adx1.ad-survey.com/api/v0?slot=415&debug=7998444
{
"app":{"bundle":"zhiliangunion"},"device":{"connectiontype":1,"devicetype":4,"ext":{"csc":"CHC","db":"samsung","imei":"YWRhc2RmYUhLRklFV0ZIRUlXUkZFV1JSVw==","mcc":"460","mnc":"01","oaid":"1e3a2f9a859741379e81eb5833c55333c4ba27a4f73e4d2eafca4858d00f84ab","sdkVerAndroid":"22"},"ifa":"d4f2dd753e377d96","ip":"14.142.149.66","ipv6":"2001:0db8:85a3:0000:0000:8a2e:0370:7334","make":"samsung","model":"S8","os":"Android","osv":"6.0","ua":"Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G9650 Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36"},"id":"f3a9e81b-01b6-4b52-88ad-34ccf7d0b1e4","imp":[{"ext":{"pkgs":"com.wuba,com.ss.android.article.lite,com.duowan.mobile,com.ss.android.article.news,com.wuba.bangjob,com.baidu.searchbox,com.youdian.twzw.samsung,com.baidu.searchbox.lite,com.anjuke.android.app,com.dragon.read,com.smile.gifmaker,com.ss.android.homed,com.sup.android.superb,com.gf.client,com.duxiaoman.wallet,com.youxiang.soyoungapp","searchWords":[]},"id":"371ecea9-40c8-4133-b976-7588e4671d0c","native":{"request":"{\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"w\":256,\"h\":256}}]}"}}]
}
```
\ No newline at end of file
昨天(2024-04-25 周四)冬生访问 api v0,一定几率出错,解析json错误,昨天下午和今天排查了一下,
结论为,在公司网络环境,访问火山云的带 ipv6 的 clb,会随机出问题。
昨天下班我在家试了下,没出现过问题,
今天在公司,访问火山上那个旧的 api v0 的 clb(不带ipv6),也没问题。
我用手机开热点,公司电脑连热点后,再请求广告,也不会出现问题。
所以估计是公司网络和火山云的 ipv6 clb 有兼容性问题。这个不好继续排查,以后注意这个情况即可。
adx.ad-survey.com/api/v0
http://feed.ad-survey.com/feed/match
这两个接口,都存在相似问题。
\ No newline at end of file
## 火山云 redis 信息
redis-cnlflyo8lhn3noc6a.redis.ivolces.com 广告素材 ad_matter
redis-cnlfuuvu9nglr1sez.redis.ivolces.com 日志缓存 catch_log
redis-cnlfqzc1kxdcesrmz.redis.ivolces.com 集群 redis_cluster
## adx
### RedisClust
- hsy 用 redis_cluster 接替
Alliance_[uid] 缓存设备信息
### RedisClust3 RedisClust4
未使用,可删除代码
### RedisPega
alliance_cache_[logid] 缓存 dsp 的 trace url
dsp:notify dsp的赢价通知
### RedisCacheLog
setting.DownloadAddrLogKey 缓存广告日志
setting.RequestLogKey
setting.MatchLogKey
### RedisCountLog
dsp:return:ad dsp 有返回时的媒体请求body
dsprecord_[时间] 统计 dsp 请求次数
adreq_monitor_adx_[时间] 统计广告位请求次数
### adx redis
ssp:creative
adx:alliance_mapping
ssp:apk:durl
setting.NoticeCbKey
halomobi_adlist
fallback_source
ssp:dsp:flow_rule
ssp:dmd5 废弃
dsprecord_**** [dsp 访问记录, 下划线后是日期]
adreq_monitor_adx_**** [广告位请求次数记录] 将废弃
### ssp redis
media:tencent:business:key
ssp:creative:base
ssp:adpos_info
ssp:adpos_info_ex
ssp:app_info
ssp:app_info_ex
dsp:info
baidu_pkgs
iflytek_pkgs
iqiyi_pkgs
kuaishou_pkgs
oppo_pkgs
pangolin_pkgs
## ssp
### ssp redis
pos:put: 记录广告投放活动次数
pos:return:ad 记录有返回的请求信息
adreq_monitor_ 记录广告请求次数
ssp:ctr:keywords
ssp:recomend:adpos_categories
ssp:dmp:flow_rule
ssp:sensitives
ssp:page_info
ssp:app_info
media:tencent:business:key
ssp:adpos_info
PKG:APID_*
ssp:app:filter:installed
ssp:search:appname:filter
app_pkg_name
defeat_apps
dsp:info
INTIME_STAT_ALL
keyword:union
ssp:strategy_app_keywords_adpos
map_api_level_2_android_ver
ssp:strategy:yingyongbao
tt_competing_app
rewards:user:apps
baidu_pkgs
iflytek_pkgs
iqiyi_pkgs
kuaishou_pkgs
oppo_pkgs
pangolin_pkgs
### adx redis
ssp:action:event 写入
## 概况
- centos 7.9
## 设置
### logrotate
- https://github.com/logrotate/logrotate/tree/3.14.0
- 火山云 centos 7.9 的 logrotate 版本较老,文件名时间格式,不支持分钟。
- 可从 github 获取源码,然后按 github 的介绍来安装。保持和百度云的版本一致,选3.14
- 安装
- yum install autoconf automake libtool make popt-devel xz
- autoreconf -fiv
- ./configure
- make && make install
- 注意:程序被安装到 /usr/local/sbin/ 路径下,需要拷贝到 /usr/sbin/ 覆盖原来的旧版
### 配置 .ssh key
- 为了 stg 能 ssh 免密登陆过来
- 用户 home 下确保存在 .ssh,没有就创建
- mkdir ~/.ssh && chmod 700 ~/.ssh && cd .ssh
- vi authorized_keys 并 增加 adx-stg 的 pub key
- chmod 600 authorized_keys
### git
- yum install git
- /etc/hosts 设置 git 服务器
- 添加 180.76.51.115 git.DT-DTG5.com
- git clone adx-cn
### bashrc
vi ~/.bashrc
增加内容:
```
alias ll='ls -lh'
alias gp='git pull'
alias gf='git fetch'
alias gs='git status'
alias gl='git log'
alias xps='ps o pid,lstart,rss,user,cmd -C'
```
### adx-user
- groupadd adx-user && useradd -g adx-user adx-user
- root 下执行
- mkdir /data && chown adx-user /data && chgrp adx-user /data
- adx-user 下执行 (部分服务器需要)
mkdir -p /data/adx/release
- sudo 权限
### sudo
- 为其他用户增加 root 执行权限
```
chmod u+w /etc/sudoers
vim /etc/sudoers
root 配置下(约文件末尾),添加一行:
adx-user ALL=(ALL) NOPASSWD: ALL
重新设置权限,chmod u-w /etc/sudoers
```
### 安装 go
- 下载golang,解压,移动到 /usr/local/go
- 软链接
- ln -s /usr/local/go/bin/go /usr/bin/go
- ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt
- 配置
- 编辑 /etc/profile,增加内容:
PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
- 编辑 ~/.bash_profile,增加内容:
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
- 注意不同用户的 .bash_profile
- mkdir ~/go && cd ~/go && mkdir src bin pkg
- git clone https://github.com/golang/lint.git
- cd lint/golint/ && go install
### python pip
- adx stg 服务器的 root 下,有 pip 的安装包
- pip 安装前,要先装 setuptools
### fabric
- 部署程序,一般只安装在 stg 上
- root 下 执行 pip install fabric
- 使用是出错,发现与百度云上版本不一致
- pip install six==1.10
- pip install fabric==1.14
## adx stg
- 现有服务保持不变,增加 ssp nginx服务。
## ssp stg
- nginx 迁移至 adx-stg
- 迁移完通知大数据,然后测试
- 推掉服务器
## 域名
- stg-adxtracking.ad-survey.com
- 端口 8180
- stg-adx.ad-survey.com
- 端口 8888
## redis
- 火山云买一个redis [over]
## dsp-notify
- 更新 redis 配置 [over]
## 测试用例
```
180.184.56.136:8888/api/v0?slot=822&with_nbr=1&debug=7998444
{
"id":"0b4db478-79d6-4a8e-97b4-1af31d700fbf1",
"imp":[
{
"id":"3bfc542e-88ac-4421-a2c4-fe3ca041c68f",
"native":{
"request":"{\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":25}},{\"id\":2,\"required\":1,\"img\":{\"type\":3,\"w\":200,\"h\":200}}]}"
},
"ext":{
"searchWords":[""],
"pkgs":""
}
}
],
"app":{
"bundle":"galaxystoreapp"
},
"device":{
"ip":"14.142.149.66",
"ipv6":"2001:0db8:85a3:0000:0000:8a2e:0370:7334",
"devicetype":1,
"make":"huawei",
"model":"S81",
"os":"Android",
"osv":"6.0",
"connectiontype":1,
"w":1080,
"h":1290,
"ext":{
"csc":"CHC",
"db":"samsung1",
"imei":"",
"oaid":"d4f2dd753e377d96d4f2dd753e377d964",
"mcc":"460",
"mnc":"01",
"networktype":1,
"sdkVerAndroid":"22"
},
"ifa":"",
"ua":"Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G9650 Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36",
"user":{
}
}
}
```
\ No newline at end of file
## blb
- 后端服务器,需要安全组里加规则 100.64.0.0/10: 服务端口,这里的ip地址比较特殊。
##
\ No newline at end of file
## 代码
- git 新建分支,针对移植硬件变更,做代码调整。
- 暂不考虑合入master。
### adx-web
* 具体修改处,参考git上相关分支的提交记录。
* 修改 app-prd.ini
* 修改 代理服务器 ip 地址。
* 编译安装后,依靠 systemctl 运行。
## 服务器
### 地址
192.168.20.3 180.184.56.133 EYCFsjd2017!!@#%* adx adx-user密码 Bgc@#41_gwewq098
192.168.20.10 180.184.56.132 EYCFsjd2017!!@#%* 代理请求 dsp-proxy
192.168.20.5 101.126.37.44 EYCFsjd2017!!@#%* 日志采集落盘 log
### 部署计划
* 只部署adx-web
* huitoutiao 的blb,需要提供对外访问,购买 eip ( 120.48.169.244 按流量 后付费)
## 操作
### git
* yum install git
* /etc/hosts 设置 git 服务器
* 添加 180.76.51.115 git.DT-DTG5.com
* git clone adx-cn
### bashrc
vi ~/.bashrc
增加内容:
```
alias ll='ls -lh'
alias gp='git pull'
alias gf='git fetch'
alias gs='git status'
alias gl='git log'
alias xps='ps o pid,lstart,rss,user,cmd -C'
alias prdadxredis='redis-cli -h redis-cnlflyo8lhn3noc6a.redis.ivolces.com --raw'
```
### 安装 go
* 下载golang,解压,移动到 /usr/local/go
* 软链接
* ln -s /usr/local/go/bin/go /usr/bin/go
* ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt
* 配置
* 编辑 /etc/profile,增加内容:
PATH=/usr/local/go/bin:$PATH
export GOPROXY=https://goproxy.cn,direct
* 编辑 ~/.bash_profile,增加内容:
GOPATH=~/go
export GOPATH
PATH=$PATH:$HOME/bin:$GOPATH/bin
export PATH
* mkdir ~/go && cd ~/go && mkdir src bin pkg
* git clone https://github.com/golang/lint.git
* cd lint/golint/ && go install
### linux 用户 adx-user
* groupadd adx-user && useradd -g adx-user adx-user
* root 下执行
* mkdir /data && chown adx-user /data && chgrp adx-user /data
* adx-user 下执行
mkdir -p /data/adx/release
### sudo
```
chmod u+w /etc/sudoers
vim /etc/sudoers
root 配置下(约文件末尾),添加一行:
adx-user ALL=(ALL) NOPASSWD: ALL
重新设置权限,chmod u-w /etc/sudoers
```
## 购买 redis
购买后,需要:
- 参数配置里,修改参数,disabled-commands 项的运行值里,去掉 keys
- 连接管理里,开启免密访问
- 数据安全里,绑定白名单,添加访问者的ip
广告素材
redis-cnlflyo8lhn3noc6a.redis.ivolces.com
redis-cnlflyo8lhn3noc6a.redis.volces.com 外网访问 角色名 bcc 密码 Pengtai_%$1
日志缓存
redis-cnlfuuvu9nglr1sez.cn-beijing.redis.ivolces.com
集群
redis-cnlfqzc1kxdcesrmz.redis.ivolces.com
redis-cnlfqzc1kxdcesrmz-direct.redis.ivolces.com 直连地址
## 数据库
实例名称:adx_db
实例id:mysql-b269aac43324
私网地址/端口:mysql10a1171b5b39.rds.ivolces.com:3306
公网地址/端口:mysql-10a1171b5b39-public.rds.volces.com:3306
admin:
userName: adxRoot
password: AdxWSXQAZ@$^*)
## dsp 请求代理
### nginx
- yum install nginx
- 参考 百度云上的代理服务器上的 nginx 配置
- 修改 nginx.conf
- 拷贝 conf.d/default.conf 到 windows 上,替换 本机 内网ip 地址为 火山云机器的 内网ip 地址。
- 执行 nginx -t 然后启动 nginx
### 监控
* 云平台添加监控警报。
## 0 服务器概述
- adx 3台
- trace 2台
- proxy 2台
- log 1台
## 1. adx
### 1.1 adx-web
```
r.GET("/store/match", api.GetStoreMatch)
r.POST("/api/store/match", api.GetAPIStoreMatch)
r.GET("/sdk/match", sdk.TrackMatch)
r.GET("/store/impression", handler.OnImpressionEvent)
r.GET("/sdk/impression", handler.OnImpressionEvent_SDK)
r.GET("/store/action", handler.OnActionEvent)
r.GET("/sdk/action", handler.OnActionEvent_SDK)
r.GET("/yyb_track", handler.OnYYBTrack)
r.GET("/store/config", handler.GetConfig)
r.POST("/api/v0", handler.Get_Api_V0)
r.GET("store/event", handler.OnVideoEvent)
// 初始需求是,星钻这个需求,广告受众下载app时,需要从我们这边获取下载地址
r.GET("/store/adinfo/download_addres", handler.DownloadAddress)
//某些CPA类广告,apk存鹏泰这里,我们做了cdn加速,且做了防盗链,设置了有效期
r.GET("/apk_download", handler.APKCDNDownloadAddress)
// 隐私政策
r.StaticFS("/privacy", http.Dir("./web/privacy/"))
// 文件上传
r.GET("OnUpload", h5_deploy.OnUpload)
r.StaticFS("/h5/", http.Dir(setting.H5_DIR))
```
## 2 trace
### 2.1 adx-trace
```
r.GET("/store/impression", handler.OnImpressionEvent)
r.GET("/sdk/impression", handler.OnImpressionEvent_SDK)
r.GET("/store/action", handler.OnActionEvent)
r.GET("/sdk/action", handler.OnActionEvent_SDK)
r.GET("store/event", handler.OnVideoEvent)
```
## 3 proxy
### 3.1 dsp-notify
- 只部署于 proxy-1
- 从 redis 取数据,分解数据得到url,访问url发送 dsp 广告通知。
### 3.2 统计dsp超时率
- 需要在原来代码上拉分支,并修改代码。
### 3.2 nginx
- 配置代理请求 dsp 广告
## 4 log
### 4.1 adx-cron
- 从 redis 读取广告日志,落盘
- 从 mysql 读取数据,写入 redis
## 5 测试
blb
- 广告请求 180.184.56.130
- tracking 180.184.56.131
### 5.1 adx-web
- GET store/match
`180.184.56.130/store/match?uid=Njk3NWZmZTgxZmEzMDFjYzNmODFiYzA3MDBjNTBhYTdlZjRiMjMzODJmOTQ0YTM0MGJhODFhOWRkYzhiZjNiZg%3D%3D&androidid=NjcxNWE2ZTgxODViMjIzOQ%3D%3D&sid=1257&oaid=MTQ0OTVkOTY4NTlmMDA0MzI0OTIwOGExNmJlMmMyZjc0NTZiYjBiNGY2ODAxZjE1NjRlNjY3Njg1MmZkZmU0ZQ%3D%3D&lan=cn&db=Samsung&timestamp=1695631620341&keywords=51&dt=SM-S9080&dos=Android13`
- 可正常返回广告
- 返回的广告通知地址,为 galaxystore.ad-survey.com,不需要进一步测试广告通知
## 域名
- adx.ad-survey.com 对外公布
- adxtracking.ad-survey.com 不公布
- galaxystore.ad-survey.com 对外公布
## 基本概念
### 广告请求
* ADX GET POST SDK GET POST
会转给 ssp nginx
* api v0
### 广告通知
* 服务端上报,我们收到后,做转发。
### dsp
## adx 用到的服务器
### 广告投放 5台
* 提供对外接口
* adx-web adx-core
### 惠头条 3台
* 不对外
* ssp-web ssp-core
* 记录 avro 日志
### 广告通知 2台
* adx-trace 对外,但不公布
* 通知 dsp,直接请求 url,大流量网卡。
### 代理请求 2台
- nginx 请求 dsp 广告
- dsp-notify 转发 dsp 的 win loss 通知。
### 日志 1台
- 广告通知,dsp 通知
## 广告媒体
### adx 非 api v0
- 请求直接转给 ssp nginx
- 返回内容,广告通知里,有adx的,也有ssp的
### api v0
- 请求会转给 ssp nginx,huitoutiao,三方dsp
-
## 优化
- 从日常使用看,这些可以优化。不过考虑的高业务量时,可能内存占用会变大,比如 huitoutiao 3台,请求大时,cpu和内存占用都很大。
* proxy 共4台,2台 降配,去掉1台
* huitoutiao 3台 降配
* adx 5台 降配
* adx-log 降配,且可将 notify-log 合入 adx-log
* ssp nginx 10台 降配
## 概述
* 根据目前百度云上使用到的业务结构,购买少量火山云服务。
* 举例:我们有10台ssp投放服务器云主机,挂载blb后,则在火山云购买2台云主机,1个blb。
## stg 环境
* 多个业务,可以共用 stg 环境
* 云主机 8核32G 2台
* redis 4G
## ssp
* blb,1个,外网EIP 200MB
* blb,1个,内网
* 云主机 8核32G 3台
* redis 2G 存投放素材,与后端共享使用。
* redis 集群 16GB 缓存 dsp 通知 url
* redis 集群或单机 16GB 存用户数据,与后端共享使用
* kafka 一台,具体参数暂不明确。多个业务模块共用
## adx
* blb,外网EIP 200MB
* 云主机 8核32G 2台
## trace
* blb,外网EIP 200MB
* 云主机 8核32G 1台
## 测试部署目标
### 安全性权限设置
* 能通过 ssh 连接到服务器,我们的运维能配置网络权限。
* 在公司时,只要存在公网ip,即可登陆主机。
* 在家时,通过跳转机,跳转到目标主机。
### 稳定性
* 云主机,不能出现崩溃,无法访问的情况。
### 效率
* 投放服务器部署好后,我们在公司电脑上模拟请求广告,能正常返回。
* 若无三方dsp,90%的请求在200ms内返回。
* 存在三方dsp时,90%的请求在400ms内返回。
* 请求三方dsp,95%的请求在280ms内返回。
* 云主机访问redis,普通小数据,在1ms内获取到。
### 2023-06-16 问题确认
- 1 全部部署,但只有小部分业务量。可以当作最小版本
- 2 有端到服务器的,也就是分布在全国各地的手机终端。请求三方dsp时,不清楚对方服务器再哪个区域,暂时没关注过这个问题。
这个应该是云服务器自行探测最短路径吧。
- 3 目前用到百度云的blb,没看到几层负载均衡这一参数。
- 4 8核16G 32G。 4核 8G
- 5 redis 5 和 6 都有用到,无明确区分,都可以。 集群和单机都待主从,集群和单机都有用到。
我们希望空间容量,在我们业务量大时,可以扩容,在业务小时,可以降容。
mysql 需要等 后端和大数据人员确认。
- 6 当前投放端,8核32G,日常负载在CPU 45%,内存负载较低,我们大部分场景内存都比较盈余,实际上可能16G就够了。
业务大的场景比较少,可能达到cpu负载80%
- 7 大数据确认。
- 8 峰值带宽大概 10MB,不过未来可能会增加。
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment