Akamai面临大客户危机?“自建”趋势冲击下的CDN案例

近日,国际具有强大影响力的互联网基础设施服务提供商Akamai在其季度财报会上,给投资商发出警告,提醒其未来Akamai CDN业务的两个核心客户,Apple以及Microsoft将会出现业务量下滑,并将直接影响到Akamai作为CDN服务提供商的商业情况,而据Akamai CEO Tom Leighton称,这些都是“自建”惹的祸。

QQ截图20160219141902.jpg

苹果在Maiden自建的数据中心

在季度财报会上,Tom Leighton向投资者警示这一消息,“在过去的两年时间里,Akamai有两个核心的客户——“微软”和“苹果”,大约占到Akamai整体收入的13%。尽管随着媒体趋势的发展,苹果与微软依然会是Akamai最大的客户,但其对于Akamai收入的贡献将从原先的13%下降到6%。而这其中7%的变化,主要原因来自于互联网公司的‘自建’。”

苹果的自建CDN自2013年开始使用,基于ATS及时建造自己的CDN,于2014年7月开始承载自身业务的流量,并逐步将业务流量迂回,目前Akamai服务已经确认从iTunes的项目中移除,但似乎依然在支撑其Apple Music业务。

Apple,作为一家在全球范围内拥有数个数据中心,在云计算基础设备中投入超过数十亿的公司,其公开的声明以及公司的业务发展,使其完全有理由在CDN专项领域再投资1个亿(2016年规划),而这部分资金将有可能包含现有数据中心的软件开发以及存储空间的延展,同时也将用于互联网服务提供商之间的互联协议。

苹果和微软多年来一直都是Akamai客户列表中首要的核心客户,所以一旦由于某些原因使其对于Akamai不再依赖,那么对于Akamai来说业务将会受到严重的冲击。而祸不单行的是,另一方面,Akamai已经在面临Amazon的激烈竞争。为了寻找其新的生长空间,其不得不在信息安全领域获得其稳定的发展方向。

从Akamai公布2015年第四季度与全年财报看CDN行业变化

Akamai作为内容分发网络(CDN)的全球领导者,于2月9日正式公布了截止至2015年12月31日的第四季度及全年财务业绩,这对于国内不少参考国际领先CDN运营商运营策略的从业者也是重要的参考依据。在其季度与年度财报会上,Akamai的CEO Tom Leighton也向投资商发出警告,提醒其未来Akamai CDN的核心业务,可能会由于Apple以及Microsoft通过自建将流量渐渐掌控,而影响到其业绩,但总体来说,2015年,Akamai收入稳中有升,转型安全与性能、增值服务的策略初见成功,而面对的挑战也让其必须谨慎对待。

QQ截图20160219134445.jpg

单从Akamai第四季度的收入来看,有明显上升,达到5.79亿美金,同比年增长率超过8%,每股收益均摊为0.49美金,同比下降9%,而此前分析师在第四季度预测的是5.68亿美金,每股收益0.62美金,基本超出预期。综合全年,Akamai在2015年收益达到22亿美金,同比增长12%,每股收益均摊为1.78美金,同比下降3%。

对此,Akamai的CEO Tom Leighton表示基本满意,“Akamai坚实的表现为2015年做了一个压轴的结尾,由于年末节日消费季的出现,让收益在第四季度有了稳步的增长,同时云安全服务的快速成长也成为2015年第四季度取得成绩的原因。目前Akamai的安全业务相比去年同期已经有了50%的增长,目前也已实现近3亿美金的年化运营率。”

在CDN领域具有领导者地位的Akamai目前市值预估有67亿美金,其竞争对手,包括VeriSign、Red Hat、Level3等市值均在77亿美金、109亿美金以及143亿美金。

QQ截图20160219134530.jpg

如果单独将业务拆分来看,同样在第四季度,Akamai的视频传输技术解决方案在2015年第四季度同比下滑2%,但在整个2015年依然上升7%,尽管外汇比率的变化可能是其中一个比较重要的原因,但在媒体传输解决方案上,Akamai依然需要保持一个谨慎的态度,尤其当其重要的客户Appl、Microsoft已经开始将流量逐步转移到自身的CDN中。

分析师认为,从长期来看,一些互联网公司诸如Netflix与Alphabet都希望将流量掌控在自己的网络上,这点从互联网企业2016年上浮的技术预算投入就能揣测出其意图,而Amazon入局CDN市场也同时给Akamai带来不少的挑战。当然建立内部网的成本巨大,中小型客户依然会是Akamai重要的客户来源,但是否能从中填补大客户流失带来的损失,目前尚不可知。

QQ截图20160219134604.jpg

另一方面,在面对挑战的同时,Akamai也致力于努力转型,在2015年第四季度云安全解决方案收益同比增长46%,增长至7300万美金,全年同比增长50%达到2.54亿美金。Akamai第四季度总体性能与安全解决方案收益同比上涨16%,达到2.86亿美金,全年收益增长至10.5亿美金,同比增长17%。

Akamai的服务与支持解决方案同比增长18%,至4600万美金,全年达到1.7亿美金,同比16%。

针对于竞争对手的介入以及自建的趋势,Akamai日益将精力投入到发展新业务上,Akamai通过多项增值服务,包括针对性的广告以及基于云计算的业务,逐步将增值服务的收入提高到几乎能占到总收入的50%。

QQ截图20160219134630.jpg

尽管Akamai的研究与开发成本从2014年的6%上升至6.5%,但从毛利率来看,Akamai似乎并没有受到此影响,2015年第四季度的毛利率从2014年30.4%上升至33.4%,Akamai的营销以及市场成本保持在了20.5%,行政开支略有上升,达到17.3%,去年同期为16%。

Akamai还表示,其中这部分成本支出还要包括其为了网站与媒体业务部门的重心分配进行了重要业务的组织结构调整,在2015年第四季度,这部分的开支就达到了20万美金。于是从总体结果上来看,Akamai第四季度的运营利润率从25.4%同比下降到21.2%,净利润也从18.3%下降到15.3%,相比全年,Level3、RedHat、VeriSign分别净利润均为16%,15%与57%。

综上所述,Akamai作为全球CDN业务的领头羊,其转型的策略对于全球CDN服务提供商都有极为重要的借鉴意义,尽管面对大公司逐步自建内部网的腰斩,但增值服务与安全性能方案也成功顶住Akamai的半边天,为CDN服务提供了增值空间。

与此同时,互联网服务产业的发展也为Akamai提供了业绩上升的空间,但在不断上升的市场空间中,如何与传统IDC企业的入局形成差异化的产业特征,通过提供互联网用户更直接便捷,价格明晰的产品,也是CDN行业要面临的挑战。更重要的是,在DT时代,如何把握数据,整合数据,运用数据,对于传统单单只是将流量作为分发任务的CDN服务提供商同样是一项挑战。

2016年4月26~27日“第四届2016亚太CDN峰会”将于北京召开,作为每年聚焦IDC与CDN产业,从全球范围内聚合Akamai、网宿科技、Level3、腾讯云、阿里云、华为、中兴、各大运营商等IDC/CDN行业领袖的盛会,针对于2015年整个CDN市场的变革将出现的分享,也值得众人的期待。

迎接万亿级VR市场CDN布局要趁早

要问目前最火的黑科技是什么?当然非VR(VirtualReality)莫属。自从美国VPL公司创建人拉尼尔(Jaron Lanier)在上世纪80年代初提出虚拟现实技术以来,VR总是出现在前沿、未来的生活场景或是游戏体验中,并未真正走入人们的生活。

 

且看看来自互联网、IT的各路巨头对VR技术公司的投资和收购,或是建立自己的VR技术储备,都说明2016将成为VR技术的井喷年。“可能在很多人的眼里对于VR的理解,只是一个智能硬件或者是可穿戴设备,但作为CDN业内领先者的北京快网认为,继PC移动设备、智能电视后,VR或将成为下一屏个人终端内容集合平台!”北京快网副总经理严波如是说。

 

这一点显而易见。在年初的各大展会上,VR是绝对的主角。分析公司KZero数据表明,2015年全球VR终端设备的销量呈现上升趋势,2015年VR硬件设备的收入达到14亿美金,2016年将预计成长到21亿美金,2017年将达到24亿美金。

 

VR应用前景最被看好的领域则是游戏和社交。Facebook、Google、索尼、三星、任天堂相继在VR上的投入巨资,三星还刚刚建立了自己的VR实验室。玩家手中的牌越大,产业的爆发越迅速,而所需的配套设施也会越高。

 

当普通观众惊叹VR创造的各种身临其境神奇之感时,CDN从业者们却敏锐的发现VR对流量传输的高要求。

 

“许多VR厂商已经意识到流量、带宽对于自身发展是巨大的成本和难题。从业内最近的一些动作可以看出,VR厂商与CDN厂商之间的互动愈发频繁。”严波告诉记者。他口中所说的互动应是年前迅雷与大朋VR的投资和系列合作,这说明两个领域的企业都已经在互相试水了。

 

众所周知,3D视频或是VR游戏的上乘体验,都建立在巨大的存储和流畅的速度基础上。例如一个60帧的4K视频,每分钟就需要消耗约1GB至10GB的流量,一个20分钟的视频甚至需要100GB空间。要将这样大的文件传输并分发到用户手中,还要保证用户体验,想必只有CDN能帮到它。

 

“我们将这样的内容成为互联网的‘重应用’,因为无论从大小还是行动上来说,都跟那些轻巧的App或者轻视频有着天壤之别,凭借北京快网CloudCDN多年的技术积累和运营经验,能够让用户不必为了心仪的游戏缓冲等了又等,也不用再忍受视频开始前旋转的圆圈。”严波说。

 

的确,CDN能够让用户在任何地方从最近的节点找到想要的文件,从而保障VR游戏的交互感。由于CDN网络可以在多个节点进行数据的复制,以保障缓存数据可以接近100%传输给用户,所以即使某一地区或者服务器发生故障或者停电,其他的节点也可以自动接管负载,给平台提供了不同于单个数据中心的可靠性解决方案。

 

“目前国内主流CDN厂商都瞄上了VR的市场,无论是资本层面还是技术层面,都投入了相当大的资源,准备迎接VR的爆发。这既是CDN产业创新的契机,也是VR技术产业化和生态化的完善。”严波表示,北京快网已经率先在该领域内做好了相关技术的储备工作,稍加时日更加有针对性且较为完善的产品解决方案,将会融入到CloudCDN核心体系中。在VR产业风暴爆发前做好迎接万亿级市场的准备。

星域CDN给力助攻春晚 实现真正“同步直播”

央视刚刚公布了春晚大数据,最大的亮点莫过于多终端网络收视人数同比增长超4成,高达1.38亿人,堪称历史上同时观看人数最多的在线视频直播事件。而支持这场直播盛事的最大幕后功臣自然少不了网络加速工——各大CDN服务商们,不过,与往年不同的是,创新型专业CDN首次加入这支幕后推手行列中,并为春晚直播献上了最给力助攻。



作为央视春晚及多家地方台春晚的官方直播方之一,小米盒子正借助了战略合作伙伴、国内首个创新型专业CDN服务商——网心科技的星域CDN,成功为无数终端用户送上了零缓冲、零故障的高效优质直播服务。完全不同于传统CDN的“疲于应对”,革新性十足的后者可为小米盒子的用户们带去了“猴顺”、“猴快”的观看体验。

辟蹊径避拥堵骨干网无限节点助春晚“先睹为快”



春晚是中国人最重要的“年夜饭”,春晚直播本身创下最高在线观看人数不说,春节期间,抢红包、网络拜年等热门互动及各大社交平台也都创下了各自全年在线人数最高峰值,这个时候,容量有限的骨干网的压力可想而知。与传统CDN疲于挖掘骨干网带宽资源不同,星域CDN独创的无限节点模式独辟蹊径地绕开了拥挤的骨干网,盘活起数量更为庞大的个人节点网络,并最终实现视频直播最高效化。



星域CDN的最大杀手锏——无限节点技术在足够数量的骨干网节点基础上,布下几十万遍布全国个人家庭中的节点,在春晚直播期间,全新开辟了一条总量更庞大分布更均匀且数据传输距离近至1km的网络加速通道。配合星域CDN独创的星域调度技术,精准实时近距离调取数据,让用户观看春晚时,甚至实现自同一小区同一栋楼的邻居家中调动视频数据,以彻底实现春晚“先睹为快”。



此外,无限密布的节点加上就近数据调度,使得星域CDN帮助小米盒子实现了春晚直播全网延迟同步,每个小米盒子用户都可在第一时间收到同样的视频画面,真正同步观看直播。

多项创新绝技加身弱网下仍可极稳直播



事实上,星域CDN自去年中问世以来,就创下了业内最低直播延迟记录,视频等流媒体直播延迟均可低于2s。除无限节点和星域调度技术外,星域CDN可10倍提升流媒体传输效率与传输质量的弱网加速技术,又进一步保证了各种弱网环境下的直播流畅度,这让不少春节期间回偏僻乡村过年的用户们,也能在看春晚时避免缓冲及掉线烦恼。



值得一提的是,与传统CDN的“只管自家事儿”不同,星域CDN还主动通过采用业界领先的H.265技术,主动帮助客户“带宽大幅减少、流畅度翻倍”,实现视频直播、点播延时和卡顿率的大幅下降。



正是凭借强大的流媒体直播实力,尽管问世尚不到8个月,星域CDN已成为小米电视、小米盒子、爱奇艺等对传输速度、质量有苛刻要求的行业龙头的CDN服务商。而这个创新型专业CDN在今年春晚直播中的最抢眼“首演”,也为自身的2016年赢得了令人称道的开年好彩头。

您的企业的最佳选择:全球CDN还是数据中心?

企业如何规模化其在全球范围内的在线服务?在一般情况下,它们要么在企业所在地建立区域本地化的数据中心;要么则是采用全球内容分发网络(CDN)服务。

这种决策的制定需要权衡企业相关具体目标的可用资源。例如,一些目标可能需要加速动态内容,在亚洲建立电子商务;或是为欧洲用户减轻延迟或互动所需时间(TTI),或是减少全球的数据管理和安全成本费用。为达到成功,在线互联网企业必须对以下基本资源进行检查、测量,并适当分配。

预算

构建数据中心网络的相关建造和维护成本是相当昂贵的,一处占地面积约1000平方英尺的数据中心的耗资约160万美元。持续运营费用成本占到数据中心构建的65%左右。其他的费用包括消防安全,电力和冷却供应,寻找一个适当的地理位置,并获得相关建筑许可证,寻找一家专业的总承包商,以及相关的劳动力成本,包括扩充IT人员的成本。

而外包给CDN提供商并不需要很多的前期成本投入。即使从客户的立场出发,员工维护CDN的费用也大幅度减少,多余的费用可能需要用来培训现有的IT人员,以便通过服务提供商的云门户网站远程访问CDN。CDN服务的成本(和功能)会因CDN服务商的不同而有所不同,但它们通常都会是基于流量按月收取费用。其费用也要看具体的内容加速服务。静态内容站点大多会比全球优化的CDN更便宜。尽管静态站点可能更便宜,但应用程序交付网络(ADN)的加速动态内容则提供了更具吸引力的用户体验,并可能带来更广泛的站点使用。

时间

当涉及到内容加速选项时,时间作为资源拥有充足的方面。时间的投资回报率可能需要数年的数据中心构建;然而,在数据中心发展适当的基础设施,而不是选择CDN,能够允许企业显著控制内容分发的方式。这种控制来自于决策的制定,包括在哪里建立数据中心,可以控制内容的有效交付,提供尽可能最小的延迟性。由于内容分发网络和基础设施已经建成,时间的投资回报率被认为可以通过达到一个国家所选择的CDN支持而大大缩短。

企业需要综合考虑网站的性能KPI指标,如首字节时间(Time to First Byte,TTFB)和目标地区的TTI,来决定是否自建数据中心还是采用CDN。基础的性能,如一般性延迟是由数据发送起源地与目标地之间的距离、网络的拓扑结构、对等点,以及需要加速内容的类型等综合因素决定的。这个问题只有企业自身才能回答,基于独特的变量,企业自建数据中心是否要比采用外包的CDN让内容交付得更快?以及,这是否是一种可靠的方法?

可扩展性

选择外包的CDN和企业自建数据中心的网络规模均是可扩展的。然而,如上所述,全球CDN可以帮助企业更快的实现规模化扩展,因为其网络已经建立好了,并有能力处理尖峰时期的流量。当然,一些CDN较之本地数据中心可能在优化站点的某些SSL安全或SPDY功能方面有更多的困难。

无论企业选择采用哪种内容加速路径,网站本身的优化应该加速进行。利用CSS精灵,启用HTTP压缩,利用浏览器缓存等,保证内容不会经不必要的路径传递或为不必要的组件添加TTI。企业的规模越大,就越有可能因站点加载时间缓慢而影响企业营收。对于大型电子商务巨头亚马逊而言,他们就曾见证了网站加载每延迟100ms,销售下降了1%的惨痛局面。

服务器的安全性

企业对于安全性的维护对于其自身免受网络安全威胁,同时赢得消费者或客户对站点信任也是至关重要额。建立CDN 基础设施能够防止大规模的DDoS攻击、停机时间、网站崩溃和数据丢失。另一方面,企业网络全面的历史也提供了操作和维护企业最佳利益所需的内容。

尽管企业能够利用CDN洞察其数据的功能,决定不选择外包,并将控制权把握在自己手中。从理论上说,这无疑是非常严格的安全控制措施。现在的问题是企业是否能充分在不同的地理区域保持其服务器的安全,以抵御各具特色的安全和金融威胁。

文化联络人因素

如果进入某个具有不同的地域文化或母语的区域,企业需要有相关的文化联络人以便能够与当地的受众进行有效的沟通。如果企业没有在当地雇佣工作人员或已签约的人员,雇佣文化联系人以便了解如何开拓该市场,以及了解地方性的法规需要企业花费额外的费用。

当企业选择自建一处数据中心时,需要考虑利用文化资源,并与目标区域建立良好的关系。其预算必须包括雇佣联络人的成本以及在本地有影响力的网络推广的成本。而一些CDN提供商能够提供文化联络服务的内容或相关的应用程序交付加速。这可能会吸引一部分企业,由于其预先已经与当地政府和内部建立了联系,掌握了如何获得适当的许可证和执照的信息。

您的企业应如何选择?

无论选择利用全球CDN或是建立一处数据中心网络是一个需要进行权衡的行为。企业如何才能充分利用时间启动并运行CDN较之其保留所需的控制水平,自行建立数据中心,是决策的核心因素。所有的资源应充分权衡,相关的预算项目必须列出,时间的经济价值(time-value-money ,TVM)应该讨论。总之,关于如何做出正确的决策并没有统一的公式可遵循;然而,通过仔细的比对企业的目标,并深入研究,将有助于企业确定是否是建立一个数据中心网络或利用全球CDN。

如何用十条命令在一分钟内检查Linux服务器性能

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。

  • uptime

  • dmesg | tail

  • vmstat 1

  • mpstat -P ALL 1

  • pidstat 1

  • iostat -xz 1

  • free -m

  • sar -n DEV 1

  • sar -n TCP,ETCP 1

  • top

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。

下面我们来逐一介绍下这些命令,有关这些命令更多的参数和说明,请参照命令的手册。

uptime

$ uptime 23:51:26 up 21:31,  1 user,  load average: 30.02, 26.43, 19.02

这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。

命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

上面例子中的输出,可以看见最近1分钟的平均负载非常高,且远高于最近15分钟负载,因此我们需要继续排查当前系统中有什么进程消耗了大量的资源。可以通过下文将会介绍的vmstat、mpstat等命令进一步排查。

dmesg丨tail

$ dmesg | tail [1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0 [...] [1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child [1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB [2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

该命令会输出系统日志的最后10行。示例中的输出,可以看见一次内核的oom kill和一次TCP丢包。这些日志可以帮助排查性能问题。千万不要忘了这一步。

vmstat 1

$ vmstat 1 procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0 32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0 32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0 32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0 32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0 ^C

vmstat(8) 命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:

  • r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。

  • free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。

  • si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。

  • us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

mpstat-P ALL 1

$ mpstat -P ALL 1 Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU) 07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle 07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.78 07:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.99 07:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.00 07:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.00 07:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03 [...]

该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。

pidstat 1

$ pidstat 1 Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU) 07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command 07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0 07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave 07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java 07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java 07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java 07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat 07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command 07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave 07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java 07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass 07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat ^C

pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。如上的输出,可以看见两个JAVA进程占用了将近1600%的CPU时间,既消耗了大约16个CPU核心的运算资源。

iostat-xz 1

$ iostat -xz 1 Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU) avg-cpu:  %user   %nice %system %iowait  %steal   %idle          73.96    0.00    3.73    0.03    0.06   22.21 Device:   rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util xvda        0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09 xvdb        0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25 xvdc        0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26 dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04 dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00 dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03 [...] ^C

iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:

  • r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。

  • await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。

  • avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。

  • %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

free -m

$ free -m             total       used       free     shared    buffers     cached Mem:        245998      24545     221453         83         59        541 -/+ buffers/cache:      23944     222053 Swap:            0          0          0

free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

sar -n DEV 1

$ sar -n DEV 1 Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU) 12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil 12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00 12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00 12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil 12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00 12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00 12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 ^C

sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

sar -n TCP,ETCP 1

$ sar -n TCP,ETCP 1 Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU) 12:17:19 AM  active/s passive/s    iseg/s    oseg/s 12:17:20 AM      1.00      0.00  10233.00  18846.00 12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s 12:17:20 AM      0.00      0.00      0.00      0.00      0.00 12:17:20 AM  active/s passive/s    iseg/s    oseg/s 12:17:21 AM      1.00      0.00   8359.00   6039.00 12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s 12:17:21 AM      0.00      0.00      0.00      0.00      0.00 ^C

sar命令在这里用于查看TCP连接状态,其中包括:

  • active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;

  • passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;

  • retrans/s:每秒TCP重传数量;

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

top

$ top top - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92 Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie %Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND 20248 root      20   0  0.227t 0.012t  18748 S  3090  5.2  29812:58 java  4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave 66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top  5235 root      20   0 38.227g 547004  49996 S   0.7  0.2   2:02.74 java  4299 root      20   0 20.015g 2.682g  16836 S   0.3  1.1  33:14.42 java     1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init     2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd     3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 ksoftirqd/0     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H     6 root      20   0       0      0      0 S   0.0  0.0   0:06.94 kworker/u256:0     8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

总结

排查Linux服务器性能问题还有很多工具,上面介绍的一些命令,可以帮助我们快速的定位问题。例如前面的示例输出,多个证据证明有JAVA进程占用了大量CPU资源,之后的性能调优就可以针对应用程序进行。

php增加 ffmpeg-php 安装及出错解决办法

安装ffmpeg-php插件

wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.0.tar.gz

tar xzvf yasm-0.7.0.tar.gz

cd yasm-0.7.0

./configure

make

make install



svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

cd ffmpeg

./configure –enbale-shared

make

make install



wget http://nchc.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

tar xvjf ffmpeg-php-0.6.0.tbz2

cd ffmpeg-php-0.6.0

/usr/local/php/bin/phpize

./configure –with-php-config=/usr/local/php/bin/php-config

make

报错:

make: *** [ffmpeg_movie.lo] Error 1

解决:

vim ffmpeg_movie.c



row 311: list_entry *le; 改为zend_rsrc_list_entry *le;

row 346: list_entry new_le;改为 zend_rsrc_list_entry new_le;

row 360: hashkey_length+1, (void *)&new_le, sizeof(list_entry),改为hashkey_length+1, (void *)&new_le,sizeof(zend_rsrc_list_entry),

重新编译,

make test

报错:

The test-suite requires that proc_open() is available.

 Please check if you disabled it in php.ini.

解决:

编辑php.ini文件,找到disable_functions去掉proc_open。

make install



vim /usr/local/php/etc/php.ini

    加入: extension=ffmpeg.so

/etc/init.d/php-fpm restar

运行ffmpeg报错如下:

ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory

解决:

vim /etc/ld.so.conf

加入一行:/usr/local/lib

然后执行 ldconfig



make ffmpeg-php时,出现error ‘PIX_FMT_RGBA32‘ undeclared…



解决方法:



vi ffmpeg_frame.c, 替换PIX_FMT_RGBA32为/PIX_FMT_RGB32

    :%s/PIX_FMT_RGBA32/PIX_FMT_RGB32  





执行/usr/local/php/sbin/php-fpm restart时报错:



/usr/local/php/bin/php-cgi: symbol lookup error: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so: undefined symbol: register_ffmpeg_frame_class

 failed

解决方法同上,然后重编译安装ffmpeg-php

While compiling ffmpeg-php from source with make command you may get the following error terminating your making process;

make: *** [ffmpeg_frame.lo] Error 1

 

This error occurs due to a missing file ‘ffmpeg_frame.lo‘ in the ffmpeg-php source, while your ffmpeg-php source may contain the file named ‘ffmpeg_frame.loT‘.

 

To Resolve this issue you just need to rename the ‘ffmpeg_frame.loT‘ to ‘ffmpeg_frame.lo‘ and make again, Please check below steps :

Go to ffmpeg-php source directory :

Note: your ffmpeg-php version may be different, i am using 0.6.0

[root@hostripples ~]# cd /path/to/ffmpeg-php-0.6.0

Now rename or copy the ‘ffmpeg_frame.loT‘ to ‘ffmpeg_frame.lo

[root@hostripples ~]# mv ffmpeg_frame.loT ffmpeg_frame.lo

Once you have successfully renamed/copied the file to ‘ffmpeg_frame.lo’, you should compile it again with make command.

– See more at: http://blog.hostripples.com/ffmpeg-php-make-ffmpeg_frame-lo-error-1/#sthash.q6KOWHag.dpuf

If you get the following error when running the command make to compile FFmpeg:

make: *** [ffmpeg_frame.lo] Error 1
There are two ways to fix this problem:

*** First solution (highly recommended)

In the latest version of ffmpeg-php (0.6.0), you need to modify the file: ffmpeg_frame.c and replace every instance of PIX_FMT_RGBA32 with PIX_FMT_RGB32

Using Linux text editor, vi run the following commands:

vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:wq!
Here, you should be back to the command line. Run these commands to compile and install FFmpeg-Php:

./configure
make
make install
*** Second solution
Run the following commands:

cd /path/to/ffmpeg-php-0.6.0
cp -aP ffmpeg_frame.loT ffmpeg_frame.lo
make clean
./configure
Then recompile and install ffmpeg.

在CentOS上编译安装FFmpeg,一键安装脚本

在CentOS编译安装ffmpeg比较麻烦,以前也搞过多次,由于博客调整,特重新记录一下,以备不时之需。

使用yum安装ffmpeg和相关软件

快速安装 ffmpeg

直接安装:

1 
yum install ffmpeg ffmpeg-devel 

若没有找到相应包,需要先加入要应的包。

将下列代码命名为 dag.repo 放在 /etc/yum.repos.d 目录 下。

1 2 3 4 5 
[dag] name=Dag RPM Repository for Red Hat Enterprise Linux baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag gpgcheck=1 enabled=1 

然后再执行上方的安装命令。

安装 ffmpeg-php 扩展

1 2 3 4 5 6 
wget /path/to/this/file/ffmpeg-php-0.5.2.1.tbz2 tar -xjf ffmpeg-0.5.2.1.tbz2 phpize ./configure make make install 

修改 php.ini 文件

安装完成后,将会在/usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so 看到php扩展文件。

打开php.ini文件,加入下面两行

1 2 
[ffmpeg] extension=ffmpeg.so 

重启WEB服务器。使用phpinfo即可看到ffmpeg相关信息。

1 2 3 4 5 6 7 
// #test.php  <?php  phpinfo()  ?> 

php 使用方法

1 2 3 4 5 6 7 8 9 10 
<?php $extension = "ffmpeg"; $extension_soname = $extension . "." . PHP_SHLIB_SUFFIX; $extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;  // load extension if(!extension_loaded($extension)) {  dl($extension_soname) or die("Can't load extension $extension_fullname\n"); } ?> 

安装 Mplayer 和 Mencoder

1 
yum install mplayer mencoder 

常见问题

常见问题及解决方案请参考这里:http://www.mysql-apache-php.com/ffmpeg-install.htm

自行编译安装 ffmpeg

安装依赖项

1 
yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel 

安装相应软件包

可以建立目录存放软件包

1 
mkdir ~/ffmpeg_sources 

注意:以下软件包请有选择的安装,如果不需要请在./configure时移除或关闭相关选项

安装 yasm

Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集。 x264 和 FFmpeg都使用Yasm.

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources git clone --depth 1 git://github.com/yasm/yasm.git cd yasm autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install make distclean 

1 2 3 4 5 6 7 8 
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz tar zxf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make make install make distclean . ~/.bash_profile 

安装 x264

H.264 编码器。http://trac.ffmpeg.org/wiki/Encode/H.264

1 2 3 4 5 6 7 
cd ~/ffmpeg_sources git clone --depth 1 git://git.videolan.org/x264 cd x264 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static make make install make distclean 

1 2 3 4 5 6 7 
wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 tar jxf last_x264.tar.bz2 cd x264-snapshot-20130311-2245/ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-shared make make install make distclean 

需要ffmpeg配置./configure --enable-gpl --enable-libx264

注:由于libx264的code有GPL信息,所以,支持libx264时,需要—enable-gpl,ffmpeg在license方面还是比我们国内的人更重视

安装 x265

H.265/HEVC编码器.http://trac.ffmpeg.org/wiki/Encode/H.265

1 2 3 4 5 6 
cd ~/ffmpeg_sources hg clone https://bitbucket.org/multicoreware/x265 cd ~/ffmpeg_sources/x265/build/linux cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source make make install 

需要ffmpeg配置./configure --enable-gpl --enable-libx265

安装 libfdk_aac

AAC音频编码器,Fraunhofer AAC library

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac cd fdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --enable-shared make make install make distclean 

需要ffmpeg配置--enable-libfdk_aac ,如果指定了--enable-gpl还要配置--enable-nonfree

安装 libmp3lame

Mp3音频编码器

1 2 3 4 5 6 7 
wget http://iweb.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz tar zxf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-shared --enable-nasm make make install make distclean 

需要ffmpeg配置--enable-libmp3lame

安装 libopus

Opus 音频编解码器

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources git clone git://git.opus-codec.org/opus.git cd opus autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install make distclean 

1 2 3 4 5 6 7 
wget http://downloads.xiph.org/releases/opus/opus-1.0.3.tar.gz tar zxf opus-1.0.3.tar.gz cd opus-1.0.3 ./configure --prefix="$HOME/ffmpeg_build" --enable-shared make make install make distclean 

需要ffmpeg配置--enable-libopus

安装 libogg库

libogg是Ogg流库,libtheora、libvorbis需要libogg库,speex需要它。

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz tar xzvf libogg-1.3.2.tar.gz cd libogg-1.3.2 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install make distclean 

安装 libvorbis库

Vorbis音频编码器,需要libogg库。http://trac.ffmpeg.org/wiki/CompilationGuide/Centos#libogg

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz tar xzvf libvorbis-1.3.4.tar.gz cd libvorbis-1.3.4 LDFLAGS="-L$HOME/ffmeg_build/lib" CPPFLAGS="-I$HOME/ffmpeg_build/include" ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared make make install make distclean 

需要ffmpeg配置--enable-libvorbis

安装 libvpx

VP8/VP9视频编码器

1 2 3 4 5 6 7 
cd ~/ffmpeg_sources git clone --depth 1 http://git.chromium.org/webm/libvpx.git cd libvpx ./configure --prefix="$HOME/ffmpeg_build" --enable-examples make make install make clean 

需要ffmpeg配置--enable-libvpx

编译安装 ffmpeg

1 2 3 4 5 6 7 8 
cd ~/ffmpeg_sources git clone --depth 1 git://source.ffmpeg.org/ffmpeg cd ffmpeg PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 make make install make distclean hash -r 

注:

  • 编译完成后ffmpeg,ffprobe,ffserver,lame,x264都可以使用。
  • 编译安装时可以参考Windows Build:http://ffmpeg.zeranoe.com/builds/
  • 如果还需要持续更新请保留ffmpeg_sources目录。

其它可选软件包

安装 OpenCORE AMR

1 2 3 4 5 
wget http://iweb.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz tar zxf opencore-amr-0.1.3.tar.gz ./configure --prefix="$HOME/ffmpeg_build" –enable-shared make make install 

需要ffmpeg配置--enable-libopencore-amrnb 和/或 --enable-libopencore-amrwb

安装 VisualOn AAC

注:github的tag和master版均无法autoconf,用zeranoe版代替

1 2 3 4 5 6 7 
wget wget http://ffmpeg.zeranoe.com/builds/source/external_libraries/vo-aacenc-0.1.3.tar.xz xz -d vo-aacenc-0.1.3.tar.xz tar xf vo-aacenc-0.1.3.tar cd vo-aacenc-0.1.3 ./configure --prefix="$HOME/ffmpeg_build"  make make install 

也可

1 
wget http://iweb.dl.sourceforge.net/project/opencore-amr/vo-aacenc/vo-aacenc-0.1.3.tar.gz 

需要ffmpeg配置--enable-libvo-aacenc

安装 VisualOn AMR-WB

注:github的tag和master版均无法autoconf,用zeranoe版代替

1 2 3 4 5 
wget http://ffmpeg.zeranoe.com/builds/source/external_libraries/vo-amrwbenc-0.1.2.tar.xz xz -d vo-amrwbenc-0.1.2.tar.xz tar xf vo-amrwbenc-0.1.2.tar cd vo-amrwbenc-0.1.2 ./configure --prefix="$HOME/ffmpeg_build" 

需要ffmpeg配置--enable-libvo-amrwbenc

安装 frei0r

先安装新版autoconf,这会覆盖掉系统中的旧版本哦

1 2 3 4 5 6 
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz tar zxf autoconf-2.69.tar.gz cd autoconf-2.69 ./configure --prefix="$HOME/ffmpeg_build"  make make install 
1 2 3 4 5 6 
wget http://files.dyne.org/frei0r/releases/frei0r-plugins-1.4.tar.gz tar zxf frei0r-plugins-1.4.tar.gz cd frei0r-plugins-1.4 ./configure --prefix="$HOME/ffmpeg_build"  make make install 

安装 gnutls

注意:/etc/ld.so.conf要加上lib64。并且不要使用yum remove gnutls gnutls-devel

首先安装nettle:

1 2 3 4 5 6 
wget http://www.lysator.liu.se/~nisse/archive/nettle-2.5.tar.gz tar zxf nettle-2.5.tar.gz cd nettle-2.5 ./configure --prefix="$HOME/ffmpeg_build" –enable-shared make make install 

然后安装gnutls新版:

1 2 3 4 5 6 7 
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.9.1.tar.xz xz -d gnutls-3.1.9.1.tar.xz tar xf gnutls-3.1.9.1.tar cd gnutls-3.1.9.1 PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure –enable-shared make make install 

安装 rtmpdump

1 2 3 4 5 
wget http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz tar zxf rtmpdump-2.3.tgz cd rtmpdump-2.3 make make install 

安装 schroedinger

注:先安装好orc库

1 2 3 4 5 6 7 
wget http://code.entropywave.com/download/orc/orc-0.4.17.tar.gz tar zxf orc-0.4.17.tar.gz cd orc-0.4.17 ./configure --prefix="$HOME/ffmpeg_build"  make make install /sbin/ldconfig 
1 2 3 4 5 6 
wget http://diracvideo.org/download/schroedinger/schroedinger-1.0.11.tar.gz tar zxf schroedinger-1.0.11.tar.gz cd schroedinger-1.0.11 PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure make make install 

安装 soxr

注:新版libsoxr貌似与当前ffmpeg不兼容,用旧版

1 2 3 4 5 6 7 8 9 10 
yum install -y xz wget http://hivelocity.dl.sourceforge.net/project/soxr/soxr-0.1.0-Source.tar.xz xz -d soxr-0.1.0-Source.tar.xz tar xf soxr-0.1.0-Source.tar cd soxr-0.1.0-Source ./go cd Release/ make make install /sbin/ldconfig 

安装 speex

音频编码解码器。需要安装libogg库

1 
yum install speex-devel 

1 2 3 4 5 6 
wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz tar zxf speex-1.2rc1.tar.gz cd speex-1.2rc1 ./configure --prefix="$HOME/ffmpeg_build"  make make install 

ffmpeg ./configure 添加 --enable-libspeex

安装 libfreetype

字体呈现库,使用drawtext http://ffmpeg.org/ffmpeg-filters.html#drawtext-1

1 
yum install freetype-devel 

ffmpeg ./configure 添加 --enable-libfreetype

安装 libsdl库

1 2 3 4 5 6 7 
wget http://www.libsdl.org/release/SDL-1.2.15.tar.gz tar zxf SDL-1.2.15.tar.gz cd SDL-1.2.15 ./configure --prefix="$HOME/ffmpeg_build"  make make install /sbin/ldconfig 

安装 theora

Theora视频编码器,需要需要libogg,libvorbis和libsdl库

1 2 3 4 5 6 
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2 tar zjf libtheora-1.1.1.tar.bz2 ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-examples --enable-shared --disable-sdltest --disable-vorbistest make make install make distclean 

ffmpeg ./configure 添加 --enable-libtheora

安装 twolame

1 2 3 4 5 6 7 8 
wget http://downloads.sourceforge.net/twolame/twolame-0.3.13.tar.gz tar zxf twolame-0.3.13 .tar.gz cd twolame-0.3.13 ./configure --prefix="$HOME/ffmpeg_build"  make make install /sbin/ldconfig 

安装 xvid

1 2 3 4 5 6 7 
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz tar zxf xvidcore-1.3.2.tar.gz cd xvidcore cd build/generic ./configure --prefix="$HOME/ffmpeg_build"  make make install 

更新FFmpeg及相关组件

更新依赖项

删除旧文件,更新依赖项

1 2 
rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,ffserver,lame,vsyasm,x264,yasm,ytasm} # yum install autoconf automake cmake gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel 

更新 x264

1 2 3 
cd ~/ffmpeg_sources/x264 make distclean git pull 

然后运行

1 2 3 4 
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static make make install make distclean 

更新 x265

1 2 3 4 
cd ~/ffmpeg_sources/x265 rm -rf ~/ffmpeg_sources/x265/build/linux/* hg update cd ~/ffmpeg_sources/x265/build/linux 

然后运行

1 2 3 
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source make make install 

更新 libfdk_aac

1 2 3 
cd ~/ffmpeg_sources/libfdk_aac make distclean git pull 

然后运行

1 2 3 4 5 6 
cd fdk-aac autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make make install make distclean 

更新 libvpx

1 2 3 
cd ~/ffmpeg_sources/libvpx make clean git pull 

然后运行

1 2 3 4 5 
cd libvpx ./configure --prefix="$HOME/ffmpeg_build" --disable-examples make make install make clean 

更新FFmpeg

1 2 3 
cd ~/ffmpeg_sources/ffmpeg make distclean git pull 

然后运行

1 2 3 4 5 6 
cd ffmpeg PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 make make install make distclean hash -r 

还原所有本文安装内容

1 2 3 
rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,ffserver,lame,vsyasm,x264,yasm,ytasm} # yum erase autoconf automake cmake gcc gcc-c++ git libtool mercurial nasm pkgconfig zlib-devel hash -r 

注:如安装其它软件包需要自行删除

自动安装shell

https://gist.github.com/gboudreau/f24aed76b4cc91bfb2c1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 
#!/bin/sh   # Based on instructions found here: http://wiki.razuna.com/display/ecp/FFMpeg+Installation+on+CentOS+and+RedHat#FFMpegInstallationonCentOSandRedHat-InstallX264   if [ "`/usr/bin/whoami`" != "root" ]; then  echo "You need to execute this script as root."  exit 1 fi   cat > /etc/yum.repos.d/centos.repo<<EOF [centos] name=CentOS-6 – Base baseurl=http://mirror.centos.org/centos/6/os/x86_64/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6 enabled=1 priority=1 protect=1 includepkgs=SDL SDL-devel gsm gsm-devel libtheora theora-tools libdc1394 libdc1394-devel libraw1394-devel EOF rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6   rpm -Uhv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm yum -y update   yum -y install glibc gcc gcc-c++ autoconf automake libtool git make nasm pkgconfig yum -y install SDL-devel a52dec a52dec-devel alsa-lib-devel faac faac-devel faad2 faad2-devel yum -y install freetype-devel giflib gsm gsm-devel imlib2 imlib2-devel lame lame-devel libICE-devel libSM-devel libX11-devel yum -y install libXau-devel libXdmcp-devel libXext-devel libXrandr-devel libXrender-devel libXt-devel yum -y install libogg libvorbis vorbis-tools mesa-libGL-devel mesa-libGLU-devel xorg-x11-proto-devel zlib-devel yum -y install libtheora theora-tools yum -y install ncurses-devel yum -y install libdc1394 libdc1394-devel yum -y install amrnb-devel amrwb-devel opencore-amr-devel   cd /opt wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz tar xzvf xvidcore-1.3.2.tar.gz && rm -f xvidcore-1.3.2.tar.gz cd xvidcore/build/generic ./configure --prefix="$HOME/ffmpeg_build" && make && make install   cd /opt wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz tar xzvf libogg-1.3.1.tar.gz && rm -f libogg-1.3.1.tar.gz cd libogg-1.3.1 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && make && make install   cd /opt wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz tar xzvf libvorbis-1.3.4.tar.gz && rm -f libvorbis-1.3.4.tar.gz cd libvorbis-1.3.4 ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared && make && make install   cd /opt wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz tar xzvf libtheora-1.1.1.tar.gz && rm -f libtheora-1.1.1.tar.gz cd libtheora-1.1.1 ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-examples --disable-shared --disable-sdltest --disable-vorbistest && make && make install   cd /opt wget http://downloads.sourceforge.net/opencore-amr/vo-aacenc-0.1.2.tar.gz tar xzvf vo-aacenc-0.1.2.tar.gz && rm -f vo-aacenc-0.1.2.tar.gz cd vo-aacenc-0.1.2 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && make install   yum -y remove yasm cd /opt wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz tar xzfv yasm-1.2.0.tar.gz && rm -f yasm-1.2.0.tar.gz cd yasm-1.2.0 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && make install export "PATH=$PATH:$HOME/bin"    cd /opt git clone http://git.chromium.org/webm/libvpx.git cd libvpx git checkout tags/v1.3.0 ./configure --prefix="$HOME/ffmpeg_build" --disable-examples && make && make install   cd /opt git clone git://git.videolan.org/x264.git cd x264 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static && make install   export LD_LIBRARY_PATH=/usr/local/lib/:$HOME/ffmpeg_build/lib/ echo /usr/local/lib >> /etc/ld.so.conf.d/custom-libs.conf echo $HOME/ffmpeg_build/lib/ >> /etc/ld.so.conf.d/custom-libs.conf ldconfig   cd /opt git clone git://source.ffmpeg.org/ffmpeg.git cd ffmpeg git checkout release/2.2 PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" export PKG_CONFIG_PATH ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" \ --extra-libs=-ldl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libfaac \ --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvo-aacenc --enable-libxvid --disable-ffplay \ --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --arch=x86_64 && make install   # Test the resulting ffmpeg binary cp $HOME/bin/ffmpeg /usr/bin/ ffmpeg -v 

参考

原文:http://www.yaosansi.com/post/ffmpeg-on-centos

赚钱宝+星域CDN,如何革新云计算行业?

2015 年即将过去,很多行业在过去一年有爆发式的发展,比如云计算行业。尽管阿里、腾讯等几大巨头依旧瞩目,但是迅雷旗下的网心科技携赚钱宝和星域 CDN 等两大创新产品对云计算行业的强势搅局却更让人难忘。



赚钱宝的 “uber 模式 ” ,为何能大行其道?



今年 4 月 23 日,迅雷在北京发布 “ 会赚钱的 ” 智能硬件产品赚钱宝。赚钱宝究竟如何帮助为用户赚钱?简单说来,就是用户的闲置带宽通过迅雷赚钱宝收集起来,并产生相应的奖励-水晶,用户可以通过水晶矿场 App 查看收益情况,并通过微信红包提现。 根据媒体评测,在 10M 带宽的网络环境下,迅雷赚钱宝月均收益为 90 元。而根据迅雷赚钱宝公布的大数据来看, 在购买第一代迅雷赚钱宝的用户中,光是靠出租闲置带宽,就有 41.05% 的用户月收益在 80-100 元之间,超过 100 元月收益的用户则有 10.58% 。 来自迅雷官方的数据显示,一代产品从 2015 年 4 月份众筹至 6 月京东售卖,共获得了 120 万用户的预约支持,更是为所有用户带来了共计超过 2 亿元的收益。而二代产品仅推出市场月余,截止到目前,已吸引粉丝近 110 万。



而且,更为重要的是,在这个过程中,迅雷以赚钱宝为入口,构建了一个类似于 uber 共享经济模式,并实现三方共赢的局面。即用户通过赚钱宝赚钱,企业通过赚钱宝用户提供的带宽资源得以更低成本的使用 CDN 服务,而迅雷则在通过向企业提供 CDN 服务获得自己的收益。基本原理就是通过迅雷赚钱宝来收集用户的闲置带宽流量,并将这些闲置带宽流量加以利用,通过技术手段为企业提供价格更为合理的 CDN 服务。



实际上,这种迅雷赚钱宝这种类似于 “uber” 的共享经济模式,如果在早几年出现,很可能会面临夭折。其一是在几年前智能硬件产品的接受度低,赚钱宝推出的可能需要对用户进行较多的说服教育,而如今智能硬件产品已经大行其道,能够更容易被用户广泛接受和使用;第二是共享经济的概念在几年前也不普及,而如今由于 uber 和滴滴打车的大行其道,人们更能够接受这种共享经济的产品,通过赚钱宝利用家里闲散带宽流量来赚钱的理念也更容易被接受。更重要的是, 10m 乃至 100m 高速小区宽带的大规模普及,使得家庭用户的带宽资源不再紧张,从而能够有意愿通过迅雷赚钱宝把闲散的资源分享出去。



而且,不仅如此,赚钱宝这种产品可能不会从迅雷之外的企业公司里出现,这可能还由迅雷的企业基因决定。为什么会是迅雷用共享经济的模式去引领这个行业的发展?而不是别家。实际上,这与迅雷公司在过去十多年在 p2p 下载和网络内容分发方面的行业积累和技术优势有巨大的关系,而前腾讯云总裁陈磊的加入,更是迅雷能够迅速推出赚钱宝这一个创新的智能硬件产品的决定性力量。



赚钱宝+星域 CDN :颠覆 CDN 行业,改造环境?



在迅雷赚钱宝第一代产品上线推出两月之后,迅雷旗下网心科技又联手小米发布了星域 CDN 产品,喊出要重新定义 CDN 行业的口号,流量资费低至 0.10 元 /GB, 只有市场价格的三分之一不到,而带宽费用低至 9999 元 / 月 /GB, 也只有市场价格的二分之一。 迅雷赚钱宝和星域 CDN 的推出所带来行业的创新意义不言自明,更是颠覆了传统 CDN 乃至云计算行业的很多玩法。主要体现在两个方面:



第一,让 CDN 的价格回归到了合理的水平。 自从以超低价格上线星域 CDN 服务上线之后,就像一条鲶鱼,搅动这个行业发生剧烈的变化,特别是传统 CDN 厂商的纷纷调低价格。 为何星域 CDN 能够如此低价?网心科技 CEO 、迅雷联席 CEO 陈磊在钛媒体创新大会上表示,一是这个行业的价格本来就比较虚高,星域 CDN 让价格回到了合理的水平;第二是星域 CDN 通过创新的技术和服务降低了成本,其技术原理就是通过迅雷的 p2p 下载技术将使用赚钱宝的家庭用户作为无限网络节点,因此能够以较低的成本向企业用户提供 CDN 服务,这使得很多企业开始重新考虑新建 CDN 的必要性。特别是对于 视频、游戏等需要根据用户量的增长持续扩展 CDN 能力的公司来说,与其投入巨额的人力和物力自建机房,不如选择与星域 CDN 合作。实际上,截止今年 11 月,星域 CDN 已经成功吸引了 2686 家企业前往预约,并在接入客户群体中赢得了较好的口碑。



第二 ,真正让构建绿色数据中心成为了现实。 在过去,摆放成千上万台的服务器的数据中心每天的耗电量惊人,而且机房内还得配备数量众多的空调散热设备,不仅电费高昂,而且不够绿色环保,而早在几年前,很多电信运营商和 IDC 厂商就一直在寻求建立更加节能环保的数据中心的方案。显然,从更加环保节能的角度来讲,不建或少建数据中心可能是最佳选择。不过,可能很多 IDC 厂商怎么也想不到,迅雷可以通过推出一个赚钱宝这样的智能硬件产品,以共享经济的方式来达到不建或少建机房的目的。而迅雷官方数据显示,目前已经通过赚钱宝在全国范围内布建了 30 万个家庭节点,相当于为国家节省了 800 万度电,更进一步的说,相当于为一个百万人口的城市减排 6700 吨二氧化碳。从这一点上来看,不仅是对行业有颠覆意义,更是对社会的环保节能有积极的作用。



不过,完全依赖用户上传的带宽流量来进行网络极点布局来服务企业可能是最理想化的状态。特别是目前赚钱宝的用户量没有达到海量的情况下,显然还不可能,迅雷也在自建一部分机房来作为网络节点的补充以满足互联网企业客户所需。而就在最近,第二代产品迅雷赚钱宝 pro 已经开始再次预约发售,而为了进一步扩大赚钱宝的用户人群,迅雷还聘请当红小生 李治廷作为产品形象代言人。



可以预见的是,一旦迅雷赚钱宝的用户达到几百万甚至上千万的量级,网心科技极有可能化身成为国内最大的 CDN 服务提供商,并且基于平台上有众多赚钱宝用户,一旦开放出来,引入更多的应用和游戏,还能够形成另一个独立的商业生态系统。

快网严波:解读CDN降价背后的竞争新格局

CDN实际上并不是一个新词语,但是近期的热度却一直走高,一方面是很多市场新入者以及云计算巨头纷纷降价,另一方面,基于CDN诞生了很多赚钱的路由器。CDN降价真正到了关键点?宝宝类路由产品背后又体现了怎样的创新思维?为此,记者在中国系统架构师大会结束后专门采访了快网联合创始人严波,了解了他眼中当下CDN的竞争态势。

QQ截图20160128164422.jpg

降价不是市场竞争的常态化

竞争是市场发展的助推器,良性的市场竞争将会加速产业的推进,从媒体报道以及厂商端来看,今年CDN的参与者越来越多,包括一些云计算厂商。但是,CDN最核心的是规模效应,谁的资源多,带宽池大,做调度的时候得心应手,而且跨网的调度越精细,用户体验越好。实际上,云计算厂商切入CDN领域会遇到规模上的瓶颈,除非超大CP的云平台,调度能力和资源足够丰富。即便如此,由于他们是非独立第三方CDN厂商,客户大都是还是自己体系中的关联公司,暂时没有威胁到传统CDN厂商的持续增长。

关于竞争对手们掀起的降价潮,严波认为大部分是新进者,主要出于两方面原因:一方面是搏眼球,向业界证明自己的存在。另一方面是响应李克强总理“提速降费”的号召。尽管有些厂商推出了超低价,但都有各自的前提条件。根本原因在于,CDN的价格已经降低到了可见的范围内,行业整理利润率并不高,这些新进者的价格实际执行过程中会和传统CDN厂商差不多,甚至会略高。因此,客户应该理性地看待此次降价潮。同时严波强调,企业生存必须要有适当的利润,整个CDN行业才能良性发展,那些学toC业务模式烧钱抢客户的行为会砸了自己脚。

技术变革没有到来,微创新一直在进行

在大众创业、万众创新的引导下,越来越多的企业和开发者纷纷投入到产品创新过程中,但是,这仅仅是创新而不是变革。严波认为,CDN技术本身基本的架构和技术原理没有变化,无非是把用户经常访问的内容分发到全国各地或者全球,让用户可以更快地访问这些内容。

目前,在CDN技术各方面的改进和创新有很多,以“FastLive视频直播加速”为例,各种秀场、游戏直播、演唱会、体育赛事等,直播的时间越来越长,互动性要求高,以前网络直播延迟几十秒用户都觉察不到,但互动时就会大大影响用户体验。笔者深有体会,几年前看NBA比赛直播,经常遇到和其他朋友信息不同步的情况,体验会很差。另外,点播和直播的终端越来越丰富,对码流的要求也不同,小屏幕用小码流很清楚,但是大屏幕必须要大码流才能实现高清,因此,能不能针对不同终端推送适合的码流也是一个革新点。目前快网在为央视网等各种直播网站提供FastLive直播加速服务。

总之,CDN行业一直在做微创新,尚不存在第几代CDN产品的分别。

快网产品策略,安全是下一步重点

目前,从产品角度,快网拥有ClouDCDN、CloudTCP、CloudXNS、ClouDCache四款产品,也是目前快网对外销售的主要产品。在中国系统架构师大会上亮相的“NewDefend牛盾”云加速,是快网下一步发展的重点。在严波看来,未来将会有越来越多的设备接入互联网,对安全的要求越来越高,安全性始终是大家关注的核心点。

据悉,“NewDefend牛盾”云加速产品主要应用于中小企业网站、以及对网站安全要求非常高的国有企业和政府网站,特点是内容不多,访问量不大,但是对安全要求非常高,具体原理是:通过“NewDefend牛盾”将原站屏蔽在后面,用户访问的时候先到达“NewDefend牛盾”,然后访问后面的内容,即使前面有网络攻击等安全问题出现,“NewDefend牛盾”会提供相应的安全保护,这有点类似局域网中的防火墙。

客户选择CDN遵循三原则

好产品还需要过客户这一关,客户买账才是王道。从客户选型角度,严波认为有三点非常重要。第一、质量。对于技术负责人来讲,他们更关注快速稳定的用户访问,不能慢,不能断。第二,交付能力。起决定作用的是资源池,资源越大越好,在客户有大需求时,CDN厂商能否快速地交付也成为客户考虑的重点。小型或刚起步的CDN厂商部署需要很长时间,短时间内满足不了客户需求。第三价格,对于商务负责人来讲,更关注成本问题。

典型案例解析

9月3日的大阅兵,央视网做了全程直播,而背后提供直播加速的就是快网。目前央视网是全国最大电视媒体在线直播平台。由于地位的特殊性,对直播的要求非常高,在直播产品上也有很多业内独特的地方。比如互动、时移、回看、多码流自适应、点播等。很多新颖的功能极大地提升了用户体验。央视网经过多方面的考虑,最终选择了快网“FastLive直播加速”。

总之,越来越多的企业进入CDN领域,并实现了更多创新性的改进对这个行业是个利好,但是也需要有更合理的市场竞争机制,让整个CDN行业良性发展,这需要像快网这样的行业第一梯队起到更好的引领示范作用。