用户标签服务
在线业务快速扩容
主讲人:黄俊炜
01 背景介绍
CATALOG 目录
03 技术实践
02 方案分享
04 经验心得
背 景 介 绍01
服务介绍背景介绍
l 简称DMP Fetcher
l 查询用户的标签
l 只读服务
l 主要的服务对象
l DSP广告
l SDK广告
l 数据分析
l 目标
l 低延迟
l 方便扩展
l 节省成本
DMPFetcher
SDK
DSP
数据分析
初始设计背景介绍
Load Balancer
Client
DMPFetcher
DMPFetcher
DMPFetcher
Load Balancer
Consistent Hash
l Golang开发
l 初始设计
l TCP Binary协议
l HAProxy做负载均衡
l Consistent Hash
l 扩展策略
l 水平扩展
IP访问
流量趋势背景介绍
发现问题背景介绍
l 负载均衡器
l 常成为性能瓶颈
l 扩展困难
l 扩展Fetcher
l 负载均衡器Reload缓慢
l Ansible
l 手工维护动态节点
l 网络链路长,传输消耗大
Load Balancer
Client
DMPFetcher
DMPFetcher
DMPFetcher
Load Balancer
Consistent Hash
IP访问
快 速 扩 容 方 案02
改进方案背景介绍
Client with Lib
Manager Zookeeper集群
DMPFetcherwith Lib
l 服务发现
l Zookeeper集群
l 请求分发策略
l 废弃负载均衡器
l Manager
l 管理策略
l 定制扩容条件
l 提供Lib
l Fetcher启动时注册zookeeper临时节点
l Client订阅zookeeper推送的变更
l Ansible
l Dynamic Inventory
直接访问
推送变更
注册临时节点
管理策略
Ansible
技 术 实 践03
Client with Lib技术实践
ConnectionPool
主逻辑
订阅Zookeeper
更新链接和策略
l 主逻辑
l TCP Binary
l Protobuf
l 失败重试
l Connection Pool
l Go channel
l 根据策略返回链接
l 订阅Zookeeper
l 维护链接池正确性
变更
Protobuf
DMPFetcher
监控系统
上报结果
DMP Fetcher with Lib技术实践
初始化Fetcher
注册Zookeeper临时节点
与Zookeeper保持心跳
l 初始化
l 协议框架
l 建立数据库链接
l 临时节点
l 注册临时节点
l 退出时删除
l 登记访问方式和处理能力
l 上报QPS、活跃worker数
l 与Zookeeper保持心跳 退出时关闭Zookeeper链接
监控系统
Manager技术实践
Zookeeper集群
Manager
Client
管理策略
变更1 变更2 变更3
l Manager掌控扩容的过程
l 管理计算资源
l 管理请求分发策略
l Manager计算策略
l 读监控指标
l QPS
l 平均响应时间
l 读Zookeeper
l Fetcher处理能力
l Zookeeper按顺序推送变更到Client
监控系统
计算资源
上报结果
监控指标
经 验 心 得04
Consistence Hash经验心得
2^32-1 2^32-1
l 单调性
l 一个Key的被分配到固定的节点
l 充分利用进程内缓存
l 平衡性
l 节点增减,受影响的数据少
l 减少进程缓存失效的影响
DMP Fetcher Cache经验心得
key key key
shard shard shard shard
shard shard shard shard
shard shard shard shard
Hash
l Fetcher缓存
l 进程内缓存
l 分片
l Array
l 公共缓存
l 避免缓存穿透
Fetcher Fetcher…
公共缓存
进程缓存
扩缩策略经验心得
l 早扩容
l 确保在系统负荷到达处理能力极限前扩容
l 避免雪崩
l 为服务器、Fetcher启动预留时间
l 降低启动失败的损失
l 迟缩容
l 避免错误判断短暂波谷而过快缩容
l 防止缩减过多计算能力
l 避免过快缩容后再次扩容导致变动过于频繁
l 定期进行Benchmark,调整扩缩策略
Manager经验心得
l Health Check改进
l 启动新服务器或Fetcher实例,执行Health
Check脚本,保证查询速度
l 进行适当的Warm up
l Shutdown改进
l 针对服务器以及Fetcher实例的特点,定制
Graceful Shutdown脚本
l 综合历史扩缩记录
l 购买适当的预留实例
Zookeeper集群经验心得
l 内网DNS配置TXT记录,标记Zookeeper集群的地
址。减少Client的配置。
l Zookeeper集群的tickTime适当降低,让Client能
尽快获知Fetcher实例异常
Q&A
全球领先的综合性移动互联网企业
THANKS
全球领先的综合性移动互联网企业