在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l...

21
用户标签服务 在线业务快速扩容 主讲人:黄俊炜

Upload: others

Post on 01-Dec-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

用户标签服务

在线业务快速扩容

主讲人:黄俊炜

Page 2: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

01 背景介绍

CATALOG 目录

03 技术实践

02 方案分享

04 经验心得

Page 3: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

背 景 介 绍01

Page 4: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

服务介绍背景介绍

l 简称DMP Fetcher

l 查询用户的标签

l 只读服务

l 主要的服务对象

l DSP广告

l SDK广告

l 数据分析

l 目标

l 低延迟

l 方便扩展

l 节省成本

DMPFetcher

SDK

DSP

数据分析

Page 5: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

初始设计背景介绍

Load Balancer

Client

DMPFetcher

DMPFetcher

DMPFetcher

Load Balancer

Consistent Hash

l Golang开发

l 初始设计

l TCP Binary协议

l HAProxy做负载均衡

l Consistent Hash

l 扩展策略

l 水平扩展

IP访问

Page 6: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

流量趋势背景介绍

Page 7: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

发现问题背景介绍

l 负载均衡器

l 常成为性能瓶颈

l 扩展困难

l 扩展Fetcher

l 负载均衡器Reload缓慢

l Ansible

l 手工维护动态节点

l 网络链路长,传输消耗大

Load Balancer

Client

DMPFetcher

DMPFetcher

DMPFetcher

Load Balancer

Consistent Hash

IP访问

Page 8: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

快 速 扩 容 方 案02

Page 9: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

改进方案背景介绍

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

Page 10: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

技 术 实 践03

Page 11: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Client with Lib技术实践

ConnectionPool

主逻辑

订阅Zookeeper

更新链接和策略

l 主逻辑

l TCP Binary

l Protobuf

l 失败重试

l Connection Pool

l Go channel

l 根据策略返回链接

l 订阅Zookeeper

l 维护链接池正确性

变更

Protobuf

DMPFetcher

监控系统

上报结果

Page 12: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

DMP Fetcher with Lib技术实践

初始化Fetcher

注册Zookeeper临时节点

与Zookeeper保持心跳

l 初始化

l 协议框架

l 建立数据库链接

l 临时节点

l 注册临时节点

l 退出时删除

l 登记访问方式和处理能力

l 上报QPS、活跃worker数

l 与Zookeeper保持心跳 退出时关闭Zookeeper链接

监控系统

Page 13: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Manager技术实践

Zookeeper集群

Manager

Client

管理策略

变更1 变更2 变更3

l Manager掌控扩容的过程

l 管理计算资源

l 管理请求分发策略

l Manager计算策略

l 读监控指标

l QPS

l 平均响应时间

l 读Zookeeper

l Fetcher处理能力

l Zookeeper按顺序推送变更到Client

监控系统

计算资源

上报结果

监控指标

Page 14: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

经 验 心 得04

Page 15: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Consistence Hash经验心得

2^32-1 2^32-1

l 单调性

l 一个Key的被分配到固定的节点

l 充分利用进程内缓存

l 平衡性

l 节点增减,受影响的数据少

l 减少进程缓存失效的影响

Page 16: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf 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…

公共缓存

进程缓存

Page 17: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

扩缩策略经验心得

l 早扩容

l 确保在系统负荷到达处理能力极限前扩容

l 避免雪崩

l 为服务器、Fetcher启动预留时间

l 降低启动失败的损失

l 迟缩容

l 避免错误判断短暂波谷而过快缩容

l 防止缩减过多计算能力

l 避免过快缩容后再次扩容导致变动过于频繁

l 定期进行Benchmark,调整扩缩策略

Page 18: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Manager经验心得

l Health Check改进

l 启动新服务器或Fetcher实例,执行Health

Check脚本,保证查询速度

l 进行适当的Warm up

l Shutdown改进

l 针对服务器以及Fetcher实例的特点,定制

Graceful Shutdown脚本

l 综合历史扩缩记录

l 购买适当的预留实例

Page 19: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Zookeeper集群经验心得

l 内网DNS配置TXT记录,标记Zookeeper集群的地

址。减少Client的配置。

l Zookeeper集群的tickTime适当降低,让Client能

尽快获知Fetcher实例异常

Page 20: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

Q&A

全球领先的综合性移动互联网企业

Page 21: 在线业务快速扩容 - opentalk-blog.b0.upaiyun.com...02 方案分享 04 经验心得. 01 ... l 初始设计 l TCP Binary协议 ... l Protobuf l 失败重试

THANKS

全球领先的综合性移动互联网企业