从年底破百亿的“芈月传”和有毒的“太子妃”到年初举报快播的“背锅侠”,乐视简直赚足了国民的关注。现在看来,游戏才刚刚开始,最近乐视又在忙活着升级,改Logo改域名,这意味着乐视已经准备火力全开,进军全球市场了。小编觉得,乐视之所以有这么大的野心,是因为背后有大数据作支撑,而且未来,大数据在乐视全球化战略中也将发挥举足轻重的作用。从内容来看,乐视大数据打造的超级IP实力确实强大。2013年乐视最早借大数据跑赢宣传档为即将上映的《小时代》做了最精准的预测和分析,开展了一场漂亮的电影营销,拉开了大数据电影营销的模式。再后来,国内影视开始掀起IP潮,2015年是IP炒的最热的一年。年底,乐视给用户呈上满意的答卷,其自制的“十年剧王”《芈月传》以全网200多亿的播放总量创下纪录。网络雷剧《太子妃升职记》,目前全网播放量已接近15亿。大数据+超级内容IP给乐视进军全球市场注入了无限动力。然而,这不是重点,“内容+”才是乐视生态的看点。《芈月传》播出后,乐视同步推出了《芈月传》定制版超级电视、智能手机、芈酒、手机壳、《芈月传》经典台词版手机铃声等个性化产品,还与天猫合作,打造《芈月传》衍生品旗舰店,《芈月传》手游也已经发布。注意,请注意,这是一个360°无死角的IP布局,乐视超级IP已经形成一个完美的闭环。如果说IP是软件的话,那乐视云就是硬件了。大数据时代,最不缺的就是“云”了,乐视云是一个专注于视频领域的云计算平台,2016年乐视云已经与戴尔达成两年全球战略合作、联手全球领先大数据运营商Equinix,法国第一大电信运营商Orange、澳大利亚最大电讯公司澳大利亚电信、世界领先综合性国际电信公司西班牙电信、全球顶级通信方案运营商香港和记环球电讯有限公司等全球多家顶级运营商,打破数据孤岛,加速视频生态体系建设,未来乐视大数据的触角将会伸向更多行业。再来看市值,乐视网2004年成立,2010年上市,当年市值仅为50亿。五年下来,乐视依托大数据平台在互联网视频、影视制作、智能终端、电子商务等垂直领域深耕,到现在,总市值已接近1100亿。但是,看看乐视这次全面升级冲击全球的架势,貌似,乐视的故事才刚刚开始!白德鑫现在正在从事乐视网超级电视做数据挖掘。他表示,原来初期的业务做得适应不了当前业务发展,所以要进化。主要做的事情,构建每件事的时候,分析数据的平台,给乐视网的超级电视提供数据挖掘服务.如何从最初业务发展到现在,包括在超级电视上做实时分析和用户离线挖掘,通过数据挖掘,给很多业务部门提供数据挖掘的支持。白德鑫提到自己是谷歌粉丝,目前正在做第一批超级电视数据挖掘。云视频搞清播放机的时候,那时候比较屌丝,只有几万台数据,数据当时也比较少,做了一些开机数之类的、日常数据。在业务里做,在数据节点做计算。后来性能越来越低,因为量越来越大,当时每天数据量,当时觉得很大,每天只有几千万行数据。这时觉得需要尝试一些新的技术,就用Cassandra为存储,存储日至,做简单处理切分以后放进里面,使用Hodoop进行计算,把结果塞到MySQL里。每天计算数据对自己来说是一个中间数据。可以出来一些报表。数据组合比较多,刚开始只是盒子、应用,后来还有一些视频播放内容,开始尝试把每天数据把MySQL和Kettle进行分析。但是做了三四个月又换了,使用Kafka、Storm、Hodoop、Hpase、Hive、Oozie、Sqoop,唯一修改是有一些大的,跟随开源社区来做,进行相应升级,尽量跟社区保持一致。乐视网大数据的起点白德鑫表示,刚开始只有一个数据分析员,抓一些数据,这是做的分析。电视的盒子,包括电视开机,看了什么电视节目,因为乐视网是做视频内容的,点开了什么视频节目,看了多长视频节目是通过心跳来做的,三分钟一个心跳,这个放到终端记录下来。播放有开始、有心跳,电视好一些,但是盒子有些用户看着看着直接断电了,结束就没有了,只能从心跳往回挖。自从发布超级电视以后,刚开始盒子价格比较贵,没人买,后来盒子卖299,卖出去很多。数据量按照三分钟心跳,几十万用户看视频,开机有心跳、播放视频有心跳,数据量特别大,没办法,乐视当时上了四台。四台数据,看怎么发布的。之后输出,然后进行分析。看有哪些问题。当时做这个事情的时候一个人在做这些事情。然后后来有人离职,后来Cassandra这块没人了,交接的时候写完,对系统影响很大。在这个时候没人接手,他走了技术也走了,一个萝卜一个坑,萝卜走了坑很不容易填的。后来想找一个技术更牛一些的人帮乐视来做,但是到现在一个多月没有找到。系统要继续做,数据也在疯狂增长,没办法就把Cassadnra去掉,往MySQL里放。通过另外一种方式,分析人员对乐视意见很大,他多的时间有两个小时,要看今天开机量,和昨天的对比,再分时段看开机量,两个小时就过去了。他说系统老死机,我说是查询太慢了。希望系统可以做大一些。现阶段数据量的变化白德鑫自己说,乐视的数据量从年初的三个月翻一番,到现在的我写得稍微早一些,到每周翻一番,现在每天数据量一百G,超级电视以及盒子卖得非常快。从设备行为快速向用户行为转变。我的计划量是多少,卖得多了老百姓开始考虑业务行动,按照互联网方式做,用户拿着我的盒子看什么使的,是看电影还是看电视剧,所以这个时候很多用户行为来分析。现在电视版本和盒子版本一周一个,这个版本每周更新一个系统版本,用户是不是接受,这些都在乐视这里做分析。还有一个是乐视在这里做了一些测试,因为在盒子里,乐视叫UI里做一些测试,今天做一个海报推荐,明天加一个分析,看用户量高还是低。用户数据量增长很快,人也没有,一边找土豪开发者帮乐视解决这个问题,另外自己要解决这个问题了。看数据分析的人,团队从内部调,数据分析招聘了一个。还有一个比较牛的是从公司别的部门挖的一个人。从今年年初开始履行,从原有的来进行。最后换成现在的方式。这个是自己在做,研发团队两个人,现在也是两个人。差不多半年搭成新的,新平台通过Kafka搭建,通过很多业务系统,点播、第三方的,包括一些日志,存储数据,以及需要对用户进行分析的数据。还有一些元数据,进行一些加工、处理。整合之后,其实就是前段所有的请求打到这里。Storme是最后的数据,另外Hodoop写的已经换了,数据量大以后,换其他的数据库,刚开始选,公司自己开始做自己的数据库。通过Hodoop以及数据服务wAD-HOC的搭建、处理,实时查询、开放数据平台也做了查询、进行了报表,对一些实时数据分析系统,还有做了门户,对各个业务提供数据服务,要调哪些数据。运营商需要知道在四川电信、某个电信部门的视频点播量。这些都是靠内部挖掘的。乐视的数据源通过前端的,从三款到六款,所有数据都打到这里,好处是在于跟着开源社区升级系统,依然可以接收数据,不影响业务。后面再随便操作。数据稍微做一下处理放到STORE,放到数据实时计算、然后进行拆分。现在没有用PEED,用户交互是OEE,把多个任务组合,把它放到,最后是一个结果,是一个业务流程的管理工具。数据输出之后通过查询,然后提供给别人,反馈到前端数据。这叫矩阵式的业务。这是进行的测试。服务器两台4Corecpu、6G,用户38万左右,38万有效数据。跟官网50万对比稍微差一些。因为乐视的机器性能比他们差很多。当时做的时候两个节点做的,用了一个发送,用的是同步发送,消息格式是两种,格式是30字节、50字节、200字节。如果30字节38万,其他数据基本上是在30万左右。这是单台数据。单台差不多30万。这是乐视的Spout集群,做一些业务拆分,比如有些数据需要组织,点播、心跳的,其实有些消息是随机的,虽然连续发过来的,但是每台机器都往外发,把数据写到里面,比方说播放时长,每个剧播放时长、按时段的数据计算。这个借用官网的图,我用的0.9几,实际上标准是一个,但是乐视怕数据丢失,所以做了两个,其实做得比较简单,把数据复制。存的一些数据,这些没有太多可讲的,当时做了一些简单优化,这个不多说。默认垃圾是关闭的,自动回收,不想让它自动回收要手工做一些处理。这是Sqoop,原来的数据都在这里存储,乐视导入集群里,乐视用这个来做。当时做了一些事情,把数据抽取整合。没有写在上面的OLD,包括查询,有些数据处理处理的中间结果,中间结果到最后没有,不可能到使用阶段。ROI分析数据量每个月翻一番,现在不只这个了,乐视原有架构没办法满足新的需求,之前就是日报,现在每天实时数据都很多。Kettle方式数据整合时间越来越长,采用hadoop-Storm方案,不会对数据挖掘产生太大的影响,资源稍微丰富一点,集群不够使的时候要添加机器,数据每日跑一次,每天晚上12点跑一次收取数据生成报表,到现在实时查询,时间还是比较长的,五分钟左右。因特尔给乐视推荐过一个,但是它那个对内存要求太高,暂时做不到。现在都是6G内存服务器。支持硬件设备。目前还有很多事情要做,其实对乐视来说不同阶段选择不同方案,刚开始初期的时候,一年卖几万个盒子,刚开始三千一台盒子,不可能建十几个节点的数据。人员流失会导致技术流失。技术储备和内部自荐比招聘牛人更快。现在招聘也很困难,hadoop圈里人比较少。新业务平台都要小心对待。否则出问题很难解决。数据这块还好一些,如果前端没有,对业务影响很大。数据安全很重要,乐视有40多T数据,放到两个备份存储上。服务器多了就是爽,四台不够加八台,计算量可以很快。
1.引子什么是大数据?麦肯锡公司的报告《大数据:创新、竞争和生产力的下一个前沿领域》中给出的大数据定义是:大数据指的是规模超过现有数据库工具获取、存储、管理和分析能力的数据集,并同时强调并不是超过某个特定数量级的数据集才是大数据。国际数据公司(IDC)用四个维度的特征来定义大数据,即数据集的规模(Volume)、数据流动的速度(Velocity)、数据类型的多少(Variety)和数据价值的大小(Value)。亚马逊的大数据科学家JohnRauser的定义比较直接:“超过单台计算机处理能力的数据量则为大数据”。最后我们来看看维基百科上的大数据定义:“Bigdataisthetermforacollectionofdatasetssolargeandcomplexthatitbecomesdifficulttoprocessusingon-handdatabasemanagementtoolsortraditionaldataprocessingapplications.”翻译成中文的意思是:大数据指的是数据规模庞大和复杂到难以通过现有的数据库管理工具或者传统的数据处理应用程序进行处理的数据集合。上述大数据的概念中无一例外都突出了“大”字。从表面上看,数据规模的增长的确为处理数据带来了很大的问题。具体来说,在同样时间内获取与以前相同价值的数据变得不可为了。换言之,本质问题是数据的价值密度变低了,数据交换速率变慢了,所以催生了很多新型数据处理技术和工具,如Google的GFS和MapReduce,ApacheHadoop生态系统,美国伯克利大学AMPLab的Spark等;出现了对时间敏感程度不同的计算模式,如批式计算模式、交互式计算模式、流计算模式、实时计算模式等。计算模式的差异只是决定获取价值的技术不同,取决于上层业务需求的不同。实际上,所谓大数据问题的本质应是数据的资产化和服务化,而挖掘数据的内在价值是研究大数据的最终目标。2.大数据技术源起GoogleGoogle在搜索引擎上所获得的巨大成功,很大程度上是由于采用了先进的大数据管理和处理技术,是针对搜索引擎所面临的日益膨胀的海量数据存储问题以及在此之上的海量数据处理问题而设计的。Google提出了一整套基于分布式并行集群方式的基础架构技术,利用软件的能力来处理集群中经常发生的节点失效问题。Google使用的大数据平台主要包括五个相互独立又紧密结合在一起的系统:分布式资源管理系统Borg,Google文件系统(GFS),针对Google应用程序的特点提出的MapReduce编程模式,分布式的锁机制Chubby以及大规模分布式数据库BigTable。Borg是这五个系统中最为神秘的一个,直到2015年Google才在EuroSys2015上发表了题为“Large-scaleclustermanagementatGooglewithBorg”的论文。称Google内部不仅像计算型的应用,比如MapReduce、Pregel等运行在Borg上,存储类的应用,比如GFS,BigTable和Megastore等也运行在上面,真正做到了批处理作业和长周期服务的混合部署和资源动态调度。得益于此项技术,可以使平均资源利用率达到30%~75%以上,大大高于业界平均水平的6%~12%。GFS是一个大型的分布式文件系统,它为Google云计算提供海量存储,并且与Chubby、MapReduce和BigTable等技术结合得十分紧密,处于系统的底层。它的设计受到Google特殊的应用负载和技术环境的影响。相对于传统的分布式文件系统,为了达到成本、可靠性和性能的最佳平衡,GFS从多个方面进行了简化。MapReduce是处理海量数据的并行编程模式,用于大规模数据集的并行运算。MapReduce通过“Map(映射)”和“Reduce(化简)”这样两个简单的概念来参加运算。用户只需要提供自己的Map函数以及Reduce函数就可以在集群上进行大规模的分布式数据处理。这一编程环境能够使程序设计人员编写大规模的并行应用程序时不用考虑集群的可靠性、可扩展性等问题。应用程序编写人员只需要将精力放在应用程序本身,关于集群的处理问题则交由平台来完成。与传统的分布式程序设计相比,MapReduce封装了并行处理、容错处理、本地化计算、负载均衡等细节,具有简单而强大的接口。正是由于MapReduce具有函数式编程语言和矢量编程语言的共性,使得这种编程模式特别适合于非结构化和结构化的海量数据的搜索、挖掘、分析等应用。Chubby是提供粗粒度锁服务的一个文件系统,它基于松耦合分布式文件系统,解决了分布式系统的一致性问题。这种锁只是一个建议性的锁而不是强制性的锁。通过使用Chubby的锁服务,用户可以确保数据操作过程中的一致性。GFS使用Chubby来选取一个GFS主服务器,BigTable使用Chubby指定一个主服务器并发现、控制与其相关的子表服务器。大规模分布式数据库BigTable是基于GFS和Chubby开发的分布式存储系统。很多应用程序对于数据的组织是非常有规则的。一般来说,数据库对于处理格式化的数据还是非常方便的。但是由于关系数据库要求很强的一致性,很难将其扩展到很大的规模。为了处理Google内部大量的格式化以及半格式化数据,Google构建了弱一致性要求的大规模数据库系统BigTable。BigTablede在很多方面和数据库类似,但它并不是真正意义上的数据库。Google包括Web索引、卫星图像数据等在内的很多海量结构化和半结构化数据都是存储在BigTable中的。3.Hadoop开启了大数据时代的大门Google的技术虽好但不开源。如果没有DougCutting和他的Hadoop开源软件,我们就看不到如今大数据技术和应用的飞速发展。DougCutting主导的ApacheNutch项目是Hadoop软件的源头,该项目始于2002年,是ApacheLucene的子项目之一。当时的系统架构尚无法扩展到存储并处理拥有数十亿网页的网络化数据。Google在2003年于SOSP上公开了描述其分布式文件系统的论文“TheGoogleFileSystem”,为Nutch提供了及时的帮助。2004年,Nutch的分布式文件系统(NDFS)开始开发。同年,Google在OSDI上发表了题为“MapReduce:SimplifiedDataProcessingonLargeClusters”的论文,受到启发的DougCutting等人开始实现MapReduce计算框架并与NDFS(NutchDistributedFileSystem)结合起来,共同支持Nutch的主要算法。至2006年,它逐渐成为一套完整而独立的软件,已经到Yahoo!工作的DougCutting将这套大数据处理软件命名为Hadoop。2008年初,Hadoop成为Apache的顶级项目,除Yahoo!之外在众多互联网企业中得到应用。早期的Hadoop,包括Hadoopv1以及更早之前的版本,主要由两个核心组件构成:HDFS和MapReduce,其中HDFS是GoogleGFS的开源版本,MapReduce计算框架实现了由Google工程师提出的MapReduce编程模型。还有一些围绕在Hadoop周围的开源项目,为完善大数据处理的全生命周期提供了必要的配套和补充。这些软件常用的有ZooKeeper、Hive、Pig、HBase、Storm、Kafka、Flume、Sqoop、Oozie、Mahout等。2012年5月,Hadoopv2的alpha版本发布,其中最重要的变化是在Hadoop核心组件中增加了YARN(YetAnotherResourceNegotiator)。YARN的出现是为了把计算框架与资源管理彻底分离开,解决Hadoopv1由此带来的扩展性差、单点故障和不能同时支持多种计算框架的问题。YARN对标的恰好就是Google的Borg系统。至此,Hadoop方才能够与Google的大数据平台比肩。一个好的、有生命力的开源生态系统要有一个核心,这个核心要是差异化和非平凡的,还要有广泛的应用和活跃的社区。Hadoop恰好具备这三个特征,以Hadoop为核心的大数据开源生态系统逐渐形成,Hadoop也成为自Linux以来最成功的开源软件,没有之一。受人民大学信息学院院长杜小勇老师的委托,我在CNCC2015上组织了一个名为“大数据开源生态系统”的论坛。论坛邀请了来自互联网企业、硬件厂商、系统集成商以及学术界的同行分享在大数据开源方面的工作和体会。在最后的Panel环节,讨论了为什么要做开源和怎么做开源这两个问题。回答是比较分散的,有开源是唯一选择的,有拉通产业链的,有认为开源是新业态新商业模式的,有认为开源促进技术进步的。总之,在产业链不同的环节上的机构做开源的动机和目标自然是不同的,但只有这样,产业链中不同角色都能够在生态系统中找到自己的位置,这样的生态系统才是健壮的有生命力的,不是吗?4.Hadoop的发展历史和应用之路大数据领域第一个吃螃蟹的是互联网行业。这是因为大数据概念和技术都来源于互联网企业的老大哥Google的原因。以Hadoop投入实际应用来看:从2006年到2008年是Hadoop的诞生阶段。只有国外少数几个互联网巨头在尝试,国内互联网行业在学习这项新技术。2006年,Yahoo!构建100节点规模的Hadoop机群用于Webmap业务。2007年,Yahoo!构建1000节点规模的Hadoop机群。2008年,Yahoo!的Hadoop机群扩展到2000节点规模,Facebook贡献Hive项目到开源社区。从2008年到2010年是Hadoop的少年阶段。在互联网行业已经开始投入实际应用,应用集中在网页存储检索,日志处理和用户行为分析等方面。2009年,Yahoo!使用4000节点的机群运行Hadoop,支持广告系统和Web搜索的研究;Facebook使用600节点的机群运行Hadoop,存储内部日志数据,支持其上的数据分析和机器学习;百度用Hadoop处理每周200TB的数据,进行搜索日志分析和网页数据挖掘工作。2010年,Facebook的Hadoop机群扩展到1000节点;百度用Hadoop每天可处理1PB的数据;中国移动通信研究院基于Hadoop开发了“大云”(BigCloud)系统,不但用于相关数据分析,还对外提供服务;淘宝的Hadoop系统达到千台规模,用于存储并处理电子商务的交易相关数据。从2010年到2015年是Hadoop的青年阶段。在互联网行业无不将Hadoop作为大数据计算的标准配置,且应用形式趋于多样化;企业计算领域开始实践基于Hadoop的大数据应用;在追求大数据处理能力的同时,也开始思考系统适配性和效率问题。互联网行业出现了大量数据分析类应用,比如支付宝的交易数据离线分析系统等;用Hadoop与生态系统中的其他软件一起构成更为复杂的应用系统,比如腾讯的广点通精准广告投放系统,电信运营商的基于用户画像的精准营销系统等。除互联网行业外,出现了网络通讯大数据、金融大数据、交通旅游大数据、工业制造大数据、医疗健康大数据、社会治理大数据、教育大数据等,大数据理念和技术已经融入各行各业。Hadoop源于互联网行业,在应用于企业计算时,需要进行适配,原因在于互联网应用和企业计算应用在需求、服务、研发和运维体系方面有本质的不同。互联网应用业务逻辑简单、服务于海量用户、非固定使用人群、系统的用户体验至上、持续交付、能够快速响应的专业运维;而企业计算应用业务逻辑复杂、有限数量用户、固定使用人群、系统更强调稳定可靠、版本交付、层级式的技术支持。一时间市面上出现了很多面向企业用户的Hadoop发行版,以易部署、好配置,以及使用和管理方便为切入点,吸引着企业用户的眼球。5.大数据技术的发展趋势系统架构的专业化。从当今IT技术的发展角度看,提出系统结构上的解决方案是“应用驱动的大数据架构与技术”。也就是说根据具体类型应用的需求,在系统架构和关键技术上进行创新。为了降低成本并获得更好的能效,大数据应用系统越来越趋向扁平化、专用化的系统架构和数据处理技术,逐渐摆脱了传统的通用技术体系。比如并行数据库更鲜明的分化为面向事务处理的OLTP类数据库和面向分析的OLAP类数据库等。传统的应用服务器、数据库服务器和存储服务器这样的典型三层架构受到极大的冲击。应用开发人员更深入的理解计算机系统结构,“程序”=“算法”+“数据结构”将逐渐演变成“程序”=“算法”+“数据结构”+“系统结构”。大数据生态系统范围扩大。克隆了Google的GFS和MapReduce的ApacheHadoop自2008年以来逐渐为互联网企业接纳,并成为大数据处理领域的事实标准。但2013年出现的Spark作为一匹黑马可以说终结了这一神话,大数据技术不再一家独大。由于应用不同导致Hadoop一套软件系统不可能满足所有需求,在全面兼容Hadoop的基础上,Spark通过更多的利用内存处理大幅提高系统性能。此外,Scribe、Flume、Kafka、Storm、Drill、Impala、TEZ/Stinger、Presto、Spark/SparkSQL等的出现并不是取代Hadoop,而是扩大了大数据技术生态环境,促使生态环境向良性和完整发展。今后在非易失存储层次、网络通信层次、易失存储层次和计算框架层次还会出现更多、更好和更专用化的软件系统。系统整体效能更为用户重视。在全球互联网企业的努力下,Hadoop已经可以处理百PB级的数据,在不考虑时间维度的前提下,价值密度低的数据可以处理了。在解决了传统关系型数据库技术无法处理如此量级的数据之后,业界正在向系统能效要价值。能效问题一方面体现在系统性能上。互联网服务强调用户体验,原本做不到实时的应用在向实时化靠拢,比如前端系统及业务日志从产生到收集入库的延迟从1到2天时间进化到10秒以内。传统企业无法忍受关系数据库动辄几十分钟的查询分析性能,纷纷求助于性价比更好的技术和产品。这些需求使大数据交互式查询分析、流式计算、内存计算成为业界研发和应用的新方向。能效问题的另一方面体现在系统功耗和成本上。中科院计算所陈云霁研究员领导研究的专用神经网络处理器技术,可大幅加速机器学习负载,与通用芯片和GPU相比,计算速度提高几十倍,功耗只有十分之一,整体能效提高450倍。百度云存储万台定制ARM服务器可节电约25%,存储密度提升70%,每瓦特计算能力提升34倍(用GPU取代CPU计算),每GB存储成本降低50%。个性化服务的需求愈发强烈。个性化对应于互联网服务的长尾部分,这部分需求在传统的系统设计中因为复杂性原因是被舍弃的,但正是这部分体现出个性化服务的需求。个性化服务,即系统能够提供满足不同个体需求的差异化服务,比如个性化推荐,广告精准投放等。就拿个性化推荐技术来说,目前已经开始从简单的商品推荐走向复杂的内容推荐。根据用户的特性与偏好,推荐内容的特征,以及当时的上下文数据(客户端设备类型、用户所处时空数据等),向特定用户提供个性化的内容推荐服务,内容包括商品(包括电商和零售)、广告、新闻和资讯等。在移动设备和移动互联网飞速发展的时代,个性化推荐将成为用户获取信息最直接的渠道之一。价值挖掘的理论和技术亟待发展。对数据进行浅层分析的理论和技术,主要体现在分布式系统和关系型数据库理论的结合与再创新,目前已经有较大幅度进展。但是,从数据中抽取隐含的信息或者知识,也就是价值挖掘,这方面的理论和技术还比较缺乏。一是缺乏成熟的数据挖掘建模方法和工具,经验对于挖掘出有价值信息的影响甚大,原始数据与隐含信息之间存在技术缺失,所以“啤酒+尿布”的案例并不是天天都能产生的。二是机器学习和深度学习技术面临应用问题。与大数据相结合,已经在诸如语音识别、图像识别、广告推荐和风险控制等场景中得以初步应用,但这方面的技术和软件工具成熟度不高,还有很大提升空间。此外,机器学习和深度学习的应用场景还不够广泛,这既是机遇也是挑战。6.结语Hadoop开源软件自2006年起至今已经走过十个年头,这对于任何软件来说生命周期不可谓不长。但是,Hadoop也在经历来自其他开源黑马的冲击。Spark在早期发展阶段通过全面兼容Hadoop而借力于后者成熟的生态系统。时至今日,Spark正在挑战Hadoop的权威,因为Spark已经将发展目标定位在取代Hadoop。Hadoop老矣,尚能饭否?Hadoop的近100位Committer在积极的为Hadoop谋划未来,让我们拭目以待吧!我们已经步入数据化全覆盖的时代,社会生活、各行各业都在因数据而发生巨变。近年来,大数据已成为国家层面的基础性战略资源,正日益对全球生产、流通、分配、消费活动以及经济运行机制、社会生活方式和国家治理能力产生重要影响。推动大数据发展已成为国际社会的行动共识。
robots文件是搜索生态中很重要的一个环节,同时也是一个很细节的环节。很多站长同学在网站运营过程中,很容易忽视robots文件的存在,进行错误覆盖或者全部封禁robots,造成不必要损失!那么网站Robots被误封禁后该如何处理?一起来看看吧!【案例背景】网站开发2.0版本,技术选择了在线开发,为了避免搜索引擎抓取开发版本,要求技术人员设置了Robots封禁处理。2.0版本开发周期1个月,1个月后网站版本迭代,直接覆盖了1.0版本,包括Robots封禁文件,2天后发现流量大幅下降,检查收录发现800万收录降至0条,关键词大量掉线。【处理方式】1.修改Robots封禁为允许,然后到百度站长后台检测并更新Robots。2.在百度站长后台抓取检测,此时显示抓取失败,没关系,多点击抓取几次,触发蜘蛛抓取站点。3.在百度站长后台抓取频次,申请抓取频次上调。4.百度反馈中心,反馈是因为误操作导致了这种情况的发生。5.百度站长后台链接提交处,设置数据主动推送(实时)。6.更新sitemap网站地图,重新提交百度,每天手工提交一次。以上处理完,接下来就是等待了,万幸,2天的时间数据开始慢慢回升,到第3天基本回升到正常状态!【案例总结】本次事故绝对是运营生涯的一次败笔,总结反思一下,希望大家避免类似问题。1.产品开发一定要避免在线开发,不能为了省事不搭建开发环境。2.产品迭代要有流程记录,开发时做了那些设置处理,那些是不需要放出来的,那些是必须放出来的,要非常清楚。3.要经常关注百度站长后台,关注相关数据变化,从数据变化中及时发现问题以上就是网站Robots被误封禁后的解决方法,希望能对大家有所帮助!
GitCafe是一个基于代码托管服务打造的技术协作与分享平台,程序开发爱好者们可以通过使用代码版本控制系统Git来将他们所写的开源或商业项目的代码托管在GitCafe上,与其他程序员针对这些项目在线协作开发。GitCafe是目前世界上最流行最优秀的项目版本控制系统之一,Cafe的意思为咖啡馆,象征着程序员文化。在GitCafe这个平台上,开发者可以轻松的在线协作共同开发出一个又一个开源或者私有项目。通过GitCafe,开发项目的控制与团队管理将变得方便与有效。与GitHub类似,GitCafe也同样可以用来搭建个人博客。虽然,现在我们需要搭建自己的个人网站、博客,基本不是多大的难事,随便购买一个属于自己的域名、虚拟主机或者VPS服务器,成本也不是很高,然后找一款开源的CMS程序,基本上半小时内就可以完成个人网站、博客的搭建。我们都清楚寻找免费空间的时间成本很大,我们会选择购买主机。然而,GEEKER一族会与众不同,我们会利用当前比较流行的托管部署空间搭建自己的博客,比如我们很多朋友的个人博客都搭建在GITHUB、CODING等托管空间上,有些支持绑定自己的域名,有些不支持。在托管空间中部署个人网站的方法,对于普通的用户群来说可能比较困难。第一、GitCafe官网及账户注册官网地址:https://gitcafe.com/根据提示,我们注册账户,然后激活邮箱就可以完成注册。第二、登录GitCafe部署项目我们在注册到属于自己的GitCafe账户之后,直奔主题,开始完成我们需要部署站点需要的项目。1、创建项目我们登录GitCafe后台之后,需要创建一个新的项目。因为我们需要用来创建博客站点,一个账户只能创建一个,且创建的项目名称需要与我们的拥有者名称一致,所以我们看上图。我们直接初始化项目,所以勾选README.md文件部署。这样,我们在GitCafe托管空间上的项目已经部署完毕。但目前为止,我们还不能创建设置Pages服务。因为在这个时候,我们到当前项目设置中的"Pages服务"中,看到的是无法绑定域名的。第三、GitCafe部署Pages服务这一步是比较关键的,我们需要有一点点GIT基础才可以。我们需要将上面部署的项目拖到本地,然后将本地部署好的页面提交到需要创建的gitcafe-pages分支中,只要分支中有内容,我们才可以直接打开已经系统赠送的二级域名,我们更可以绑定自己的域名。1、连接远端仓库我们需要先在PC本地创建一个文件夹,用来单独管理GitCafe上面的项目。 复制代码代码如下:gitclonehttps://gitcafe.com/itbulucom/itbulucom.git然后我们随便添加一个html页面到上面去。2、创建gitcafe-pages分支 复制代码代码如下:gitcheckout-bgitcafe-pagesgitpushorigingitcafe-pages将我们预先准备好的html页面部署到分支中。3、部署完毕检查我的页面:http://itbulucom.gitcafe.io/部署完毕之后,我们可以通过上面的页面访问已经部署到GitCafePages分支上的页面内容,同理,如果我们有其他的页面,我们一样可以部署进去。是不是小小的博客就完成了?第四、绑定域名到GitCafe因为我们已经在GitCafePages中有页面,所以可以绑定域名。我们可以绑定自己的一级域名或者二级域名,然后将域名解析换成CNAME解析到gitcafe.io。然后我们等待生效之后,就可以直接用自己的域名打开部署的GitCafePages页面。第五、后话到目前为止,我们就可以简单的部署页面到GitCafe中,创建一个小小的博客是没有问题的。GitCafe自公开之后从Alpha阶段的低调内测,到公开Beta版上线,用户数量已经翻了几倍,项目数量也在快速增长。与GitHub一样,付费的私有项目也将会是GitCafe的主要盈利模式。但与GitHub以及其他大多数互联网服务的按月付费模式不同,GitCafe希望能够给用户足够弹性,对于用户来说(特别是刚刚开始使用这类服务的中国用户),他们也许并不一定像传统的收费计划那样,需要一次性购买5个、10个或更多的私有托管项目,而是可能从一两个项目、少数的几个协作人员开始,因此GitCafe采用了按天数、私有项目个数以及项目协作人员个数来进行收费的策略。(为了方便计算费用,GitCafe引入了虚拟货币概念极特币(GitCoin),与人民币的兑换汇率是30:1,这样用户每天账户余额上因使用付费服务而扣除的极特币数量,基本就是每月真实的人民币开销额度。)
近年来,自媒体博客发展极为迅速,很多运营自媒体博客的站长也因此获得不菲的利润,特别是Wordpress建站软件的发展,更是让构建一个自媒体博客变得更加简单,这就必然会导致自媒体博客竞争的惨烈。虽然Wordpress建设博客相对简单,可是如果不掌握一些技巧,就很难在竞争激烈的环境中脱颖而出,进而占据优势,这就意味着,使用Wordpress建设博客,也需要掌握一些必要的技能。下面就来具体分析作为一个新手站长应该具备哪些技能,从而为这些新手站长建设一个具有竞争力的独立博客提供一定的参考。第一,适当学习一下Html+CSS技术。其实这个技术是建设网站的基础,无论使用什么样的建站软件,都应该具备这样的基本技能。其实这个技能并不是很复杂,很多人认为这不是学习代码建站么,会有很大的难度,可是只需要记住几个单词,再加上相应的标识符,就很容易理解代码的意思,因为html不需要让站长学习各种对象和类,也不需要学习很多函数,更不要调用windowsAPI等,html语言实际上就是一种脚本语言,所见即所得,况且也不是真的在记事本中编写相应的代码来建设网站,仅仅是为了能够读懂Wordpress在建站过程中所生成的Html加CSS,所以难度相对极小,但是对于优化相应的代码却具有极大的作用,所以掌握这项基本技能,对于促进网站架构的优化,提升网站的竞争力等方面作用显著。第二,套用标签。现在免费的建站软件有很多种,但是这些建站软件之间在标签方面并没有统一的标准,比如同样流行的织梦建站软件,就有属于其自身的标签,同样Wordpress也有属于自身特点的标签。为了让自己的网站具有特色,就不能够直接使用建站软件所提供的特有的标签,如果这么做的话,结果就是造成很多架构不仅一样,甚至连标签都一致,这势必会让百度等搜素引擎产生了审美疲劳,从而影响网站在搜素引擎的好感度,甚至会认为这些网站存在着大量的垃圾特性,进而很难提升网站的竞争力。所以对于一个新手站长而言,想要使用Wordpress构建独立博客,就必须要学会使用标签,从而提升网站的个性化水平。第三,充分了解Wordpress建站后台。后台是运营Wordpress独立博客的核心场所,也是优化网站的关键之处,科学的运用Wordpress后台,不仅能够提升网站的优化水平,同时还能够增强网站的用户体验度,进而提升网站的核心竞争力。当然对于Wordpress后台而言,一个新手站长很难在很短的时间里就能够充分的掌握,如果将网站上线之后再来熟悉这个后台,那么就会对网站的运营产生很多负面的效果,此时就需要在本地计算机平台上熟悉Wordpress后台,当充分理解了Wordpress后台的各项功能之后,再上线到虚拟网站空间中,这样就能够让新网站能够持续的获得良好的技术支持。当然运营Wordpress独立博客时,也要注意和同行进行沟通交流,或者到一些专业的站长网站上学习相关的技能,比如一些操作的细节,如导航的设置,还有网页的界面设计等,通过不断的学习才能够不断的提升网站的优化效果,增强独立博客的竞争力。
现在的移动搜索引擎优化不仅仅只是给移动站排名,更重要的是还与PC网站排名有很密切的关系,当一个网站的PC端和移动端适配合理的话,至少可以给PC网站排名加10分,所以还没有做好移动搜索引擎优化的朋友,非常值得看一看此文。下面是久闻网移动站点排名的数据,给大家作为参考。 1、URL适配关系 如果你的网站是自动响应式的,那可以忽略这一点,如果你的PC站和移动站URL可以对应,请把对应的规则写到百度站长平台去,对应的方法有两种,一种是写规则,依葫芦画瓢,第二种是直接把移动和PC的URL整理出来,写成一个txt的文件,上传到百度去,让他自己去识别。 2、移动网站打开速度 在移动网站上打开速度远比PC站点重要,比较电脑的速度目前来讲还是比手机要快,最低标准要保持网站在3秒钟内打开,所以移动网站上劲量保持文字即可,不要搞的稀里哗啦的,这不比PC网站,这一点自动相应的网站优化起来稍微困难一点,可以试着将PC和移动站一起优化。 3、图片延迟加载 看到不少的自媒体APP上大多数都使用了图片延迟加载的技术,当然还包括淘宝、京东等大型电商网站都使用到了,如果在移动网站上没有特别的要求,尽量不要使用图片,当然为了让文字活起来,增加图片也是应该的,那就使用图片延迟加载的技术,既不影响网站的打开速度,又不会让用户觉得无图无真相了。 4、页面结构问题 既然做了一个移动网站,那就拿出一个移动网站的样式来,那种还需要缩放或者横向滚动的网站,就不适合做移动站点优化了,如下图所示: 当然如果页面设计的非常合理,但因为移动网站的位置有限,将广告位遮挡住网站的主题自然也是不利于搜索引擎优化的,如下图所示: 5、自动网站文字大小 在PC网站上并没有明确的说明要求网站文字大小,但是因为文字太小并且文字上分有链接,有可能会被搜索引擎认为这是故意做的隐藏链接,移动搜索引擎上,千万要注意文字的大小问题。百度官方的建议是:正文字号推荐14px,行间距推荐(0.42~0.6)*字号。 6、网站实用性 在移动网站上,百度最喜欢的是文字形式的网站,百度最不喜欢的是flash网站,所以尽量避免实用flash形式展现,另外视频音乐网站应当是直接播放,严禁欺骗用户下载播放器(这属于作弊行为),APP下载类的最佳体验是直接下载,而不是跳转多个页面后才可以下载,至于移动网站的文档类的,应当直接转成文字发布出来。 7、取消百度转码 部分做了移动网站的朋友,当你用移动端搜索引擎搜索你的网站的时候,你会发现,你的网站被百度强行转码了,那是因为他还没有识别到你的PC网站和移动网站的对应关系,这个时候你要取消百度转码,并且提交对应关系。 8、301与302 移动端和PC端关系是对应适配了,但用户看到的需要我们做一个跳转来调整,通常情况下是302跳转,为什么不是301呢,因为我们的PC站和移动站是一起存在的,而301则是永久定向,就意外着之前的URL将不复存在。这样可能会影响到PC站点的排名。 9、移动站sitemap地图 虽然说移动站的收录和排名几乎没有关系了,但收录自然是越多越好,至少不需要依靠PC的跳转来支撑排名,而移动页面的链接相对PC上的少,所以大多数链接蜘蛛一个一个爬起来是非常辛苦的,这个时候网站地图是重要文件了。 10、移动网页meta标签 强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览; iphone设备中的safari私有meta标签,它表示:允许全屏模式浏览; iphone的私有标签,它指定的iphone中safari顶端的状态条的样式; 告诉设备忽略将页面中的数字识别为电话号码
百度应用引擎(BAE)是百度推出的网络应用开发平台。基于BAE架构,使开发者不需要维护任何服务器,只需要简单的上传应用程序,就可以为用户提供服务。BAE有能力将原本单机的LAMP架构,变成分布式架构。开发者可以基于BAE平台进行PHP、Java、Python、Nodejs应用的开发、编译、发布、调试。同时BAE平台也提供了大量的云服务给开发者,包括fetchURL、taskqueue、SQL、memcache,后续会提供更多服务。在性能方面,如果开发者希望增加服务能力,可以通过申请更多执行单元的方式进行灵活的调整。BAE服务可以让开发者在开发网络应用程序的过程中摆脱繁琐的环境、服务问题,把精力专注于业务逻辑。执行环境:云环境中应用程序执行的环境。执行环境由执行组组成,每个执行组包含执行单元。执行环境分为公共集群和私有集群。执行单元:执行单元是云环境里面运行用户代码的最小服务实例。执行组:若干执行单元组成的集合。同一个执行组内的不同执行单元的环境是同构的。执行组内执行单元个数会根据实际负载自动调整,但会受到系统阈值的限制或用户配额的限制。公共集群:指属于云环境系统的执行组的集合。云环境会保证公共集群里面不同用户不同应用之间代码和数据的安全隔离。公有集群对用户来说是完全透明的。私有集群:完全属于用户自己的执行组的集合。用户可以选择自己应用的代码部署到自己拥有的任意执行组内。私有执行组内的执行单元不会和其它用户共享。下面我们就来看一下在BAE上搭建WordPress的具体步骤。一、注册百度云平台BAE空间1、百度BAE官网:http://developer.baidu.com2、要想使用百度云平台BAE空间,你首先要有一个百度账号,进入上面的网址点击右上角注册一个账号,登陆后点击马上加入填写开发者信息。二、百度云平台BAE空间创建应用和云数据库1、进入首页控制台,点击页面右上角的“创建应用”,按要求输入“应用名称”、“域名”,接入方式选择“不接入”,点击“确定”。2、应用创建完成后,打开http://developer.baidu.com/dev,点击“管理”,创建一个新版本。3、输入版本号,点击“保存”,版本创建成功以后,点一下版本号前面的方框,使之加上对勾,也就是上线,并且记下下面的SVN地址,备用。4、进入云数据库:http://developer.baidu.com/bae/bdbs/db/5、点击“创建数据库”输入数据库描述,点击“确定”。三、BAE空间创建Bucket百度云存储和空间文件管理1、进入:http://developer.baidu.com/bae/bcs/bucket/,点击“创建Bucket”,输入名称及需要的配额,大小最好多选点,记下你的Bucket名称,备用。2、进入:http://developer.baidu.com/bae/bms/list/,点击创造消息队列,队列模式选那个都可以,记下系统创建的队列名称,备用。3、BAE的文件管理、上传程序等,要用到SVN,先下载安装TortoiseSVN,再安装TortoiseSVN简体中文语言包,这里在网上搜索一个下来安装就好,不再细讲。4、我这里简要的说明如何上传,本地创建一个用于存放从SVN仓库中checkout的代码的文件夹,点击文件夹右键,点击“SVNCheckout”(SVN检出)5、URL框输入应用的SVN地址,刚才提示过让你记下SVN地址备用,点击“确定”,之后会提示输入(百度)账号及密码即可。四、在百度BAE空间成功搭建Wordpress1、下载Wordpress,也可以下载网上流行的WordpressForBAE定制版。2、下载后,将文件解压到刚刚建立的文件夹中,注意你的版本号写的是0的话文件夹中就有个0的文件,把程序放0这个文件夹里面,提示覆盖就覆盖了原来的文件。3、全选WP文件,右键——“TortoiseSVN”——“Add”(增加)4、接着上传文件,全选WP文件,右键文件夹——“SVNCommit”(SVN提交),弹出的窗口点“Ok”(可能会提示输入账号密码),一直等待上传完毕。5、打开你的应用URL(就是最开始你创建应用时输入的域名),跳转到这个WordPress的安装界面。下面就是普通的WordPress的安装过程了,通用,还可以登陆到WordPress控制面板,去插件页面,尝试激活一下百度云存储插件(我个人没用过--)。五、百度免费BAE空间绑定顶级域名1、BAE的域名绑定不像SAE一样,需要验证备案,发邮件等。。。BAE仅需你承诺备案过,即可绑定!2、首先,先把你域名CNAME记录到BAE提供的二级域名,DNS解析后,即可绑定!3、进入http://developer.baidu.com/bae/bce/appmng/domain-appid-appidplqbagaaww点击“新增绑定”,输入你的域名地址,勾上“承诺已备案”,在点击“确认绑定”即可。4、接下来就看到域名绑定成功的提示了。
599错误处理如果在与七牛的交互中出现http状态码为599的错误,一句话,不要犹豫,直接联系七牛技术支持。七牛的文档也在很多地方提到这个错误,都是指导大家去联系技术支持的。笔者是在分块上传后的mkfile调用时出现的,联系技术支持后,说是调整了一下,让我重试。后来就好了…分块上传无法从回调中获得文件的原始名简单上传采用的是multipart/form-data方式上传,七牛服务端能够从请求中获得文件的原始名,并支持使用魔法变量$(fname)回调业务服务器。不过当使用分片上传的时候情况有所不同。分片上传需要在最后调用mkfile,来将分片拼接起来。但是,mkfile接口支持普通的请求,并没有附带文件名,所以七牛也就无法获得文件名,此时从$(fname)中是取不到文件名的。这个问题我也向七牛技术支持提交了问题,得到的结果是使用自定义变量mkfile支持将自定义变量放在url中,回调的时候自定义变量可以传递给业务服务器。慎用图片预处理七牛云支持很多对文件的预处理,其中最常用的应该就是图片预处理了,可以对图片的大小做变换等。七牛推荐使用GET的方式直接指定图片处理结果的url,像这样:http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200处理后的图片会自动缓存,用户不用关心,只要每次访问都用这个url就行了。然而,笔者在开始的时候,为了保持与其他文件形式统一的处理方法,对图片使用了预处理(因为视频什么的只能预处理),即在token中指定了预处理。此时问题出现了,从后台的日志看到,图片的预处理通知回调竟然比正常的上传成功回调还要快!这就导致预处理结果到来之前,我的业务服务器的数据库中还没有这个图片,无法保存预处理结果了。所以推荐还是使用url直接处理,对图片要慎用预处理视频文件无法快进播放通常用户在观看视频的时候都会根据自己的喜好,快速将视频定位到指定的时间播放。实现这个功能,需要视频本身有关键帧信息、服务端需要支持关键帧播放请求。但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。于是咨询技术支持,得到的答案是:转化的文件是具有关键帧的,但七牛使用CDN加速,所以关键帧请求需要CDN的支持,如果想要用这个功能的话,需要单独联系销售或技术支持在CDN上配置,而且时间比较长。笔者联系了销售和技术支持,说是帮我配置,但到现在还没有搞定,因为最近这个也不是特别重要,所以也没有跟下去。Callback校验这是可选的一个步骤。由于七牛云会在上传完成之后回调业务服务器,所以理论上说业务服务器需要校验这个回调的合理性。原理在七牛的文档中有,需要用到HMAC-SHA1签名函数。但是七牛的sdk中没有提供直接的方式来做校验,在研读文档、多次失败和查看sdk源码后,笔者终于校验成功了。关键的分歧在于,文档中的这句话:获取明文:data=Request.URL.Path+””+Request.Body这里的Request.URL.Path是否包含Querystring?答案是包含的!下面是笔者C#服务端的校验代码,使用的是ASP.NETWebApi:byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY); using (HMACSHA1 hmac = new HMACSHA1(key)) { var t = filterContext.Request.Content.ReadAsStringAsync(); t.Wait(); string rawbody = t.Result; log.DebugFormat("request's rawbody : {0}", rawbody); string text = filterContext.Request.RequestUri.PathAndQuery + "" + rawbody; log.DebugFormat("PathAndQuery + \n + rawbody : {0}", text); byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text)); string computed = Qiniu.Util.Base64URLSafe.Encode(digest); log.DebugFormat("Computed hash after base64 : {0}", computed); IEnumerable auths; if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1) { string auth = auths.First(); log.DebugFormat("Authorization in header : {0}", auth); if (auth.StartsWith("QBox ")) { var arr = auth.Substring(5).Split(':'); if (arr.Length == 2) { if (arr[1] != computed) { log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed); } else { log.Debug("Authorization success."); //only pass can be return return; } } else { log.Error("Callback Authorization's format is invalid, can not find two part after split by ':'."); } } else { log.Error("Callback Authorization's format is invalid, missing leading 'QBox '."); } } else { log.Error("The request from qiniu callback is missing 'Authorization'"); } filterContext.Response = filterContext.Request.CreateResponse(System.Net.HttpStatusCode.Forbidden); } 如下几个注意点:明文应当是请求的path+querystring部分和rawbody对于.NET而言,明文和key都需要用UTF-8编码变换成字节才能进行签名。而php中的hash_hmac函数完全不用这么复杂…签名的结果再用base64的url安全的方式编码,再与请求的http头部的Authorization比较建议官方在文档中加入一些相对底层一些的编程语言的实现,php太高端了…js-sdk实现略显粗糙在使用过程中,我发现官方的js-sdk有几个我觉得不好的地方:不能为每个文件获取UpToken试想,在文件上传过程中有获取UpToken是必须的,而且UpToken又需要包含预处理指令,不同的文件显然需要不同的UpToken,而在js-sdk的实现中,只在初始化这个上传组件对象的时候请求一次上传凭证,后面所有的上传都需要使用这个预先得到的UpToken:uploader.bind('Init', function(up, params) { getUpToken(); }); 于是我修改了这部分,在BeforeUpload事件中请求UpToken。建议官方考虑更改这个地方只能实现分片上传,无法断点续传js-sdk的实现在分片上传的实现上,是很简单的,不仅没有使用分片,而是分块(一块4m,调用mkblk),而且没有实现持久化ctx,或者类似的回调或接口。4m分块这个问题还可以不追究,没有实现持久化ctx就说不过去了,不持久化怎么实现断点续传撒?!就算不实现,也应该给出回调的入口,让调用者来实现持久化,而我实在无法找到这个’空子’可钻,只能直接在源码上改动了。没有复用流行类库的东西这个其实算不上问题,因为作为一个不依赖jquery的sdk,当然不能使用jquery现成的东西,比如ajax。不依赖jquery就算了,依赖plupload是几个意思嘛,还依赖全局对象…于是最后,我干脆自己将sdk改成了Backbone的类,将不要的东西统统去掉,使用jquery和underscore简化代码了…
Google是一个非常优秀的公司。他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部。有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论。让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查。并不是只有Google做这个事情—代码审查已经被广泛的认可为一种非常好的做法,很多人都在这样做。但我还没有看到第二家这样大的公司能把这种事情运用的如此普遍。在Google,没有程序,任何产品、任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里的。所有人都要经过代码审查。并且很正规的:这种事情应该成为任何重要的软件开发工作中一个基本制度。并不单指产品程序——所有东西。它不需要很多的工作,但它的效果是巨大的。从代码审查里能得到什么?很显然:在代码提交前,用第二群眼睛检查一遍,防止bug混入。这是对其最常见的理解,是对代码审查的好处的最广泛的认识。但是,依我的经验来看,这反倒是它最不重要的一点。人们确实在代码审查中找到了bug。可是,这些在代码审查中能发现的绝大部分bug,很显然,都是微不足道的bug,程序的作者花几分钟的时间就能发现它们。真正需要花时间去发现的bug不是在代码审查里能找到的。代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释,更好的程序结构——因为你知道,那个你很在意的人将会查看你的程序。没有代码审查,你知道人们最终还是会看你的程序。但这种事情不是立即发生的事,它不会给你带来同等的紧迫感,它不会给你相同的个人评判的那种感受。还有一个非常重要的好处。代码审查能传播知识。在很多的开发团队里,经常每一个人负责一个核心模块,每个人都只关注他自己的那个模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或——但愿不是——辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解——但他会熟悉程序的设计和架构,这是极其重要的。当然,没有什么事情能简单的做下来的。依我的经验,在你能正确的进行代码审查前,你需要花时间锻炼学习。我发现人们在代码审查时经常会犯一些错误,导致不少麻烦——尤其在一些缺乏经验的审查者中经常的出现,他们给了人们一个很遭的代码审查的体验,成为了人们接受代码审查制度的一个障碍。最重要的一个原则:代码审查用意是在代码提交前找到其中的问题——你要发现是它的正确。在代码审查中最常犯的错误——几乎每个新手都会犯的错误——是,审查者根据自己的编程习惯来评判别人的代码。对于一个问题,通常我们能找出十几种方法去解决。对于一种解决方案,我们能有百万种编码方案来实现它。作为一个审查者,你的任务不是来确保被审查的代码都采用的是你的编码风格——因为它不可能跟你写的一样。作为一段代码的审查者的任务是确保由作者自己写出的代码是正确的。一旦这个原则被打破,你最终将会倍感折磨,深受挫折——这可不是我们想要的结果。问题在于,这种错误是如此的普遍而易犯。如果你是个程序员,当你遇到一个问题,你能想到一种解决方案——你就把你想到的方案作为标准答案。但事情不是这样的——作为一个好的审查者,你需要明白这个道理。代码审查的第二个易犯的毛病是,人们觉得有压力,感觉非要说点什么才好。你知道作者用了大量的时间和精力来实现这些程序——不该说点什么吗?不,你不需要。只说一句“哇,不错呀”,任何时候都不会不合适。如果你总是力图找出一点什么东西来批评,你这样做的结果只会损害自己的威望。当你不厌其烦的找出一些东西来,只是为了说些什么,被审查人就会知道,你说这些话只是为了填补寂静。你的评论将不再被人重视。第三是速度。你不能匆匆忙忙的进行一次代码审查——但你也要能迅速的完成。你的同伴在等你。如果你和你的同事并不想花太多时间进行代码复查,你们很快的完成,那被审查者会觉得很沮丧,这种代码审查带来的只有失望的感觉。就好象是打搅了大家,使大家放下手头的工作来进行审查。事情不该是这样。你并不需要推掉手头上的任何事情来做代码审查。但如果中途耽误了几个小时,你中间还要休息一会,喝杯茶,冲个澡,或谈会儿闲话。当你回到审查现场,你可以继续下去,把事情做完。如果你真是这样,我想没有人愿意在那干等着你。以上就是对Google是如何做代码审查的以及代码审查有什么作用全部内容的介绍,更多内容请继续关注站三界导航!
对于常年在网络上面摸爬滚打的站长来讲,会有意识的注意和规避网站建设中隐含的问题,但是对于新手站长和普通企业而言,则缺乏对这些猫腻的有效认知。一个普通的企业展示网站,800元可以制作,8000元也可以制作,这里面的技术含量肯定是有不同的,那么模板建站网站真的又好又便宜吗?免费便宜的模板网站有哪些缺点?下面我们来看看吧!一些客户说现在市面上定制类的网站建设制作价格有些贵了,还不如找个免费模版建站服务,一年也就几百块钱。这里要说一下的是,王晴儿想问大家一个问题,企业有没有算过定制网站和模版网站哪个更优惠?从长期角度来算,定制网站做好后这个网站拥有权就是企业的,以后每年你只要交域名和空间的费用,网站建设的费用是一次付清的,一般费用两三千就可以搞定。但是模版网站,域名空间费你也要自己给,模版每年还要给使用费,开通更多个性化功能每年也要缴费,不交费了你的网站也就没有了。模板建站网站真的又好又便宜吗?带着这个问题,下面,我来带大家了解一下,免费便宜的模板网站有哪些缺点?缺点一:免费的模板网站没有策划和设计。有些企业会使用通用模板,或自助建站软件,改改图片,或者只是改了个网站标题、联系方式,可能一会功夫就能做到。但是,你有没有想过一件事?那就是这样的网站一天可能会产生无数个,一点没有企业个性特色可言。情节更为严重的话,如果不良服务商采用盗版而来的模版,那客户可能会因此而陷入版权纠纷,对公司形象造成很大的负面影响。缺点二:便宜的模板网站一般都使用不合规范的域名主机。用不符标准的空间存放客户网站,甚至是自已买一台普通电脑充当网络服务器,要知道这样的服务器漏洞百出,随着使用的人数增加,网站的浏览速度会越来越慢,稳定性、数据安全性就得不到任何保障,再便宜也是没有意义的。缺点三:便宜的模板网站设计制作水平低下,可以说是粗制滥造。一味追求便宜就会换来品质的下降,对于大多数公司而言,做网站无外乎为了辅助营销以及提高企业形象,当然提高形象的目的也是为了辅助营销,广告做得再好,吹破天了,但是自己的门面却跟不上来,相信营销效果就会大打折扣。缺点四:低价的模板网站一般都没有为网站优化做准备。为节省成本的需要,低价的模板网站是不会帮你设置搜索关键字,甚至会直接采用别人公司及产品的关键字(采用网站模板调用),这样的企业网站一般不会被搜索引擎所喜欢,获取百度关键词自然排名和流量都会下降,看似省了一些建站费用,但是你可能不知道的是,你其实损失了一些本来属于自己企业的客户,是不是感觉有点亏大了?缺点五:便宜的网站维护、售后服务都没有保障。因为比较低的报价不可能含有完善的售后预算,服务提供商一般也不会提供及时的网站维护等良好的售后服务。缺点六:模板建站网站真的不一定便宜!以前有朋友在某个论坛无意间看到了某模板建站网站广告,广告内容是399元送网站,送优化。结果那位朋友就看到价格便宜吸引,然后开始尝试开通。从开通到等待网站做出来以后,发现网站很多功能都是没有的,服务器也不稳定,然后跟服务的客服人员理论。可对方给出的却是一大堆成本理论出来,说改这个要钱,开通那个要加钱。后来朋友没办法,因为域名已经注册,并且模板网站已经上传了好多信息资料,可以说为此孤注一掷,不愿意花钱及浪费时间找别的建站外包服务商。结果,经过沟通,我那位朋友做一个站不只是花费了399元这么简单,给该网络公司宰到了1000元左右才算完成网站,而且以后每年都要续费上千元不等。谈到免费、低价,王晴儿还是奉劝大家那句已经听得起茧的话,这天上掉馅饼的事情是几乎不可能发生的。不要一味的只知道省钱,做网站也好,弄互联网项目也罢,还得找专业靠谱的服务商量身定做才行。