大众点评网的技术变迁之路
1
菜鸟 2年 4年 6年 8年 以终为始
2
ABOUT ME
王宏 / 工业酒精
大学辍学,野路子出身
大众点评网创办加入至今
高级系统架构师
alcohol.wang@gmail.com
@DP王宏
3
2003年创建,国内领先的城市生活消费指南网站
覆盖全国2300多个城市,近120万家商户,2000万
条点评信息
活跃用户超过4200万,手机独立用户超过1000万
500M(GA)浏览量 / 月,高峰3000次动态请求 / 秒
70台主干服务器,165位技术人员
4
2003-2005
www.zSurvey.com
虚拟主机
ASP + Access
4万动态访问量 / 天
2名技术人员
5
TROUBLE
Access这斯“不是”数据库
负载越来越高,网站访问速度变慢
落后的ASP语言
UrlRewrite引起的CPU负载
6
ACTION
增加独立服务器
HP DL360,Web服务器
HP DL380,Database服务器
数据库升级
语言的变换
ASP ➜ ASP.Net 1.1
用烂技术不是丢人的事情,
把好技术用烂才丢人。
7
2006-2009
www.dianping.com
5台服务器
ASP.Net 1.1 + SQL Server
180万动态访问量 / 天
8名技术人员
8
页面访问忽快忽慢
9
动静分离
了解动态页面请求和静态资源请求的不同特征
使用新的域名,指向静态资源
新建⼀一个站点,处理静态资源
成本低,收益高
无缝衔接CDN
10
11
前端优化
12
Why Slow?
13
南北互通
14
CDN
静态CDN对于静态资源的优化非常有效
静态资源的版本控制
参数型版本控制
http://a.tbcdn.cn/??p/global/1.0/global-min.css?t=2011091520110301.css
路径型版本控制
http://i1.dpfile.com/s/css/g.base.min.v44.css
不要将鸡蛋放在同⼀一个篮子里
15
机房选择
网络质量, 让用户帮助选择机房
使用“
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
”图片进行监控对比
软性指标
支持响应、基本服务
硬性指标
防火、防盗、防断电
16
使用“标准”图片进行监控对比
var idcUrl = 'http://nanjing.dianping.com/test.jpg?' +
Math.random();
document.getElementById('top').innerHTML = '
';
function idc(url, start)
{
! var loadTime = new Date().getTime() - start;
! _gaq.push(['_trackEvent', 'IDCLoadTime', url, '', loadTime]);
}
17
持续监控
Google Analytics / 百度统计
Gomez / 基调网络
DNSPod / 监控宝
Cacti / Ngios
18
分布式文件系统
海量小文件,缓存命中率低
单机大磁盘,IO负载增高,单点故障
MogileFS、FastDFS、Taobao TFS、MongoDB GridFS
19
Load Balance
20
负载均衡
DNS轮询
免费,无成本,无法进行健康检查,策略调整麻烦
Software
免费,成本低,有⼀一定瓶颈,Nginx / LVS
Hardware
价格贵,可控型和稳定性很好
都需要注意Session保持的问题,最好是无Session化
21
Upgrade
22
架构升级
架构层次清晰化
Web Server
App Server
Cache
Database
架构思想的上下贯彻
全局缓存
数据冗余、No SQL Join
23
DataBase'Adapter�
ORM� Data'Router�
DianPing.Fram
ew
ork�
DianPing.Caching�
DianPing.Com
m
on�
Query�
User'Service� Shop'Service�……�
Service'Provider�
Web'Pages/Ajax/API�
24
缓存策略
缓存对象的粒度,便于缓存的更新、删除
缓存的序列化和反序列化对CPU和网络的开销
自动缓存:DAO ⇢ 数据访问层 + AOP
大批量缓存对象的清除
多Memcached服务器下,Consistent-Hash
25
缓存粒度
List
↓
List
Shop
Shop
Shop
↓
mget
26
大批量缓存的清除
Lazy Delete
Cache Provider ↣ Cache Object Version
Shop_{ShopID}
Shop_{ShopID}_{Version}
27
⼀一致性哈希
28
缓存雪崩
缓存大量失效,导致Database负载上升影响到整个集群
单机开发是容易忽略,只有面对高并发的时候才会
凸显
双缓存策略
代码改动、缓存错乱
用Redis替代Memcache
复制分发、快照、对象的部分读取
29
数据冗余
三个范式的弊端
数据冗余的弊端
No SQL Join
数据⼀一致性
清晰的数据拓扑
异步更新
30
2010-2011
ASP.Net 2.0 / 3.0 / 3.5
MySQL + NoSQL
Memcached
MogileFS
Lucene
38台服务器
73名技术人员
31
32
33
行动方针
高层的鼎力支持
协调大家目标⼀一致
原有人员的学习转型
小步快跑
先易后难
中后期快速复制
这是⼀一个长期的过程
34
DataBase'Adapter�
ORM� Data'Router�
DianPing.Fram
ew
ork�
DianPing.Caching�
DianPing.Com
m
on�
Query�
User'Service� Shop'Service�……�
Service'Provider�
Web'Pages/Ajax/API�
35
36
迁移改进
RPC
分布式数据层
消息中间件
业务数据网状连接
控制数据中心节点
计算资源可动态调控的架构
开发、测试、发布自动⼀一体化
更加行之有效的业务监控
37
持续优化
发展�
发现问题�
反馈�
解决问题�改进�
进化�
新问题出现�
38
Donald Knuth
高德纳
Premature optimization is the root of all evil
过早优化是万恶之源
Fenng
冯大辉
好架构不是设计出来的
好的架构和最初设计有关系,
但最重要的是发展中的演化。
39
THE
END
40