SACC2011SACC2011大家好,我是:洪涛(ScourgenHung)我来自:虎扑网(hoopCHINA.com)SACC2011SACC2011Agenda•虎扑网发展历程•虎扑网架构演变过程–2004-2011–2011-将来•介绍两个适用于互联网开发领域的关键技术–企业级应用快速开发框架-Symfony–消息队列系统-RabbitMQSACC2011SACC2011体育是感性的SACC2011SACC20112004年的虎扑SACC2011SACC20112011年的虎扑SACC2011SACC2011来自第三方的统计SACC2011SACC2011虎扑网卡路里亮乐HelloF1GoalHI篮球B2C综合体育F1赛车足球体育虎扑网网站群SACC2011SACC2011虎扑网架构升级之路:2004WebSACC2011SACC2011虎扑网架构升级之路:2005Web+DBSACC2011SACC2011虎扑网架构升级之路:2006WebDBSACC2011SACC2011虎扑网架构升级之路:2007Web×3DBNFSLVS双线NAT模式SACC2011SACC2011虎扑网架构升级之路:2008Web×4NFSLVS双线DR模式DBMaster×1LVSDR模式Web×3DBSlave×3SACC2011SACC20112004-2008经验总结•主要问题:–应用数量变多,逻辑变复杂–应用间频繁互相调用–部署过程复杂•主要解决办法:–数据库读写分离–用LVS进行内部和外部的流量负载均衡(从NAT升级为DR)–服务器安装双网卡,服务器见实现千兆互联–使用文件服务器集中管理程序源码,应用服务器远程挂载执行SACC2011SACC2011虎扑网架构升级之路:2009-分应用Web×8NFSLVS双线DR模式LVSDBMaster×1×2双机房×15个应用Web×8DBSlave×7DB×3SACC2011SACC2011虎扑网架构升级之路:2010Web×10Web×10NFS×2LVS双线DR模式LVSDBMaster×1×3机房×30个应用Memcached×10TTServer×3CDN×?TFile×1DBSlave×7DB×10Redis×5SACC2011SACC20112009-2010经验总结•主要问题:–难以应对突发流量–应用数量成倍增加,计算需求增长迅速–业务逻辑不断更新•主要解决办法:–部署CDN,分摊流量,提高访问速度–运用多种缓存技术:APC/FileCache/Memcached⋯⋯–多种NoSQL相结合:•Memcached/TTServer/Redis–用大量廉价服务器支撑中小型应用–部署双子星服务器–为应用拆分独立环境,应用和服务之间用API进行远程调用SACC2011SACC2011虎扑网架构升级之路:2011Web×30NFS×3LVS双线DR模式LVSDBMaster×14机房80个应用Memcached×40TTServer×20Web×20CDNFile×5RabbitMQ×1DBSlave×7DB×20Redis×10SACC2011SACC2011虎扑网架构升级之路:2011-FutureWeb×30NFS×3硬件L4硬件L4DBMaster×16个机房,分布式应用50个应用Memcached×40TTServer×20Web×20自建CDNSANRabbitMQ×2机房硬件VPN加速DBSlave×7DB×20Redis×10SACC2011SACC20112010-2011经验总结•CDN–数据量不大的时候效果明显–数据量大的时候费用持续增加,目前正在考虑自己实现•机房间数据传输–一些VPN设备有带宽加速功能,效果很不错•负载均衡–LVS在特定应用上表现很不错,但硬件L4更灵活、高效•NoSQL–针对各自特点应用在不同场景上才能获得最佳效果•MySQL–xtraDB很好很强大–Master/Slave,冷热数据分离是增加数据库性能的最实用手段SACC2011SACC2011故事告一段落,让我们回到软件架构SACC2011SACC2011互联网产品/项目发展的三个阶段•种子孵化阶段:–概念验证(POC)–原型•早期阶段:–抢占市场–调整业务逻辑–优化用户体验•发展阶段:–高可用–平滑升级–性能–重构种子孵化阶段早期阶段发展阶段SACC2011SACC2011在不同阶段中,技术架构所遇到的挑战•种子孵化阶段–用最短时间生成可用的程序•早期阶段:–根据市场反馈及需求变更迅速调整业务逻辑•发展阶段:–保持系统运行稳定–可扩展性强,能够支撑应用的不断升级需求–提高系统整体性能SACC2011SACC2011所以,在不同阶段对架构的需求可以总结为孵化阶段开发速度早期阶段可维护性发展阶段扩展性/稳定性SACC2011SACC2011虎扑如何解决上述问题?•企业级开发框架–Symfony•轻量级SOA框架-消息队列系统–RabbitMQSACC2011SACC2011Symfony的特性、优缺点特性:•MVC•ORM–Propel/Doctrine•Filter/Form•Scaffolding(脚手架)•UnitTest•DebugTool•⋯⋯•⋯⋯优点:•大量的文档支持•大量插件支持•版本更新迅速•社区活跃•Don‘tRepeatYourself缺点:•相对其他PHP框架较为复杂•国内开发者不熟悉,案例少•学习曲线比较陡SACC2011SACC2011使用Symfony作为框架的应用•YahooBookmarks: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业务逻辑CSACC2011SACC2011举例:某图片上传服务第一版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⋯⋯IntelI7CPU测试环境中,单机IO综合处理能力就能够达到30kMPSSACC2011SACC2011虎扑网已经部署RabbitMQ至生产环境SACC2011SACC2011虎扑网已经部署在消息队列上的几个关键应用•发送碎碎念–降低页面延迟,优化用户体验•发送手机短消息–防止在与SP进行数据交互时产生延迟导致页面加载过慢•GoogleAnalytics,向Google服务器发送统计信息–防止在传统GA统计方式中,用户在客户端直接请求Google服务器被墙的问题SACC2011SACC2011消息队列化所带来的额外的收益某应用压力曲线图升级前:平均压力0.6峰值达到2.7某应用压力曲线图升级后:平均压力0.6无明显峰值SACC2011SACC2011消息队列化所带来的额外的收益-减少峰值效应•降低硬件成本–性能需求从满足峰值降低到满足平均值•系统运维难度降低–系统负载变得平缓•更加合理利用资源–将一部分业务放在空闲时段处理–将闲置的计算资源充分利用起来SACC2011SACC2011虎扑网在消息队列化中的实践-监控进程的介绍生产者RabbitMQ消费者线程消费者线程消费者线程消费者线程消费者线程监控进程RabbitMQRabbitMQSACC2011SACC2011在消息队列架构中部署动态监控进程的好处•增强业务逻辑处理能力–根据消息的数量增加动态增加消费线程•减少资源占用–根据消息的数量减少动态减少消费线程•方便监控/报警–控制关键业务处理能力SACC2011SACC2011虎扑在开源领域的实践•Memcached:–getOrLock:防止雪崩•PHP–hcStrReplacement.so:快速替换关键字,比str_replace快300倍SACC2011SACC2011谢谢SACC2011SACC2011