童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

成人网站性能提升20倍之经验谈

12月12日 孤行者投稿
  摘要:色情业是个大行业。互联网上没有多少网站的流量能和最大的色情网站相匹敌。要搞定这巨大的流量很难。更困难的是,在色情网站上提供的很多内容都是低延迟的实时流媒体而不是简单的静态视频。但是对于所有碰到过的挑战
  色情业是个大行业。互联网上没有多少网站的流量能和最大的色情网站相匹敌。要搞定这巨大的流量很难。更困难的是,在色情网站上提供的很多内容都是低延迟的实时流媒体而不是简单的静态视频。但是对于所有碰到过的挑战,我很少看到有搞定过它们的开发人员写的东西。所以我决定把自己在这方面的经验写出来。
  
  问题是什么?
  几年前,我正在为当时全世界访问量排名26的网站工作这里不是说的色情网站排名,而是全世界排名。
  当时,该网站通过RTMP(RealTimeMessagingprotocol)协议响应对色情流媒体的请求。更具体地说,它使用了Adobe的FMS(FlashMediaServer)技术为用户提供实时流媒体。基本过程是这样的:
  用户请求访问某个实时流媒体
  服务器通过一个RTMPsession响应,播放请求的视频片段
  因为某些原因,FMS对我们并不是一个好的选择,首先是它的成本,包括了购买以下两者:
  为每一台运行FMS的服务器购买Windows的版权
  大约4000美元一个的FMS特定版权,由于我们的规模,我们必须购买的版权量数以百计,而且每天都在增加。
  所有这些费用开始不断累积。撇开成本不提,FMS也是一个比较挫的产品,特别是在它的功能方面(我过一会再详细说这个问题)。所以我决定抛弃FMS,自己从头开始写一个自己的RTMP解析器。
  最后,我终于把我们的服务效率提升了大约20倍。
  开始
  这里涉及到两个核心问题:首先,RTMP和其他的Adobe协议及格式都不是开放的,这就很难使用它们。要是对文件格式都一无所知,你如何能对它进行反向工程或者解析它呢?幸运的是,有一些反向工程的尝试已经在公开领域出现了(并不是Adobe出品的,而是osflash。org,它破解了一些协议),我们的工作就是基于这些成果。
  注:Adobe后来发布了所谓的“规格说明书”,比起在非Adobe提供的反向工程wiki和文档中披露的内容,这个说明书里也没有啥新东西。他们给的规格说明书的质量之低劣达到了荒谬的境地,近乎不可能通过该说明书来使用它们的库。而且,协议本身看起来常常也是有意做成具有误导性的。例如:
  他们使用29字节的整形数。
  他们在协议头上所有地方都采用低地址存放最高有效字节(bigendian)的格式,除了在某一个字段(而且未标明)上采用低地址存放最低有效字节(littleendian)的格式。
  他们在传输9K的视频时,不惜耗费计算能力去压缩数据减少空间,这基本上是没意义的,因为他们这么折腾一次也就是减少几位或几个字节,对这样的一个文件大小可以忽略不计了。
  还有,RTMP是高度以session为导向的,这使得它基本上不可能对流进行组播。理想状态下,如果多个用户要求观看同一个实时视频流,我们可以直接向他们传回指向单个session的指针,在该session里传输这个视频流(这就是组播的概念)。但是用RTMP的话,我们必须为每一个要求访问特定流的用户创建全新的一个实例。这是完全的浪费。
  
  我的解决办法
  想到了这些,我决定把典型的响应流重新打包和解析为FLV“标签”(这里的“标签”指某个视频、音频或者元数据)。这些FLV标签可以在RTMP下顺利地传输。
  这样一个方法的好处是:
  我们只需要给流重新打包一次(重新打包是一个噩梦,因为缺少规格说明,还有前面说到的恶心协议)。
  通过套用一个FLV头,我们可以在客户端之间顺畅地重用任何流,而用内部的FLV标签指针(配以某种声明其在流内部确切位置的位移值)就可以访问到真正的内容。
  我一开始用我当时最熟悉的C语言进行开发。一段时间后,这个选择变得麻烦了,所以我开始学习Python并移植我的C代码。开发过程加快了,但在做了一些演示版本后,我很快遇到了资源枯竭的问题。Python的socket处理并不适合处理这些类型的情况,具体说,我们发现在自己的Python代码里,每个action都进行了多次系统调用和context切换,这增加了巨大的系统开销。
  改进性能:混合使用Python和C
  在对代码进行梳理之后,我选择将性能最关键的函数移植到内部完全用C语言编写的一个Python模块中。这基本是底层的东西,具体地说,它利用了内核的epoll机制提供了一个O(logn)的算法复杂度。
  在异步socket编程方面,有一些机制可以提供有关特定socket是否可读可写出错之类的信息。过去,开发人员们可以用select()系统调用获取这些信息,但很难大规模使用。Poll()是更好的选择,但它仍然不够好,因为你每次调用的时候都要传递一大堆socket描述符。
  Epoll的神奇之处在于你只需要登记一个socket,系统会记住这个特定的socket并处理所有内部的杂乱的细节。这样在每次调用的时候就没有传递参数的开销了。而且它适用的规模也大有可观,它只返回你关心的那些socket,相比用其他技术时必须从10万个socket描述符列表里挨个检查是否有带字节掩码的事件,其优越性真是非同小可啊。
  不过,为了性能的提高,我们也付出了代价:这个方法采用了完全和以前不同的设计模式。该网站以前的方法是(如果我没记错的话)单个原始进程,在接收和发送时会阻塞。我开发的是一套事件驱动方案,所以为了适应这个新模型,我必须重构其他的代码。
  具体地说,在新方法中,我们有一个主循环,它按如下方式处理接收和发送:
  接收到的数据(作为消息)被传递到RTMP层
  RTMP包被解析,从中提取出FLV标签
  FLV数据被传输到缓存和组播层,在该层对流进行组织并填充到底层传输缓存中
  发送程序为每个客户端保存一个结构,包含了最后一次发送的索引,并尽可能多地向客户端传送数据
  这是一个滚动的数据窗口,并包含了某些试探性算法,当客户端速度太慢无法接收时会丢弃一些帧。总体来说运行的很好。
  
  系统层级,架构和硬件问题
  但是我们又遇到另外一个问题:内核的context切换成为了一个负担。结果,我们选择每100毫秒发送一次而不是实时发送。这样可以把小的数据包汇总起来,也避免了context切换的爆炸式出现。
  也许更大的一个问题在于服务器架构方面:我们需要一个具备负载均衡和容错能力的服务器集群,毕竟因为服务器功能异常而失去用户不是件好玩的事情。一开始,我们采用了专职总管服务器的方法,它指定一个”总管“负责通过预测需求来产生和消除播放流。这个方法华丽丽地失败了。实际上,我们尝试过的每个方法都相当明显地失败了。最后,我们采用了一个相对暴力的方法,在集群的各个节点之间随机地共享播放的流,使流量基本平衡了。
  这个方法是有效的,但是也有一些不足:虽然一般情况下它处理的很好,我们也碰到了当所有网站用户(或者相当大比例的用户)观看单个广播流的时候,性能会变得非常糟糕。好消息是,除了一次市场宣传活动(marketingcampaign)之外,这种情况再也没出现过。我们部署了另外一套单独的集群来处理这种情况,但真实的情况是我们先分析了一番,觉得为了一次市场活动而牺牲付费用户的体验是说不过去的,实际上,这个案例也不是一个真实的事件(虽然说能处理所有想象得到的情况也是很好的)。
  
  结论
  这里有最后结果的一些统计数字:每天在集群里的流量在峰值时是大约10万用户(60负载),平均是5万。我管理了2个集群(匈牙利和美国),每个里有大约40台服务器共同承担这个负载。这些集群的总带宽大约是50Gbps,在负载达到峰值时大约使用了10Gbps。最后,我努力做到了让每台服务器轻松地能提供10Gbps带宽,也就等于一台服务器可以承受30万用户同时观看视频流。
  已有的FMS集群包含了超过200台服务器,我只需要15台就可以取代他们,而且其中只有10台在真正提供服务。这就等于200除以10,等于20倍的性能提高。大概我在这个项目里最大的收获就是我不应让自己受阻于学习新技能的困难。具体说来,Python、转码、面向对象编程,这些都是我在做这个项目之前缺少专业经验的概念。
  这个信念,以及实现你自己的方案的信心,会给你带来很大的回报。
  【1】后来,当我们把新代码投入生产,我们又遇到了硬件问题,因为我们使用老的sr2500Intel架构服务器,由于它们的PCI总线带宽太低,不能支持10Gbit的以太网卡。没辙,我们只好把它们用在141Gbit的以太网池中(把多个网卡的性能汇总为一个虚拟网卡)。最终,我们获得了一些更新的sr2600i7Intel架构服务器,它们通过光纤达到了无性能损耗的10Gbps带宽。所有上述汇总的结果都是基于这样的硬件条件来计算的。
投诉 评论

新京城五少成员名单都有谁?新京城五少是什么梗新京城五少人物设导读:继“京城四瘫”之后,“新京城五少”也新鲜出炉。新京城五少成员名单都有谁?新京城五少是什么梗新京城五少人物设定出炉“新京城五少”分别是大张伟、鹿晗、张一山、白敬亭、易……找你妹:找出背后的“女神”〔核心提示〕“找你妹”从默默无闻的大家来找茬蜕变为风靡一时的手机游戏的奥秘。周末了无赖可以去找找“找你妹”背后的东西。找你妹于2012年8月26日上线,经历近八……都错了!阿里要用新浪微博的数据干这个文i黑马作者王方自4月29日阿里入股新浪以来,外界开始揣摩马云花5。86亿美元要去干什么,一边倒的观点认为,马云是看中了新浪微博的数据。没错,笔者也这么认为,但最关……互联网圈那些数不尽的”抄袭门”既“你上市,我揭短”之后,互联网圈内公司又以“趁你病,要你命”向我们展示出了商业竞争的惨烈性只有你死我活,根本没有你好我好大家好。相信大家应该反应过来了,小内说的是最近唯……微信O2O:一个即将破裂的泡沫?微信的出现给所有的营销者、自媒体从业者、IT从业者带来无尽的想象。但凡谈及移动互联网必谈微信。几乎所有对微信有稍许了解的人都开始越俎代庖地替微信操心起商业化模式,无外乎自媒体分……百度前市场总监创业反思:我为何又回来,要把奢侈品打到白菜价毕胜又回来了,这位曾经历任百度市场总监、总裁助理;2008年创办垂直电商乐淘网,曾获得雷军、老虎基金等青睐,融资数千万美元;正是他抛出“垂直电商骗局论”,业界为之哗然,然而乐淘……马云“退休”演讲全文:相信年轻人就是相信未来在5月10日的淘宝十周年晚会上,马云正式卸下当了14年的阿里巴巴集团CEO职位。“我期待这一天很多年了,”马云说,“相信年轻人会比我们做得更好。”马云表示,这是一个变化的……成人网站性能提升20倍之经验谈摘要:色情业是个大行业。互联网上没有多少网站的流量能和最大的色情网站相匹敌。要搞定这巨大的流量很难。更困难的是,在色情网站上提供的很多内容都是低延迟的实时流媒体而不是简单的静态……【人人早报】411期:库克成最高性价比CEO早报导语作为全球最大市值企业的CEO,库克的薪酬也是高得吓人。库克2014年总薪酬6520万美元,在全美所有CEO中排名第17位,而过去三年苹果平均每年的利润为2860亿……传统企业转型“互联网”,先学会这三道减法自今年3月人大会上李克强总理在政府工作报告提出制定“互联网”行动计划后,“互联网”概念一夜之间火爆全国。做O2O项目的互联网创业者无不欢喜鼓舞,对这些创业者而言,O2O就是“互……抓虾还是抓“瞎”?阿里整合虾米前途未卜新闻背景4个月前,阿里巴巴集团在杭州宣布,现有业务架构和组织将进行相应调整,成立25个事业部,其中包括音乐事业部。近期,阿里巴巴对虾米的整合提速。阿里借助虾米进军音乐领域……从6到1,人脉理论的颠覆Glen最近在了解有关互联网历程的东西,得到的答案莫不是:互联网颠覆社会、颠覆时代、颠覆思想。我们站在时代变换的风口上,很多传统的思想变了,我们能感受到,却说不出。今天早……
抖音电商DBeauty心动日,助力多品牌美妆心动不止一夏在抖音,用户对美妆产品消费心智日益成熟,相伴而来的是用户消费需求的与日俱增和选择标准的不断提升,这也意味着选购高品质的美妆品牌将成为美妆行业的重要消费趋势。这一趋势对于抖音电商……华为P50秒杀价3899全系鸿蒙OS3。0支持5G华为已经开始首批的鸿蒙OS3。0的推送,现在华为P50和Mate40等系列已经收到了鸿蒙OS3。0的推送,首批的用户使用感受还是不错的。现在已经基本升级完鸿蒙OS3。0系统了,……华为Mate40重新上架立减3000麒麟5G芯片还有库存现在有一批华为Mate40Pro5G已经重新上架,产业链也有消息称华为的麒麟9000系列芯片依然还有库存。华为Mate40Pro5G前不久该机的售价已经炒到了8000多元……曝华为P60年底发布:有5G版屏下摄像头9月7日华为Mate50系列即将发布,而华为并非在下半年只有这一款旗舰,华为P60曝出将在年底发布,目前的发布时间、专利图都曝光了,基本外观和参数的消息也相继传来称华为P……三星GalaxyA235G发布搭载骁龙695处理器据外媒报道,三星近日发布了GalaxyA235G智能手机。据悉,这款手机搭载高通骁龙685处理器,但暂未公布售价。GalaxyA235G采用6。6英寸InfinityVI……【手慢无】华为5G手机低至999,亏钱卖只为销量华为智选麦芒9正在京东热销,当前秒杀价1018元,参加满1018元减19元的活动,最终到手价仅999元。华为麦芒9是一部5G手机,搭载的是联发科天玑800处理器,日常使用……中国联通:上半年净利润同比增长195G套餐渗透率达到588月8日消息,中国联通发布公告称,2022年上半年,公司实现主营业务收入人民币1610亿元,同比上升8。3,实现净利润47。86亿元,同比增长18。7;每10股拟派发现金股利0……5G网络只有4G速度?一加领先友商新机提供超级n28信号5G今天晚上一加举行新品发布会,带来了超级新机OnePlusAcePro,其超高的性价比引来诸多网友的围观,从大家的评论来看,想要买的不少。一加AcePro卖点有很多,不过对……海信阅读手机A7体验再升级5G护眼畅读一夏夏日热浪来袭,与其吹着空调消磨无聊的时光,不如手捧一本好“书”,尽情享受阅读的乐趣。海信5G阅读手机A7创造性的将墨水屏与5G相结合,不仅能护眼畅读,还能满足用户对海量阅读资源……华为Mate50系列入网:共三款均不支持5G据此前消息,华为Mate50系列目前已经准备就绪,将会在9月份正式发布,届时会与iPhone14系列同台竞技。现在,工信部公布的信息佐证了这个传闻。目前华为Mate……4路接收n285G信号一加AcePro网速提升一倍一加AcePro通过4根高性能天线,实现同时4路接收n285G信号,带来超级n28,比普通的n285G网速提升至2倍,网络接收范围提升至1。96倍,信号抗干扰能力提升2倍。……联通董事长称5G费不可能大幅下降:建网、运营成本是刚性增长别再等5G降价了!如今5G已经开放了需求,很大一部分用户都已经用上了5G,但是评价却不怎么好。其中包括体验不明显、耗电增加、资费太贵等等。这也导致一大批没有升……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界