2013中国软件开发者大会(以下简称SDCC)于8月30-31日在北京新云南皇冠假日酒店举办。作为CSDN和《程序员》杂志倾力打造、千人规模以上的顶级技术盛会,今年SDCC 2013以“软件定义未来”为主题,来自于国内外一线的技术精英,就大数据分析与BI、架构实践、研发管理、IT基础设施与运维、产品与设计、开放平台等专题和参会者进行了深入的分享和探讨。此外,32小时编程马拉松、CTO论道论坛等量身定制的特色环节也受到了参会者的强烈关注。

31日下午的编程语言与工具专题论坛上,新浪主站架构师宋琦与大家分享和探讨了关于PHP在新浪实际中的应用情况。

在进入新浪之前,宋琦一直在做商业产品,使用的是传统的LAMP架构。而通常商业产品不涉及到很大流量,只是业务逻辑比较复杂。宋琦说当时他关注的主要是框架、扩展性、安全性方面的话题,对性能关注的较少。“之后选择做,是因为我认为对于程序员来说,产品所带来的技术挑战是一般产品无法比的。在大数据和大访问量下,任何东西都有可能成为非常棘手的问题。”宋琦说。

因为本身的一些特性,使得传统的LAMP架构,传统的框架、模板系统等在中变得不再适用,需要更加深入了解系统底层,才能应对更多挑战。

海量数据不容小觑

宋琦列了一组数据,用户数大约5.5亿,假设每个人有100条关注关系,那么总共就有550亿条用户关系,用两个long也就是16个字节来表示一个关注关系的话,那么单独保存这些关注关系就需要800G的存储空间。“以往在db里用一个map表就解决的事,放在这个场景下就变得可笑了。”宋琦说。

那么的访问量有多大呢?宋琦说,在2013年除夕当晚,蛇年第一秒共发出近35000条,第一分钟发出近73万条。这个只是上行的数据量,而下行的数据量是这个的N倍还多。由此可见,这样的数据量非常惊人。

响应速度关乎用户体验

在如此大的数据量和访问量下,对响应速度的要求非常高。有研究数据显示,如果一个页面响应速度超过3秒,那么57%的用户就会放弃;而在登录某网站时,若超过5秒,74%的用户就不会再登录;亚马逊的主页响应时间每延长1秒,每年就会减少16亿美元的销售额;而Google搜索结果每慢0.4秒,一天搜索量将减少800万次。

“总之,这些数据都说明了响应速度的重要性,可以说响应速度是保障流畅用户体验的基础。我们Team的主要KPI之一就是提升的性能。”宋琦补充道。

数据加载的优化

宋琦指出,有很多的配置文件,有几十个,这些配置每一次请求都要被加载,都要重新申请内存存放这些配置。而配置文件的修改是非常少的,那么可不可以只加载一次就可以一直使用呢?很遗憾PHP是做不到的,PHP脚本中所申请的资源在请求结束后全都会被释放。“于是我们同样使用PHP扩展来解决了它,我们创建了一个名叫Weibo_Conf的扩展,他在php-fpm启动阶段扫描指定的目录,将其下的.ini文件加载到内存中,每5分钟更新一次。这样服务器每一次接到请求时,不需要重新加载这些配置,而是直接取用,效率提升了不少。”宋琦介绍说。

除了配置外,还有一些需要常驻内存,而且不常变化的东西,但是这些的量更大一些,比如白名单/黑名单,或者切词服务的字典等。这些东西以往都是放在数据库或者MC当中,然后通过http开放接口供远程调用。“因为他们的逻辑都比较简单或者固定,不太常变化,我们将他们独立出来做成单独的C服务,用的是yar的兄弟yar-c,yar-c所做的工作就是提供一个基于C的RPC框架,帮你完成网络和进程方面的管理,让你可以专注于实现业务逻辑,同时更方便的是,通过PHP的yar扩展可以直接调用,也就是说PHP端不论是对于基于yar-c的socket RPC服务还是基于yar的http RPC服务,无需做出改变既可以通用。”宋琦说道。

缓存优化

众所周知,对于访问量巨大的服务来说,缓存是必不可少的,而是一个重度依赖缓存的应用。宋琦指出,前端展现的数据全部依赖于开放平台,开放平台提供的是基于http的RESTFul的接口,响应速度一般,所以为了提速同时降低对开放平台造成的负载,大量的使用了MC来缓存数据。“但是用MC也不是轻轻松松就能满足我们需要的。我们做个计算,假设我们每台服务器上开启128个php-fpm,总共100台服务器,如果每个请求响应时间是1秒,从请求开始就连接MC并且等到请求结束后才自动释放,那么每一台MC上至少有上万的连接,实际的量比这个还要大的多,这样MC的效率就会慢下来,同时增加了PHP处理请求的耗时,又进一步加剧了连接占用的情况,很容易造成雪崩效应。”宋琦指出。

针对此问题,宋琦展示了两种解决方案:

一种是引入一个proxy来代理对MC的访问,twitter采用的是这种方案,通过代理,php-fpm与proxy、proxy与MC之间都可以维持长连接,并且请求可以在proxy上做合并。twitter开源了他们的这个代理twemproxy。可以看到在加入twemproxy之后,MC集群的连接数大大降低了。

但是在加入了一层proxy之后,因为要通过一层twemproxy,会使得MC请求的响应变慢,于是采用了另外一个方案:增加一层缓存做成多级缓存。

首先通过会话保持,让一个用户的每一次访问都落到固定的一台机器上,然后我们在前端机的本地开启一个本地缓存,用它来挡在MC集群之前,降低对MC的访问。这层本地缓存的实际命中率大概在60%~70%左右,这些请求只需要从本地缓存中获取数据,就不需要走网络从MC集群上获取数据。

原文发布时间为:2013-09-07

本文来自云栖社区合作伙伴“Linux中国”

宋琦:PHP在微博优化中的“大显身手”相关推荐

  1. PHP在微博优化中的“大显身手”

    新浪微博宋琦:PHP在微博优化中的"大显身手" 地址http://www.csdn.net/article/2013-09-04/2816820-sina

  2. 机器学习在热门微博推荐中的应用

    作者:侯雷平.苏传捷.朱红垒 来源:人工智能头条 责编:何永灿 本文约4600字,建议阅读8分钟. 本文带大家了解机器学习在微博的热门推荐环节的运用方法. 近年来,机器学习在搜索.广告.推荐等领域取得 ...

  3. 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)

    猜你喜欢 0.[免费下载]2021年11月热门报告盘点&下载1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器 ...

  4. 【实践】强化学习在招聘推荐冷启动优化中的应用实践

    今天给大家带来58同城高级算法工程师沈冰阳所做的分享<强化学习在招聘推荐冷启动优化中的应用实践.pdf>,关注招聘推荐.强化学习.冷启动.搜索及推荐的伙伴们别错过啦!(到小程序:省时查报告 ...

  5. Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​

    今天给大家带来腾讯应用研究员郭跃超先生所做的分享<Angel深度学习在广告推荐训练优化中的实践>,Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习.深度学习.图计算以及联邦学 ...

  6. 数据分析在微博营销中的应用

    微博营销的案例有许多,微博营销的概念也有不少,但是微博营销的讨论中很少看到有说服力的证据能够说明微博营销的全貌或特点,更没有把数据分析作为 论述的手段或依据.事实上,微博平台很适合进行的数据分析,而且 ...

  7. 腾讯微博API时间线相关接口返回的微博信息中head值使用问题

    腾讯微博API时间线相关接口返回的微博信息中head值表示作者头像url,这个链接直接访问并不能使用,需要再附加一个参数指定图片的大小(100.50),比如:[head]/100.

  8. META的SEO优化中方法技巧

    Meta的SEO优化中方法技巧,Meta标签是用来描述网页属性的一种语言,标准的Meta标签可以便于搜索引擎排序,提高搜索引擎网站权重排名.要想网站做的更符合搜索引擎标准就必须了解meta标签,下面由 ...

  9. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明。

    基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明. 西北工业大学编译原理课件第八章 代码优化.p ...

最新文章

  1. 7-9 删数问题 (10 分)(思路加详解)
  2. java面试算法总结_面试10大算法汇总——Java篇
  3. 模糊的边界:内存和存储以全新方式融合
  4. Discuz! X2.5 添加风格模板
  5. 解决tomcat在idea控制台乱码
  6. python自编中值滤波器
  7. matlab与焓湿图,湿空气性质与焓湿图应用
  8. Mac系统搭建C语言开发环境
  9. 光纤跳线接口_2分钟让你搞懂跳线架和配线架的区别
  10. python空行分隔代码_python空行分隔
  11. python web py入门-7-响应处理(下)
  12. 高中数学必修5;不等式常用题型解题巧技巧(名师总结)
  13. 织物缺陷图像识别算法
  14. 走进Java Android 的线程世界(三)Hander消息机制
  15. motrix高速下载百度网盘资源的方法
  16. 2014 年最热门的国人开发开源软件 TOP 100
  17. 关于PyTorch Geometric的安装及问题解决记录
  18. ”为什么有这么多人执着于中文编程?”第二春:新评论的一并回应
  19. 在计算机中字节的英文名称是bit么,计算机中的字节是常用单位,它的英文名字是( )。A.bitB.byteC.boutD.baud - 试题答案网问答...
  20. 关于最优控制的一些总结1

热门文章

  1. HTML特殊字符过滤器
  2. Apache Spark源码走读之8 -- Spark on Yarn
  3. Android 动画之View动画效果和Activity切换动画效果
  4. 第9部分 备份与灾难恢复
  5. scala 提交任务
  6. java内连接外连接_SQL中的内连接与外连接--Java学习网
  7. Python小程序:你看?这千年难遇的雪景—简直“美到犯规” 【满屏雪花飞舞 】
  8. 想轻松入门Python编程,这10个经典案例你还不知道嘛?
  9. visual paradigm 表示选择关系_css3选择器用法介绍
  10. 为什么电气自动化学历不高只能进厂?