虎扑网架构升级之路

Knight12

贡献于2013-10-07

字数:0 关键词: 软件架构

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

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档