狠狠撸

狠狠撸Share a Scribd company logo
从林书豪到全明星
虎扑网技术架构如何化解流量高峰




       虎扑网研发经理 洪涛
      ArchSummit 2012 深圳
自我介绍

洪涛

8 年互联网开发
多个大型网站架构经验
2011 年初加入虎扑网
主管研发和架构设计
公司介绍

hupu.com
Alexa 中国排名 90 左右
流量:每天 1 亿 pv




                   3
议程

? 流量高峰从何而来?
? 处理流量高峰时的困扰
? 6 个能够化解流量高峰的技术
? 虎扑网在处理流量高峰时的一些经验




                     4
5
7
从两次事件看虎扑网流量高峰的特点

? 时间发生突然,流量增长迅猛
–流量高峰对系统负载提出了严峻的考验
? 比赛场次多、悬念大
–技术角度无法预测何时出现流量高峰
? 大部分比赛在中国时间的早晨
–出现问题时无法人工干预并及时修复




                     8
流量高峰从何而来?

? 社会热点事件
? 体育赛事,明星
? 电商促销活动
 –淘宝“双 11” 、“抢红包”,京东“ 618”
? 恶意攻击
 –黑客攻击
 –民间团体互掐



                             9
大多数网站应对流量高峰的困扰

? 缺少冗余服务器资源
–流量高峰时没有额外资源用来提升系统性能
? 无法预估流量高峰的发生时间
–系统必须足够“智能”,在尽可能少干预的情况下发
 现流量高峰并且作出应对
? 必须提供稳定服务
–每次流量高峰都是机遇
–网站的存活决定公司的生命


                           10
虎扑网化解流量高峰的策略

? 流量高峰发生前:
–预先处理并缓存页面和数据
–监控系统负载,判断流量高峰是否有发生的趋势
? 流量高峰发生时:
–尽可能多的利用所有服务器向用户提供服务
–削减或调整不必要的服务
? 流量高峰发生后:
–及时恢复正常服务

                         11
技术上如何化解流量高峰?

1.Shared-nothing 架构
2.消息队列
3.微缓存
4.Edge Side Include
5.NoSQL
6.功能调节控制系统



                      12
技术一: Shared-nothing 架构




                         13
Shared-nothing 架构

? 什么是 Shared-nothing ( SN )架构?
 –一个系统(网站)中的每一个节点(应用服务器)
  都是互相独立的,彼此之间没有竞争或冲突。
? SN 在现实生活中的例子
 –电驴, P2P
 –蚂蚁




                                 14
SN 架构如何化解流量高峰?




应用独立型架构    SN 架构


                   15
SN 架构如何化解流量高峰?

? 在传统的应用独立型架构中
 –系统的性能取决于“短板”节点
? 在 SN 架构中
 –系统的性能是其所有节点性能的总和




                      16
升级 SN 架构的三个关键问题

? 如何管理 Session ?
? 如何统一网站应用?
? 如何部署应用?




                       17
问题一:如何管理 Session ?

?SN 架构下管理 Session 的三种方案
 –通过区分 IP 将用户分配到固定的服务器上
  ?分布不均匀,易用性差,无法应对复杂的网络环境
  ?软件实现逻辑复杂,硬件实现价格昂贵
 –使用外部数据库存储 Session
  ?严格意义上并没有实现 SN
 –将 Session 加密后存在 Cookie 里
  ?对 Session 数据的大小有限制
  ?如何验证 Cookie 有效性?

                             18
问题二:如何统一网站应用?

? 使用统一的开发框架进行应用开发
–虎扑网使用 Symfony 作为基础开发框架
–虎扑网整个网站就是一个应用
? 复杂的异构系统怎么办?
–单机多实例
–虚拟化




                          19
问题三:如何部署 SN 架构下的网站应
        用?
? 应用服务器数量多
–如何快速升级应用到新版本?
? 应用复杂度变高
–如何验证代码的正确性?
–发现问题后如何回滚?
? 部署的新版本需要改变数据库结构怎么办?




                        20
虎扑网的部署策略

1.部署过程可测试
2.灰度部署
3.发布前热机
4.数据库结构调整策略
1.在 SQL 语句中写全字段名
2.字段调整尽量保证向前兼容




                   21
虎扑网的部署工具




           22
技术二:消息队列




           24
使用消息队列后
业务逻辑处理顺序的变化




使用消息队列前   使用消息队列后




                    25
虎扑网对消息队列的要求

? 提供多种消息分发方式
? 高性能
? 多语言支持
? 持久化支持
? 支持集群和扩展




                  26
虎扑网的选择




         27
虎扑网已经部署 RabbitMQ 至生产环境




                         28
消息队列在虎扑网的应用

? 发送邮件和站内短消息
? 图片处理
? 发送手机短信
? 用户访问数据的统计和分析
? 缓冲对数据库的大数据量写和更新操作
? ……



                      29
某应用在部署消息队列后的负载曲线

          部署消息队列前:
          平均压力 0.5
          峰值达到 2.7




          部署消息队列后:
          平均压力 0.5
          无明显峰值




                     30
消息队列如何化解流量高峰?

? 减少“峰值效应”
 –性能需求从满足峰值降低到满足平均值
? 系统运维难度降低
 –系统负载变得平缓,热数据不会突然大量出现
? 更加合理利用资源
 –将一部分业务放在空闲时段处理
 –闲置的计算资源可以被充分利用起来



                         31
技术叁:微缓存




          32
经典的缓存方式

    Nginx       App          Memcache
                (PHP-FPM)




1. 接受浏览器请求
2. 透传所有请求去访问 App
3.App 判断 Cache 是否可用,如果不可用则生成 Cache
4. 如果 Cache 可用则获取 Cache
5.Web Server 获取到 App 返回的结果
6.Web Server 将结果返回给用户



                                        33
什么是微缓存?

    Nginx        App
                 (PHP-FPM)

     Nginx
     Cache




1. 接受到大量请求
 2a. 透传其中的一个请求去访问 App
 3a. 将 App 返回的结果写入 Cache
 2b. 直接从 Cache 读取页面缓存
 3b. 将 Cache 的结果直接返回给用户




                             34
微缓存的优势

? 优势
 –部署简单
  ?使用时仅需配置前端反向代理(如 Nginx )
 –应用偶和度低
  ? 不侵占应用 、不修改程序代码
 –页面更新速度快
  ?透传频率可调,最快每秒一次(以 Nginx 为例)
 –即使访问量再大,程序运行次数依然是固定的


                               35
微缓存的适用场景

? 在同一时间点,用户访问某页面的结果相同
–门户网站首页
–新闻 / 视频 / 图片的评论、回复
–论坛列表页、回复页
–碎碎念(微博)
–……




                        36
技术四: ESI ( Edge Server Include )




                                   37
包含页面片段的三种解决方案

? Client Side Include
 –实现原理:通过 javascript 、 iframe 载入其他页面
? Edge Side Include
 –实现原理:通过 ESI 标签中的 url 地址获取页面嵌
  套内容
? Server Side Include
 –实现原理:通过 SSI 标签中的文件地址获取页面嵌
  套内容


                                   38
ESI 和 SSI 的两点最重要的区别

? 载入方式不同:
 –SSI 只能加载静态文件和本地 HTTP 地址
 –ESI 可以加载远程 HTTP 地址,且可以设置 TTL 时
  间
? 各类 Web 服务软件的支持度不同
 –SSI 主要被用在各种 Web 服务器上,例如 Nginx 、
  Apache
 –ESI 主要被用在各种前端缓存服务器上,例如
  Varnish 、 Squid

                                   39
ESI 如何解决性能问题?

? 为了显示页面中的动态元素
–使用 ESI 前:
 ?通过 CSI 载入动态元素
 ?频繁的重新生成静态页面或页面缓存
–使用 ESI 后:
 ?通过 ESI 请求一个接口,缓存并将页面进行组装
 ?可以为不同的页面片段分别设定过期时间( TTL )




                              40
页面头部
 TTL :永久


 视频及播放数
 TTL : 5 分钟




相关视频
TTL : 60 分钟

留言
TTL :新内容产生时
今日头条推荐
TTL : 24 小时



           41
ESI 应用的场景

? 复杂页面(包含多个复杂组件)
? 分布式网站应用
–从远端服务器中获取页面数据
–在本地服务器进行页面组装
? 模拟多线程处理网页




                   42
技术五: NoSQL




             43
虎扑网使用的 NoSQL 服务

? Memcache
 –30%
? Tokyo Tyrant
 –40%
? Redis
 –30%
? Mongodb
 –开发中的游戏项目正在内部试用

                            44
虎扑网使用 NoSQL 的一些经验

? 勤用 Redis 的数据结构解决各种问题。
 –List 可以当做简单的消息队列来使用
 –Sorted Set 用来存放各种排序数据
? 使用 SSD 作为持久化的容器
 –虎扑网大量使用英某某公司的 520 系列
? Redisco
 –用 Redis 模拟类 SQL 操作的 Python 类库



                                  45
Redisco
               MySQL                           Redis(With Redisco)

select * from person..                 Person.objects.all()


      ..where name = ‘a’               Person.objects.filter(name='a')


      ..where name != ‘a’              Person.objects.exclude(name='a')


      ..where age > 5                  Person.objects.zfilter(age__gt=5)


      ..where name = ‘a’ and age > 5   Person.objects.zfilter(name=‘a’,age__gt=5)


      ..where name = ‘a’ limit 0 1     Person.objects.all().limit(1)


      ..order by name                  Person.objects.all().order('name')




                                                                                    46
技术六:功能调节控制系统




               47
作用

? 调节应用与服务的复杂度
? 开启或关闭某个功能




                48
实际例子 1

? 赛事文字直播
 –通过降低页面自动刷新的频率,增加系统相应能力

通过增加一倍的间隔时间,可服务用户数也会增加一倍
假设:单台服务器可以提供 500 的 RPS
           自动刷新间隔    可服务用户


             12 秒   12*500=6000


             24 秒   24*500=12000



                                   49
实际例子 2

? 新闻留言
 –关闭复杂功能,增加系统性能




                  50
功能调节控制系统的意义

? 通过监测系统负载,调节各项影响性能的参数
  和配置,提高响应能力,使系统尽可能地服务
  更多的用户。




                     52
虎扑网在处理流量高峰时的一些经验

? 停止新版本的部署,保持线上环境稳定。
?除非是紧急修复问题或提高性能的补丁
? 禁止搜索引擎抓取页面。
? 禁止第三方网站的页面请求。
? 禁止访问次数过于频繁的 IP
? 暂时封禁“过于活跃”的网站用户


                       53
参考资料
?   虎扑网架构
     –   《 2011 架构师大会:虎扑网架构升级之路》 http://wenku.it168.com/d_000055728.shtml
     –   《 2011 架构师大会:基于 Symfony 框架下的快速公司级应用开发》 http://wenku.it168.com/d_000055742.shtml
?   林书豪
     –   《林书豪 - 百度百科》 http://baike./view/3143415.htm
     –   《林书豪 - 维基百科》 http://zh.wikipedia.org/zh/%E6%9E%97%E6%9B%B8%E8%B1%AA
?   季后赛
     –   《 NBA 季后赛 - 维基百科》 http://zh.wikipedia.org/wiki/NBA%E5%AD%A3%E5%90%8E%E8%B5%9B
?   网站流量高峰从何而来?恶意攻击
     –   《爆吧》 http://baike./view/423530.htm
?   Shared-nothing
     –   《 Shared nothing architecture 》 http://en.wikipedia.org/wiki/Shared-nothing
     –   《 The Share-Nothing Architecture 》 http://zef.me/883/the-share-nothing-architecture
     –   《 What is the best PHP MVC framework for scalability 》 http://stackoverflow.com/questions/132056/what-is-the-best-php-mvc-framework-for-
         scalability
     –   《 将 Session 加密在 Cookie 里的 PHP 实现: sfCookieSessionStoragePlugin 》 http://plugins.symfony-
         project.org/get/sfCookieSessionStoragePlugin/sfCookieSessionStoragePlugin-0.9.2.tgz
?   Webistrano
     –   《 Webistrano - Capistrano deployment the easy way 》 http://www.peritor.com/en/products/webistrano/
     –   《 Capistrano 》 https://github.com/capistrano/capistrano




                                                                                                                                              54
参考资料
?   RabbitMQ
     –    《 rabbitmq.com 》 http://www.rabbitmq.com/
     –    《 Rabbitmq Client & Developer Tools 》 http://www.rabbitmq.com/devtools.html
     –    《 Rabbitmq in Action 》 http://www.manning.com/videla/
?   微缓存
     –    《 MICROCACHING: SPEED YOUR APP UP 250X WITH NO NEW CODE 》 http://fennb.com/microcaching-speed-your-app-up-250x-with-no-n
     –    《 Microcaching - Hacker News 》 http://news.ycombinator.com/item?id=3109283
     –    《 Nginx - HttpProxyModule 》 http://wiki.nginx.org/HttpProxyModule
     –    《 nginx microcaching config example 》 https://gist.github.com/1283573
     –    《 Why You Should Always Use Nginx With Microcaching 》 http://www.howtoforge.com/why-you-should-always-use-nginx-with-microcaching
?   ESI
     –    《 ESI - 维基百科》 http://en.wikipedia.org/wiki/Edge_Side_Includes
     –    《 Varnish-cache : ESI Features 》 https://www.varnish-cache.org/trac/wiki/ESIfeatures
     –    《 Varnish-cache: Tutorial ESI 》 https://www.varnish-cache.org/docs/3.0/tutorial/esi.html
     –    《 Apache Tutorial: Introduction to Server Side Includes 》 http://httpd.apache.org/docs/2.2/howto/ssi.html
     –    《 Symfony 2 - HTTP Cache 》 http://symfony.com/doc/current/book/http_cache.html#edge-side-includes
     –    《 How to use Varnish to speed up my Website 》 http://symfony.com/doc/current/cookbook/cache/varnish.html
?   NoSQL
     –    《 Redisco 》 https://github.com/kiddouk/redisco
     –    《 Introducing redisco - Python Containers and Simple Models for Redis 》 http://www.timmedina.net/introducing-redisco-python-containers-
          and-sim
     –    《 python 使用 redis 神器 ---redisco 》 http://pako.iteye.com/blog/1581139




                                                                                                                                                    55
谢
谢!
Thanks!

More Related Content

What's hot (19)

PPTX
My sql 5.6新特性深入剖析——innodb引擎
frogd
?
PDF
服务器基准测试-叶金荣蔼颁驰翱鲍-20121130
Jinrong Ye
?
PPTX
Cgroup lxc在17173 iaas应用池中应用
Jinrong Ye
?
PPTX
Pptv lb日志实时分析平台
drewz lin
?
PDF
Nodejs & NAE
q3boy
?
PPT
Traffic server overview
qianshi
?
PDF
翱辫别苍蝉迟补肠办网络规划
OpenCity Community
?
PPTX
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
Xuefeng Zhang
?
PPT
高性能并发奥别产服务器实现核心内幕
ideawu
?
PDF
叠测辫补迟博客出品-服务器运维集群方法总结3
redhat9
?
PDF
Mvcc (oracle, innodb, postgres)
frogd
?
PDF
叠测辫补迟博客出品-服务器运维集群方法总结2
redhat9
?
PDF
分布式Key Value Store漫谈
Tim Y
?
PDF
Ceph in UnitedStack
Rongze Zhu
?
PPTX
高性能队列贵辩耻别耻别的设计和使用实践
孙立
?
PDF
新浪微博贵别别诲服务架构
XiaoJun Hong
?
PPTX
狈辞蝉辩濒叁步曲
84zhu
?
PDF
美团技术团队 - KVM性能优化
美团点评技术团队
?
My sql 5.6新特性深入剖析——innodb引擎
frogd
?
服务器基准测试-叶金荣蔼颁驰翱鲍-20121130
Jinrong Ye
?
Cgroup lxc在17173 iaas应用池中应用
Jinrong Ye
?
Pptv lb日志实时分析平台
drewz lin
?
Nodejs & NAE
q3boy
?
Traffic server overview
qianshi
?
翱辫别苍蝉迟补肠办网络规划
OpenCity Community
?
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
Xuefeng Zhang
?
高性能并发奥别产服务器实现核心内幕
ideawu
?
叠测辫补迟博客出品-服务器运维集群方法总结3
redhat9
?
Mvcc (oracle, innodb, postgres)
frogd
?
叠测辫补迟博客出品-服务器运维集群方法总结2
redhat9
?
分布式Key Value Store漫谈
Tim Y
?
Ceph in UnitedStack
Rongze Zhu
?
高性能队列贵辩耻别耻别的设计和使用实践
孙立
?
新浪微博贵别别诲服务架构
XiaoJun Hong
?
狈辞蝉辩濒叁步曲
84zhu
?
美团技术团队 - KVM性能优化
美团点评技术团队
?

Viewers also liked (12)

PPT
Smart Approach To Smart Learning 4 Coft
yangkwa
?
PPTX
Mempersiapkan presentasi
Muzammil Handoyo
?
PDF
Autonome voertuigen
willalexanderpeno
?
PDF
Santos no mundo
alvaromrbass
?
PDF
如何使用工具提高笔贬笔项目的生产力
Scourgen Hong
?
PDF
大象也会跳舞 - 使用Symfony2快速开发网站应用
Scourgen Hong
?
PPTX
虎扑网架构升级之路
Scourgen Hong
?
PDF
Intuitive Appeal of Learning Styles
Luis Pinto
?
PDF
Belieforama - A panoramic approach on issues of religion and belief.
Luis Pinto
?
PPT
笔丑辫重装上阵
Scourgen Hong
?
PPTX
Why Start A Home Base Travel Business?
D Kaye Arori
?
PDF
A Zinneke Approach to Curriculum Development
Luis Pinto
?
Smart Approach To Smart Learning 4 Coft
yangkwa
?
Mempersiapkan presentasi
Muzammil Handoyo
?
Autonome voertuigen
willalexanderpeno
?
Santos no mundo
alvaromrbass
?
如何使用工具提高笔贬笔项目的生产力
Scourgen Hong
?
大象也会跳舞 - 使用Symfony2快速开发网站应用
Scourgen Hong
?
虎扑网架构升级之路
Scourgen Hong
?
Intuitive Appeal of Learning Styles
Luis Pinto
?
Belieforama - A panoramic approach on issues of religion and belief.
Luis Pinto
?
笔丑辫重装上阵
Scourgen Hong
?
Why Start A Home Base Travel Business?
D Kaye Arori
?
A Zinneke Approach to Curriculum Development
Luis Pinto
?
Ad

Similar to 从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰 (20)

PDF
美丽说的架构发展与变迁 New
翀 刘
?
PDF
张松国 腾讯微博架构介绍08
drewz lin
?
DOC
最全面的门户网站架构设计方案
爽 李
?
PPT
大规模网站架构
drewz lin
?
PDF
胡涛:颁诲苍支撑平台构建实践分享
Enlight Chen
?
KEY
新浪微博平台与安全架构
n716
?
PDF
础箩补虫设计技术
yiditushe
?
PDF
优酷 Web网站架构案例分析
George Ang
?
PDF
Youku arch qcon2009_beijing
drewz lin
?
PDF
Key value store
xuanhan863
?
PDF
微信之道201204
shaomeng shi
?
PDF
微信201204
drewz lin
?
PPT
腾讯大讲堂08 可扩展web架构探讨
George Ang
?
PDF
Douban qcon2009 beijing
drewz lin
?
PPT
腾讯大讲堂08 可扩展web架构探讨
topgeek
?
PPT
腾讯大讲堂08 可扩展web架构探讨
areyouok
?
PDF
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
?
PDF
高性能尝础惭笔程序设计
fuchaoqun
?
PDF
Top100summit 夏彦刚-视频cdn系统建设关键要点探讨
drewz lin
?
PPT
AppEx 云加速
txpeng
?
美丽说的架构发展与变迁 New
翀 刘
?
张松国 腾讯微博架构介绍08
drewz lin
?
最全面的门户网站架构设计方案
爽 李
?
大规模网站架构
drewz lin
?
胡涛:颁诲苍支撑平台构建实践分享
Enlight Chen
?
新浪微博平台与安全架构
n716
?
础箩补虫设计技术
yiditushe
?
优酷 Web网站架构案例分析
George Ang
?
Youku arch qcon2009_beijing
drewz lin
?
Key value store
xuanhan863
?
微信之道201204
shaomeng shi
?
微信201204
drewz lin
?
腾讯大讲堂08 可扩展web架构探讨
George Ang
?
Douban qcon2009 beijing
drewz lin
?
腾讯大讲堂08 可扩展web架构探讨
topgeek
?
腾讯大讲堂08 可扩展web架构探讨
areyouok
?
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
?
高性能尝础惭笔程序设计
fuchaoqun
?
Top100summit 夏彦刚-视频cdn系统建设关键要点探讨
drewz lin
?
AppEx 云加速
txpeng
?
Ad

从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰

Editor's Notes

  • #5: 1. 通过两个体育领域的例子,解释流量高峰产生的原因 2. 中小型网站 3. 虎扑网用到或我以前工作经验 4. 一些经验
  • #6: 1. 介绍林书豪,早期不被看好,纽约尼克斯, 2 月初爆发,媒体:超过姚明、最有可能接近篮球之神乔丹的人 2. 无准备,突然爆发,流量增长 50% 以上,宕机
  • #8: 1.nba 季后赛,东西各 8 支球队,打近百场比赛 2. 比赛场次多,持续时间久,比赛悬念大,预测高峰困难
  • #16: 总结在后一页
  • #22: 加字段,先加字段,后升级 删字段,先升级,后删字段
  • #24: 解决办法 2 :虎扑目前的 passport 和支付都是独立的
  • #36: 4. 举例:有 10000 个页面,透传频率为 10 秒一次,那每秒的 rps 则平均为 1000
  • #37: 注意: 微缓存并不是静态化的替代品,也不能完全代替 Memcache 缓存
  • #47: 1. 实现方式是建索引并且取交集, O ( N*M )
  • #53: 例子,看电影