聚划算架构演化
&系统 优化
dafeng@taobao.com
Outline
• 聚划算业务介绍
• 系统架构变迁过程
• 研发实践优化
• 我们在路上
聚划算业务介绍
• ⽇日均5kw的PV
• ⽇日活跃⽤用户600w
• 阿⾥里百亿俱乐部
• 每⽇日5k个热卖单品
• ⽇日均订单50w笔以上
• ⽇日均提供的远程调⽤用1亿次
系统架构变迁过程
中⼼心化&服务化
⾼高速发展
产品化
雏形
2010年Q3
2010年Q1 聚划算上线
产品化团购平台上线,⼤大幅度
提⾼高⽤用户体验
2011年Q1 业务创新产品聚划算阶梯团上
线,C2B雏形我想团项⺫⽬目上⻢马
2012年Q1
聚划算商品管理&收费系统上
线,商品,商家,数据,会员,
营销,收费等功能化业务平台
迅速扩张为22个⼦子应⽤用,基本
完成应⽤用中⼼心化拆分雏形
雏形期
• 架构特点
– 单⼀一应⽤用
– 分层结构,清晰
– 新的功能快速迭代
– ⽔水平扩展能⼒力
雏形期架构
• 遇到的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
– 流量尖峰
– 商品数量陡增
– 各种新业务模式
⾼高速发展期架构
⾼高速发展期
• 遇到的问题
– 技术如何更好的⽀支持快速迭代
– 数据量,流量发展使得旧架构出现瓶颈
– 团队扩张&合作
中⼼心化发展期架构
中⼼心化发展期
• 遇到的问题
– 应⽤用如何拆分的⼤大讨论
– 依赖关系
– 应⽤用爆炸
– 资源和效率
演化总结
• 服务化中⼼心化趋势
• 解耦强依赖
• 公共组件的抽象
• 合理使⽤用不同层次的缓存
• 警惕缓存命中率
研发实践优化
• 让缓存有序&结构化
• ⼤大对象,⼤大列表
• 热点数据搜索
• 分布式任务系统
• 数据分布式复制
• 缓存占空
• 数据异步化写⼊入
• PageCache
场景:结构化缓存
• ⽤用户最近浏览宝⻉贝
• “⼗十分热卖”
• 交易排⾏行榜
Tedis
• 什么是tedis?
– ⾼高性能内存数据库Redis的⼀一个客户端;或者将Tedis理解为
淘宝在⼩小量数据的⾼高性能存储、操作和运算等场景的解决⽅方
案,⺫⽬目前正在聚划算团队率先实践。
• tedis做了什么?
– tedis是对开源redis的java客户端jedis的封装,在jedis的基
础上我们封装了⼀一套更易于使⽤用的byte api接⼝口和object api
接⼝口,同时做好了默认的object序列化⼯工作。在部署上,⺫⽬目
前采⽤用master-master结构,实现多写和随机读机制,既每
个写请求会发到所有服务器,每个读请求随机选取⼀一个服务
器,当在某台服务器读失败后,将该台机器加到重试队列中,
直到该服务器恢复正常,客户端的请求才会重新到该服务器。
Tedis
• 系统结构
Tedis
• redis适合做什么?
– 在主⻚页中显⽰示最新的项⺫⽬目列表
– 删除和过滤
– 排⾏行榜及相关问题
– 按照⽤用户投票和时间排序
– 过期项⺫⽬目处理
– 计数
– 特定时间内的特定项⺫⽬目
– 实时分析正在发⽣生的情况,⽤用于数据统计与防⽌止垃圾邮件等
– Pub/Sub
– 队列
– 缓存
场景:⼤大对象
• 列表很⼤大怎么办?
• 不能忽视的序列化和反序列化开销
• ⼀一个经常使⽤用的⼤大数据结构
– Ip库
– 类⺫⽬目库
– 城市库
RC-replicatedcache
• 什么是RC?
– 基于jvm 本地缓存的实时同步解决⽅
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,解决了内
存业务对象集合在集群范围内不同服务器之间的⼀一
致性问题。
• RC做了什么?
– 在应⽤用访问集群中任意⼀一台机器的时候.对其的本
地缓存进⾏行操作,本地缓存在修改的同时给⼲⼴广播中
⼼心发送消息。⼲⼴广播组件通过获得所有加⼊入该该组的
机器列表给所有机器发⼀一个消息
通知
关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知
所以机器都需
要进⾏行更新。其它机器在接收到消息以后做同样的
操作。进⾏行更新本地缓存
RC
• 部署结构
RC
• RC适合做什么?
– 频繁读取的稳定数据
– 集群环境下配置同步
– 热点数据⼤大规模读取
– ⽆无法忽视kv缓存的⺴⽹网络以及序列化开销场景
场景:热点查询
• 针对内存数据的搜索
• 数据热点集中,查询场景多样化
Laser
• 什么是Laser?
– 基于lucene的本地搜索容器,是针对中⼩小规模数据
量,⼤大流量读,⼩小流量更新的搜索解决⽅方案。
• Laser做了什么?
– Laser主要是针对索引的创建,更新,查询操作的
封装,整个容器采⽤用内存索引,最⼤大限度的提⾼高查
询的效率,通过全量和增量模块保持数据的实时,
同时针对容器重启情况下的数据预热,内存监控,
以及诸多提⾼高dump&query开发效率的⼯工具包。
Laser
• 系统框架
Laser
• Laser适⽤用的场景
– 热点数据的读取查询
– Kv缓存⽆无法适应的⼤大列表展⽰示
– 针对lucene索引对象的查询客户端
场景:分布式任务
• 让任务系统在分布式环境跑起来
zookeeper
taskServer1
TaskServer2
yardman
• Yardman是什么?
– yardman是⼀一个分布式的任务系统。具体的说
是由任务管理,任务调度,任务执⾏行3个系统
组成的集群环境下,分布式多任务协调系统。
• Yardman做了什么?
– 通过ops⻚页⾯面,yardman获得需要执⾏行的任务,
以及对于的任务执⾏行程序,TaskServer按照配
置执⾏行任务触发,停⽌止等调度。JobWorker通
过拉机制实时去taskServer获取需要执⾏行的job。
扩展jobWorker就可以实现⽔水平扩展
yardman
• 主要⺫⽬目标:将任务部署
在不同的机器上运⾏行
场景:跨库数据复制
• 2张不同纬度的分表
• 不影响性能,实现分库
• 最终⼀一致性
APP
User
Order
User
Order
User
Order
ITEM
Order
ITEM
Order
ITEM
Order
基于Binlog的跨库事务
• 优点:
– A.和业务隔离,
侵⼊入性⼩小。
– B.对db影响较
⼩小。
• 缺点:
⼩小于等待时间的
增减操作会导
致暂时的不⼀一
致
场景:缓存被击穿
• ⺴⽹网络攻击访问不存在的数据
• 区分不存在数据&未缓存数据
场景:让写不成为瓶颈
• 让请求快起来
Detail
写入用户最近浏览
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
推荐商品逻辑
取商品
渲染模版
取用户相关信息
获取评价,出价记录
场景:继续提升
• 如何让我们的QPS更⾼高?
• 系统资源消耗在哪⾥里?
H:P
APP
DB
我们在路上
• 应⽤用拆分颗粒度问题,分久必合
• 虚拟机OR实体机?
• 统⼀一的数据中⼼心
• 应⽤用云的理想