SlideShare una empresa de Scribd logo
1 de 44
虎扑网架构升级之路 虎扑网技术部研发经理:洪涛 2011-9
大家好,我是:洪涛(Scourgen Hung)我来自:虎扑网(hoopCHINA.com)
Agenda ,[object Object],虎扑网架构演变过程 2004-2011 2011-将来 介绍两个适用于互联网开发领域的关键技术 企业级应用快速开发框架-Symfony 消息队列系统-RabbitMQ
体育是感性的
2004年的虎扑
2011年的虎扑
来自第三方的统计
体育 虎扑网网站群
虎扑网架构升级之路:2004 Web
虎扑网架构升级之路:2005 Web+DB
虎扑网架构升级之路:2006 Web DB
虎扑网架构升级之路:2007 Web × 3 NFS LVS双线 NAT模式 DB
虎扑网架构升级之路:2008 Web × 4 Web × 3 NFS LVS双线 DR模式 LVSDR模式 DB Master×1 DB Slave×3
2004-2008经验总结 主要问题: 应用数量变多,逻辑变复杂 应用间频繁互相调用 部署过程复杂 主要解决办法: 数据库读写分离 用LVS进行内部和外部的流量负载均衡(从NAT升级为DR) 服务器安装双网卡,服务器见实现千兆互联 使用文件服务器集中管理程序源码,应用服务器远程挂载执行
虎扑网架构升级之路:2009-分应用 Web ×8 Web ×8 NFS × 2双机房× 15个应用 LVS双线 DR模式 LVS DB Master×1 DB Slave×7 DB × 3
虎扑网架构升级之路:2010 CDN × ?T  Web×10 Web×10 NFS × 2 File×1 × 3机房× 30个应用 LVS双线 DR模式 LVS DB Master×1 Memcached × 10 DB Slave×7 TTServer × 3 DB × 10 Redis × 5
2009-2010经验总结 主要问题: 难以应对突发流量 应用数量成倍增加,计算需求增长迅速 业务逻辑不断更新 主要解决办法: 部署CDN,分摊流量,提高访问速度 运用多种缓存技术: APC/FileCache/Memcached⋯⋯ 多种NoSQL相结合: Memcached/TTServer/Redis 用大量廉价服务器支撑中小型应用 部署双子星服务器 为应用拆分独立环境,应用和服务之间用API进行远程调用
虎扑网架构升级之路:2011 CDN  Web×30 Web×20 NFS×3 File×5 4机房80个应用 LVS双线 DR模式 LVS DB Master×1 Memcached × 40 RabbitMQ × 1 DB Slave×7 TTServer × 20 DB × 20 Redis × 10
虎扑网架构升级之路:2011-Future 自建CDN Web×30 Web×20 NFS×3 机房硬件VPN加速 SAN 6个机房,分布式应用50个应用 硬件L4 硬件L4 DB Master×1 Memcached × 40 RabbitMQ × 2 DB Slave×7 TTServer × 20 DB × 20 Redis  × 10
2010-2011经验总结 CDN 数据量不大的时候效果明显 数据量大的时候费用持续增加,目前正在考虑自己实现 机房间数据传输 一些VPN设备有带宽加速功能,效果很不错 负载均衡 LVS在特定应用上表现很不错,但硬件L4更灵活、高效 NoSQL 针对各自特点应用在不同场景上才能获得最佳效果 MySQL xtraDB很好很强大 Master/Slave,冷热数据分离是增加数据库性能的最实用手段
故事告一段落,让我们回到软件架构
互联网产品/项目发展的三个阶段 种子孵化阶段: 概念验证(POC) 原型 早期阶段: 抢占市场 调整业务逻辑 优化用户体验 发展阶段: 高可用 平滑升级 性能 重构
在不同阶段中,技术架构所遇到的挑战 种子孵化阶段 用最短时间生成可用的程序 早期阶段: 根据市场反馈及需求变更迅速调整业务逻辑 发展阶段: 保持系统运行稳定 可扩展性强,能够支撑应用的不断升级需求 提高系统整体性能 NonStop
所以,在不同阶段对架构的需求可以总结为
虎扑如何解决上述问题? 企业级开发框架 Symfony 轻量级SOA框架-消息队列系统 RabbitMQ
Symfony的特性、优缺点 特性: MVC ORM Propel / Doctrine Filter / Form Scaffolding(脚手架) Unit Test Debug Tool ⋯⋯ ⋯⋯ 优点: 大量的文档支持 大量插件支持 版本更新迅速 社区活跃 Don‘t Repeat Yourself 缺点: 相对其他PHP框架较为复杂 国内开发者不熟悉,案例少 学习曲线比较陡
使用Symfony作为框架的应用 Yahoo Bookmarks:2000万用户 poppen.de:200万用户(截止2010年4月) phpBB4:使用Symfony2进行开发 SourceForce.jp:使用Symfony开发wiki系统 TED.com:使用Symfony开发 虎扑: 虎扑手机版(m.hoopchina.com) 虎扑游戏中心 虎扑约战 虎扑短评论 虎扑管理中心 亮乐(liangle.com) } ALL powered by 10个人月!
《基于Symfony框架下的快速企业级应用开发》 时间: 明天下午 1点30到2点30 地点: 专场7 人物: 还是我
消息队列在虎扑中的应用 先谈一下业务逻辑处理模型 什么是业务逻辑处理模型? 设计模式 代码设计方法的精炼和抽象。 业务逻辑处理模型 业务架构设计方法的精炼和抽象。
业务逻辑处理模型 理想中的业务逻辑处理模型的特性 高性能 满足处理日益增加的数据的能力 持久性 业务逻辑不因任何原因被中断 异步处理能力 业务逻辑与用户操作的解耦
同步和异步处理业务逻辑时的差异 业务逻辑A 业务逻辑A 用户 业务逻辑B 用户 业务逻辑B 业务逻辑C 业务逻辑C
举例:某图片上传服务
示意图:图片上传逻辑的执行流程 1.压缩用户上传的图片至合适大小 2.生成图片缩略图 用户上传图片 3.通知用户的好友 4.发送碎碎念 5.人脸识别,自动添加为好友
消息队列应用场景 任务数量大 群发邮件 逻辑复杂,处理速度慢 图像/视频处理 牵涉到大数据量的数据库操作 需要很高的可靠性 发送短信通知 充值 分布式架构 分布式数据传输
虎扑网在众多消息队列框架中的选择 1.高稳定性 基于Erlang语言开发,Erlang是工业级语言,多用在电信,银行领域 2.高性能 “像几百挺机关枪同时向你扫射,你还要屹立不倒。”—iteye网友评论 3.支持多种语言      C/C++,C#,Java,PHP,Python,Erlang,Ruby⋯⋯ Intel I7 CPU测试环境中,单机IO综合处理能力就能够达到30k MPS
虎扑网已经部署RabbitMQ至生产环境
虎扑网已经部署在消息队列上的几个关键应用 发送碎碎念 降低页面延迟,优化用户体验 发送手机短消息 防止在与SP进行数据交互时产生延迟导致页面加载过慢 Google Analytics,向Google服务器发送统计信息 防止在传统GA统计方式中,用户在客户端直接请求Google服务器被墙的问题
消息队列化所带来的额外的收益 某应用压力曲线图 升级前:平均压力0.6峰值达到2.7 某应用压力曲线图 升级后:平均压力0.6无明显峰值
消息队列化所带来的额外的收益-减少峰值效应 降低硬件成本 性能需求从满足峰值降低到满足平均值 系统运维难度降低 系统负载变得平缓 更加合理利用资源 将一部分业务放在空闲时段处理 将闲置的计算资源充分利用起来
虎扑网在消息队列化中的实践-监控进程的介绍 消费者线程 监控进程 消费者线程 生产者 RabbitMQ 消费者线程 RabbitMQ RabbitMQ 消费者线程 消费者线程
在消息队列架构中部署动态监控进程的好处 增强业务逻辑处理能力 根据消息的数量增加动态增加消费线程 减少资源占用 根据消息的数量减少动态减少消费线程 方便监控/报警 控制关键业务处理能力
虎扑在开源领域的实践 Memcached : getOrLock:防止雪崩 PHP hcStrReplacement.so:快速替换关键字,比str_replace快300倍
还有问题? Mail 公司:hongtao@hoopchina.com 个人:scourgen@gmail.com QQ 2468630 MSN scourgen@hotmail.com 新浪微博 @虎扑网洪涛 Twitter @scourgen
谢谢

Más contenido relacionado

Similar a 虎扑网架构升级之路

淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
雲端運算於教育的應用
雲端運算於教育的應用雲端運算於教育的應用
雲端運算於教育的應用林 耀珍
 
Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)Sting Chen
 
雲程工作室及 Hoyo 簡介
雲程工作室及 Hoyo 簡介雲程工作室及 Hoyo 簡介
雲程工作室及 Hoyo 簡介志賢 黃
 
浅谈灰度发布在贴吧的应用 支付宝 20130909
浅谈灰度发布在贴吧的应用 支付宝 20130909浅谈灰度发布在贴吧的应用 支付宝 20130909
浅谈灰度发布在贴吧的应用 支付宝 20130909liqiang xu
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
Oracle 数据库服务经验谈
Oracle 数据库服务经验谈Oracle 数据库服务经验谈
Oracle 数据库服务经验谈mysqlops
 
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳yalle
 
面試面試面試,因為很重要所以要說三次!
面試面試面試,因為很重要所以要說三次!面試面試面試,因為很重要所以要說三次!
面試面試面試,因為很重要所以要說三次!Chih-Hsuan Kuo
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江imShining @DevCamp
 
Practicing MLOps in hybrid multiclouds
Practicing MLOps in hybrid multicloudsPracticing MLOps in hybrid multiclouds
Practicing MLOps in hybrid multicloudsJonathan Chen
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介areyouok
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
Proud Plone on Cloud
Proud Plone on CloudProud Plone on Cloud
Proud Plone on CloudTsungWei Hu
 
200701011
200701011200701011
2007010115045033
 
前端样式开发演变之路
前端样式开发演变之路前端样式开发演变之路
前端样式开发演变之路Zhao Lei
 
Cncf k8s Ingress Example-02
Cncf k8s Ingress Example-02Cncf k8s Ingress Example-02
Cncf k8s Ingress Example-02Erhwen Kuo
 
Testing in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysTesting in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysYi-Feng Tzeng
 

Similar a 虎扑网架构升级之路 (20)

淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
雲端運算於教育的應用
雲端運算於教育的應用雲端運算於教育的應用
雲端運算於教育的應用
 
Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)Mochimedia's Success Story - Case Study I (Python-based Company)
Mochimedia's Success Story - Case Study I (Python-based Company)
 
雲程工作室及 Hoyo 簡介
雲程工作室及 Hoyo 簡介雲程工作室及 Hoyo 簡介
雲程工作室及 Hoyo 簡介
 
浅谈灰度发布在贴吧的应用 支付宝 20130909
浅谈灰度发布在贴吧的应用 支付宝 20130909浅谈灰度发布在贴吧的应用 支付宝 20130909
浅谈灰度发布在贴吧的应用 支付宝 20130909
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
Oracle 数据库服务经验谈
Oracle 数据库服务经验谈Oracle 数据库服务经验谈
Oracle 数据库服务经验谈
 
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳云起龙骧系列课程(4) - Live Services开发实战_黄继佳
云起龙骧系列课程(4) - Live Services开发实战_黄继佳
 
面試面試面試,因為很重要所以要說三次!
面試面試面試,因為很重要所以要說三次!面試面試面試,因為很重要所以要說三次!
面試面試面試,因為很重要所以要說三次!
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
Practicing MLOps in hybrid multiclouds
Practicing MLOps in hybrid multicloudsPracticing MLOps in hybrid multiclouds
Practicing MLOps in hybrid multiclouds
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介腾讯大讲堂58 拍拍app platform中间件解决方案简介
腾讯大讲堂58 拍拍app platform中间件解决方案简介
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
Proud Plone on Cloud
Proud Plone on CloudProud Plone on Cloud
Proud Plone on Cloud
 
200701011
200701011200701011
200701011
 
前端样式开发演变之路
前端样式开发演变之路前端样式开发演变之路
前端样式开发演变之路
 
Cncf k8s Ingress Example-02
Cncf k8s Ingress Example-02Cncf k8s Ingress Example-02
Cncf k8s Ingress Example-02
 
Testing in Production, Deploy on Fridays
Testing in Production, Deploy on FridaysTesting in Production, Deploy on Fridays
Testing in Production, Deploy on Fridays
 

虎扑网架构升级之路

Notas del editor

  1. 两个部分第一部分:架构升级第二部分:两个
  2. 乔丹:飞人AC米兰:07欧冠夺冠感觉到了什么?热情,力量,激动人心,牛逼,-》总结:快乐大学篮球场一角:年轻的大学生们通过篮球磨练自己的斗志,锻炼自己的体格,在团队合作中亲身实践那些书本中学不到的知识。通过体育锻炼,让这些稚嫩的学生们在走出学校面对这个操蛋的社会时有着坚强的勇气和力量体育,更重要的是可以让人感受到快乐而让更多的人感受体育带来的快乐,正是虎扑网的创始人在04年创立网站时的一个小小的心愿,这个目标一直陪伴着我们走到今天…看看04年的虎扑网…
  3. 1图:第一而虎扑网并没有在获得流量排名第一的同时就停止增长2图:根据同样是出自AlexaCN的体育类覆盖数走势图来看,虎扑网依然保持着一个告诉的增长在互联网行业竞争激烈的今天,作为一个独立体育门户网站的虎扑网在大型门户网站林立的今天取得这样的成就是很让人自豪的
  4. 5个网站……形成了以体育为核心,向各个领域辐射发展的虎扑网站群通过这些介绍,可以帮助各位理解虎扑是做什么的,虎扑的业务模型,用户定位等等,这些信息能够更好的让大家理解本次分享的主题,也就是虎扑网的架构,
  5. 虎扑网是从2004年开始建立的,第一台服务器还是合租的,所有文章以及页面都由虎扑网CEO兼创始人陈杭先生一手包办。陈杭当时在芝加哥念博士,能够第一手接触国外最新的新闻以及流言,加上他文字功底了得,所以虽然网站界面巨土但是内容却是一流的。他毕竟不是程序员,当时的网站也就是通过在DW里拖拖DIV建立起来的。
  6. 应用:增加了论坛,使用phpwind,修修改改,不断优化直到今天.(有计划使用discuz或自行开发一个新的论坛)
  7. 应用:增加CMS和文字直播架构:web和db分离PHP4+MySQL 4.1.22(32bit)+Redhat AS3+Apache 2.0问题:数据库支撑不了论坛
  8. 应用:没有增加架构:web服务器数量增加,同时使用NFS作为程序部署管理方案双线LVS的NAT模式进行的流量分流MySQL硬件升级,内存8g,硬盘raid0 SCSI问题:LVS网卡带宽限制,单台apache并发最高500,DB表锁功能没有增加,但是访问量大大增加“今天有火箭比赛,别去HC了”
  9. 应用:增加独立服务器支撑独立应用架构:LVS改成DR模式(解释),同时应用在数据库的流量分流上内网千兆互联MySQL实现读写分离
  10. 应用:继续变多架构:数据开始进行拆分,以纵向拆分为主,replication继续扩展,web:db=1:1将独立应用部署到第二个机房试验:Memcache,TTserver,CDN(自建,但效果不好)
  11. 应用架构:大量部署NoSQL应用,三种程序各有所长,memcached方案成熟的比较早,ttserver可以持久化,redis支持多种数据格式CDN经过评估后自建成本太大,选用第三方解决方案
  12. 开始了一些SOA概念的尝试,但并不理想
  13. 应用整合,部署消息队列,应用开发框架。分布式架构(一部分)
  14. 自建CDN硬件L4SAN机房间VPN加速
  15. 故事告一段落,如果有一些不明白不清楚的地方,欢迎会后与我联系,我很乐意进行解答。欲知后事如何,请和我保持联系,虎扑网的架构升级是一个进行时,我们很乐意向同行分享我们的经验,也希望从前辈中学到更多。
  16. 红杉资本三个阶段种子幅画阶段:产品还未成形,只有概念和想法,需要进行原型和概念的验证以证明其的可行性早期阶段:已经做出了产品,但在商业上还未获得成功,产品的业务逻辑和用户体验还需反复调整和优化发展阶段:商业模式和产品已经相对固定和成熟,已经有了盈利和一定的市场规模,需要进一步扩大
  17. 平滑的再各个阶段中进行调整,而不用每次升级都兴师动众,劳民伤财
  18. 但是在实际应用中,许多互联网公司都在不同阶段应用不同的架构和技术,有开源的,有商业的,有自主开发的。举例不同语言和框架:提高开发速度上:ror和django的scaffolding和成熟的orm框架以及一些代码生成工具能够帮助我们。可维护性:代码的标准化,应用的架构的耦合程度,设计模式的应用扩展/稳定:j2ee的ssh不可否认他们都各有优势,但在各个阶段的平滑升级和衔接上缺乏整体解决方案,往往遇到在度过一个阶段后,技术部门要花费大量的人月去处理下一个阶段所会面临的问题,这个过程复杂切缓慢,甚至影响到产品和项目的正常发展。
  19. ////////////////////////有一个很形象的比喻:应用升级的过程就像给飞奔的汽车换轮子,又要让业务不中断,又要让业务稳定前行.换个思路,有没有一种车子(架构)本身就支持换轮子呢?
  20. 高性能:大并发,高突发,QOS持久性:业务逻辑升级过程不中断,处理不中断,ACK,良好的灾备能力异步处理:
  21. 左:有请求有返回右:只有请求没有返回问:那么用户什么时候知道他到底成功的上传了图片没有?这其实是一个互联网开发的思路转变问题,原来直接在下一个页面显示压缩完的图片,现在多了一个loading的图标原来所有好友同一时间收到动态更新,现在好友一批一批地更新动态信息
  22. 怎么样在满足大量图片上传以及相关业务的同时保证传统的同步方式肯定是不现实的,首先性能低,无法满足页面加载速度的要求。同步处理:其次由于业务复杂,一个步骤出错或超时会影响后续程序。甚至容易被突入其来的流量压垮整个系统架构。升级过程复杂:任何需求上的改动都需要大量修改代码甚至重构
  23. 图中红色的部分就是让异步执行业务逻辑成为可能的消息队列。包括rabbitmq在内,消息队列还有很多不同的路由策略,队列属性等来支持你不同的应用,这个比较复杂,不在今天的分享范围之内
  24. 1.碎碎念是虎扑网的一种类似微薄的应用,是一个给用户发牢骚的平台。运营和运维部门反馈用户量上升后发送碎碎念的页面平均耗时变高,甚至有碎碎念无法发送成功这样的问题出现。23.运营部门反馈ga在中国很不稳定,严重影响用户体验。
  25. 在业务量繁忙的时候如何用最快的速度处理完所有请求?如果一个业务的处理速度是每秒5条,那是不是意味着1000个业务请求就需要200秒才能全部处理完?有没有办法动态的控制业务的处理速度?性能和效率达到了一个平衡
  26. 在传统缓存模型中:在缓存过期的瞬间,如果访问量非常大,在同一时刻会有成千上万的刷新缓存的请求产生,容易对服务器产生冲击业内较普遍的解决思路和理论有两种,一个是基于共享锁的,另外一个是双timeout值的办法。