微信微粒贷里没有微粒贷,是说明自己还不是受邀用户吗

作者:桑文锋神策大数据的来源创始人&CEO,前百度大大数据的来源部技术经理2007年浙大研究生毕业后加入百度,从2008年开始从事大数据的来源方向从零构建了百度的用户ㄖ志大大数据的来源处理平台。2015年4月从百度离职创建神策大数据的来源,帮助客户实现大数据的来源驱动目前,面向互联网创业公司嘚产品神策分析的客户包括爱鲜蜂、多盟、AcFun、秒拍等

2008年底,我开始在百度负责一个日志统计的小团队开发了一套基于Hadoop的日志统计平台,结果一年半的时间统一了全百度的日志统计工作之后一直围绕大数据的来源这一方向,覆盖大数据的来源的采集、传输、建模存储、查询分析、大数据的来源可视化等打造了全百度的用户大数据的来源仓库(User Data Warehouse),并推动全公司核心业务线的日志源结构化(Protocol Buffer)这篇文嶂讲述我在百度从零构建大大数据的来源平台方面的经历。

首先我们回到2008年。那个时候我是属于百度搜索新产品部的,像知道、贴吧、百科等都属于这个部门的产品。部门里有个小团队叫Nslog一共四个人,其中两个是实习生所负责的工作就是部门内的各种需求统计。

統计的方式是这样的各个产品线的业务人员按照需求文档的格式要求,填写统计需求提交到需求管理平台上,Nslog的团队负责人(开始不昰我负责)每周末将需求分别分配给团队的几个成员。每个成员拿到需求列表之后就挨着做。需求的实现一般都是写 Perl 脚本,那个时候 Python 还没流行起来因为统计需求比较类似,一般都是拿一个已有的脚本复制一份修改一下,测试逻辑测试大大数据的来源量下的准确性,然后部署到线上去一共有20台机器跑统计脚本,每台机器上都用Crontab配置天级的例行任务每个统计脚本的逻辑大概是这样的:通过Wget从大數据的来源源服务器上抓取按小时切割的日志文件,完成后跑统计逻辑,将生成的结果组织成HTML表格邮件发送给相应的团队。如下图所礻:

(图1 使用单机脚本跑统计)

这种模式有以下几个问题:

(1)需求响应周期长:从拿到需求要和需求提出者确认需求细节,找一个类姒的脚本修改测试逻辑正确性,测试大数据的来源正确性安排运维同学部署上线,平均每个需求要2天时间这里还没算需求的等待时間,这可能要等一两周
(2)运维成本高:20台统计服务器,每台机器通过Crontab管理了几十个脚本这些脚本之间,可能还存在依赖关系比如淩晨4点跑的一个脚本B,依赖于凌晨2点启动的某个脚本A如果脚本A挂了,脚本B还是会正常的启动恢复任务非常麻烦,真是牵一发而动全身运维同学经常抱怨就没有哪一天能睡好觉的。
(3)运行速度慢:因为每个脚本只能单机运行对于像知道、贴吧这样的大流量业务线,烸天原始日志就有好几百G光跑个排序就得好几个小时。特别是像贴吧被人爆吧大数据的来源量一下子就会增加很多,统计结果跑不出來如果分成每台机器跑一部分,维护代价非常大
(4)职业发展瓶颈:那个时候还没有大大数据的来源的概念,大家对大数据的来源的價值也没现在这么认可甚至连招聘面试时,也是把能力一般的分配到统计团队而写脚本满足需求这样的工作是很枯燥的,对一个新人写上三个月会觉得能学到不少东西,写六个月就开始反感了,写一年就坚决要求转岗或走人了。

当时我们的技术经理(同时管理了知道、百科、Nslog 三个团队)就觉得要做一套系统首要解决运维成本高的问题但已有团队的人员光满足需求都忙不过来了,就从百科团队借調了两个人(不包括我)那时候的我刚从百度知道转到百科团队,正想在百科团队大干一场借调去的两个人其中一个是校招新人,我嘚项目经理就安排我也参与到项目中培养新人的成长。于是我们三个人开始梳理需求和考虑设计方案

设计一套日志统计平台的需求来源主要是Nslog的研发和运维同学,整理了好几十条并出了一个基本的方案。我当时觉得实现一个提升运维管理的系统不难难的是怎么是好鼡的?我很关心怎么提升需求处理的效率问题这个时候其中一个人又被调到了一个基础库团队。也就是做这件事的就只剩我和校招新人叻而我们两个都还没做过需求处理,也不知道那几百个脚本里面都写的什么玩意儿我说咱俩每人至少要看三个脚本,再抽查一些看看这些脚本都有什么规律没有。我研究了之后发现还是有些规律的。

我发现常见的统计有这么三类:

(1)计数统计:那个时代是流量时玳许多统计就是算PV(Page View)。一般是在 Apache Web Server日志中去用正则表达式匹配满足某些条件的记录,做计数
(2)去重统计:比如独立 IP 数,独立用户數等
(3)Top N统计:比如昨天检索量最大的100个Query是什么。

我就问一直做统计的一位同学这三类能不能占到所有统计需求的80%,他想了一下说有嘚于是我就说咱们只要设计的系统,能够将这部分的需求处理工作量降下来我们的系统就是成功的。这个时候技术经理又从其他团队借调了一个前端同学过来支援几周我和校招新人都不会前端开发,这事儿没专业的人来搞不定在接下来的两周时间,我就和前端同学研究怎么设计这部分的抽象前端同学先提了一个方案,类似于 Dreamweaver中的页面HTML编辑界面点选一个元素,可以进行修改配置我觉得这种方案,还没直接写脚本效率高呢

我从awk脚本语言获取了灵感。在awk语言中都是awk condition { action } 这种模式,就是condition定义了满足的限制条件action是执行的操作。比如:

僦是把test.txt中满足第6列等于 “Nov” 的记录,计算第5列的求和

对于常见的那三类统计需求,都是一种统计类型加上一堆限制条件。为了降低限制条件的难度我让所有的条件之间只支持AND操作,不支持OR操作我们知道AND和 NOT完全可以表示出来OR。

设计出来的效果是这样的:

(图2 简单编輯界面)

上面是一个去重统计的例子我选择一个日志源,点击“去重统计”按钮生成一个模版,填写限制条件一个统计任务就生成叻。这里没有显示出来的是每个日志源,都有一个对应的agent函数所做的事是一段解析程序,将原始日志解析成若干个变量如图中的去偅字段部分,类似“_UserId”这样在统计模板中就可以直接使用了。这样做了之后可以让一个统计任务的开发工作量,降低到5分钟

还有一個问题是计算性能问题。

当时Hadoop刚推出还只是测试版。对于它能解决多少问题我们心里是没底的。在百度内部已经有少量的需求在尝试使用手工写 MapReduce 代码的方式。我也尝试写了一个还是比较容易的,但有一定的学习代价系统部有一个团队,在负责Hadoop 的维护为了保险,峩把底层计算接口设计成两套同样的代码,既可以提交到Hadoop又可以提交到单机。在单机上用脚本串起来模拟在集群上的运行。Hadoop本身支歭将任务分割为Mapper和Reducer两个阶段我又增加了一个Computer阶段,作用是将Reducer的结果(一般是统计数值)拿到执行机(分布式提交任务的节点)并将其插入到大数据的来源库。我当时的想法是如果Hadoop不靠谱我就把这20台单机,组成一个小集群管理提交的任务。当然这样的话就实现不了單个任务的分布式化了。

(图3 初版日志统计平台架构图)

其中Code Engine和CWrapper是我设计和实现的Scheduler和大数据的来源库表设计是校招新人实现的,Web UI是后来加入的实习生花了一周时间找了个网上的模板改的日志的上传是运维同学开发的。为了说服运维同学完成部分开发工作承诺让其将所囿的大数据的来源上传之后,再更新大数据的来源库里的大数据的来源源就绪状态

在这个系统实现中,我们把PHP用到了极致Web UI是PHP的,后端嘚几个模块是 PHP的就连生成的 MapReduce代码,也是PHP的有人可能会对PHP的运算性能有疑问,当时负责Hadoop维护的同学为了推动更多的人使用承诺我们100多囼机器随便用,不用考虑性能问题缺机器了他们直接申请加,我们就没这方面的考虑PHP 的开发效率还是很高的,我的 Code Engine 实现任务配置到 MapReduce 代碼的编译最初的版本只花了我2个小时,140行代码

就这样,一个伟大的系统经过两三个月的时间拼凑完成了其实到快发布,还没有名字有一天经理问我叫什么,我说就叫 Log Statistics Platform的前三个字母LSP于是就有了名字(之后我为了方便记忆,让大家把平台叫做 Log 平台)

(1)需求响应周期大大缩短:因为对常用的三类统计做了很好的抽象,即使产品同学都能直接配置统计任务开发周期从2天时间降低到5分钟。并且统计需求的处理完全交还给了各个业务方,没有了需求等待时间
(2)运维成本大大降低:由统一的系统进行任务的管理,具有依赖关系的管悝大大降低了出错带来的恢复成本。
(3)运行速度飞快:我现在仿佛还能回忆起从平台上提交第一个任务时的感觉以前几个小时才能跑完的任务,只需要几分钟就跑完了我之前担心的 Hadoop 不能覆盖所有统计需求的问题,也不存在
(4)组员积极性变高,终于在干一件有点技术含量的事了

平台在2009年4月正式发布后,各个团队的需求铺天盖地而来日志源的中转上传很快就成了瓶颈。都是所有的日志源完成上傳后才开始统计计算,这样上传期间的几个小时时间就白白浪费掉了我们首先将日志上传改成每份完成后单独打就绪标记。后来有次囷 Hadoop 团队的同学沟通我就提起能不能每个 Mapper 作为一个日志抓取的任务,这样可以让100多台机器同时抓大数据的来源他们说没问题,已经有团隊这么干于是我们很快上线了新版本,实现分布式的抓取

(图4 分布式抓取架构)

这时候的产品,已经是一个比较完整的产品了我开始在公司范围内推广。本来公司里有十几个类似我们的统计团队我就是要说服他们把任务迁移到我们平台。记得很深刻的一次是和网页搜索部的统计团队沟通他们看了演示之后很震惊,说本来他们只是在设想这种系统的可能性没想到你们已经做出来了。当时我们又入職了一位同学专门负责响应需求有一天,业务部门的同学反馈说不能加他好友了(我们用的是百度自己的聊天软件 Baidu Hi)我们就找 Hi 团队的哃事咨询,他们说这位同学到了好友上限2000人之前还没遇到过这种情况。他们的解决方案是修改人数配置重启整个 Baidu Hi 服务。

在整个推广的過程中我就像拿着一款先进设备,去拯救那些水深火热的人们我们一边推广,一边完善整个平台

从最开始平台是为统计而生,但我漸渐的发现统计只是一类需求,其他Hadoop任务也可以通过我们这个平台管理起来。我就想将Log平台发展为Hadoop的壳所有提交给Hadoop的任务,都能通過Log平台管理起来Log平台演化成一个通用计算平台。

我前面提到通过三类常见统计的抽象来解决80%的问题。但当这80%需求解决之后你会发现叒有新的80%的需求冒出来。如果让用户直接写MapReduce任务提交这个代价太大了。平台开始上线时提交任务就支持两种模式。一种是简单编辑僦是前面的三类抽象(后来加了更多的类别)。一种就是复杂编辑直接贴MapReduce代码。对于后者如果能抽象一个更好用的计算框架,将MapReduce隐藏起来显然就又可以提升开发效率了。

我就安排一个工程师(目前是我的合伙人之一)出一个方案只用了一周时间,就设计出来原型了下面是个例子(我们叫它 DQuery):

对于一个输入,我们可以去选择某些字段进行分组,每组在计数然后输出到一个文件。这样就实现了┅个统计任务这种链式的处理方式,在现代已经很普遍了特别是 Spark 里都是采用的类似表示方法。我们在2009底做了这个事情在2011年公司号召哆提交专利时,提交了发明专利今年3月初时,专利刚被审核通过这种将大数据的来源流式的进行变换的思想,已经见诸于各大分布式計算系统

在给出 DQuery 原型后,我觉得团队太弱小了只能有一个全职参与这件事。于是找基础库团队的同学寻求支持他们最开始提出何不實现一个 Google Sawzall,但我觉得太底层了最终说服对方安排一位工程师参与进来。结果就是他们两个人花了2个半月就把这个语言开发出来了。

可能你会问为什么当时不选择使用 Hive事实上,那个时候 Hive 的工程师也来公司交流和推广了但有两个需求不好满足:
(1)任务合并:对于同一個大数据的来源源,可能有几百个统计任务这种统计任务可能都很简单,但是都要将大数据的来源源读取一遍也就是一个高 IO 低 CPU 的任务。我们当时想直接读取一遍然后将多个任务同时计算,这样效率会高很多这在 Hive 上是不支持的。
(2)用户行为分析:我当时比较乐观覺得我一年解决统计问题,第二年解决分析问题第三年解决挖掘问题。事实上到现在分析问题也没解决彻底我们知道 Hive 是基于 SQL 的,而 SQL 是仩下文无关的也就是说你取出的一批大数据的来源,有前后关系的话是很难操作的。我需要在语言上支持而在 DQuery 语言中,我们设计了┅个方法叫 process可以嵌入用户的逻辑,非常灵活这里要说的是 DQuery 是一个基于 PHP 语言的框架,这样 DQuery 表达不了的都可以写原始 PHP 代码。

就这样到2010年底的时候实现了全公司日志统计全部统一到 Log 平台。这是我在百度八年干的最有成就感的一件事情。

转眼到了2011年初那个时候团队已经匼并到了网页搜索部的相关性部门,我感觉这不利于发展我的想法是要把团队面向全公司服务,甚至成为像 NLP(自然语言处理)部门在厂長心中的地位但网页相关性部门的上司觉得先服务好本部门就够了。我和基础架构部的一个经理(最早在百度负责维护和开发 Hadoop 团队的负責人在他完成了 Hadoop 在全百度的推广之后,改为负责一个分布式存储团队了)商量了一下觉得两个团队合并,成立一个专门的大数据的来源团队是一件更有意义的事。两人一拍即合基础架构部的老大又从 Google 挖来了一位专家做我们团队的负责人,他之前在 Yahoo 做了7年Google 做了5年,┅直在做大数据的来源仓库绝对的资深专家,我很崇拜的人

记得在2011年的7月1日,团队开了个All Hands大会公司 VP 在讲话中说:在中国是 D 说了算,茬百度也是 D 说了算后一个 D 是指 Data 。说起来在百度这八年百度文化有29条,我第二喜欢的就是“用大数据的来源说话”大数据的来源虽然囿欺骗性,但总的来说有大数据的来源要比没有大数据的来源好它不带有感情,冷静客观就这样,我们 DataTeam 成立了或者叫 DreamTeam。团队的一线囚员一共二十来个超过一半是我之前的下属。

有新总监的领导我们的思路完全被打开了一圈。但在最开始我们的思路依旧有些混乱,之前的产品还要维护想做的新东西很多,我们似乎没有一个中心眼看到了国庆,有一天我问新总监他觉得什么最重要如果只挑一件事情的话,他说是 UDW(User Data Warehouse意为用户大数据的来源仓库)。我说那咱们核心成员就用来做这个项目于是我迅速将 Log 的核心成员,抽调到了这┅项目在之后的三年里,我的主要精力可以说都是围绕它展开的

在新总监来到百度之后,很快发现了我们的大数据的来源源真叫一个混乱公司有上百个业务线,每个业务线的大数据的来源格式都是不同的如果你要基于所有的大数据的来源源做一个业务,比如个性化嶊荐那么需要和所有的业务线沟通大数据的来源格式,并维护这条飞线相比之下,在 Google 大数据的来源源都是被规范管理的使用 Protocol Buffer 来规范夶数据的来源格式。新总监认为我们要先把大数据的来源源给统一起来形成一个好的大数据的来源基础,后续的大数据的来源分析完全依赖于它

对于这种思路,我是有疑虑的在2009年的时候,我就做了一个叫麦哲伦的用户行为查询平台通过输入一个 ID,返回用户的行为记錄主要包括知道,百科贴吧之类的产品。当时的做法是我把每个产品线的用户访问行为比如在百度知道提问,用一个 Action ID 来标记这个荇为有一系列属性。对于有些属性我还和业务线建立了专门的接口,用于获取这些属性的具体内容比如通过问题的 ID,获取到问题的标題以保证行为记录的可读性。这个系统是很快建立起来了但被使用的频率非常低。花很大精力整理的大数据的来源似乎一时半会儿看不到多大价值。还有个问题是业务线的大数据的来源格式变更我的大数据的来源处理逻辑都要更新,很难维护所以这种思路被重新提出时,我最顾虑的是做出来之后有什么用在应用点不明确的时候,我们是不是该做这件事但新总监在公司层面很快推动达成了一致,总之是公司支持做这件事情执行从来不是我的问题,既然都确定要做了我很快就带着团队做起来。最开始选择最核心的八条业务线在2012年的 Q1 季度末,正式对公司内部发布了

UDW 做了一件事情,将全公司的每个业务线的每一种用户行为定义为一种 Event,这个 Event 包括一系列的属性核心的是 UserID,Event Type事件相关的其他属性。这样一个用户在百度的任意行为就统一到了一张表上。再有人想做大数据的来源分析就可以矗接用干净统一的基础大数据的来源了。

从大数据的来源角度来看是一个金字塔:

最底层是上百条业务线的文本日志,通过 LogFormat 转成 Protocol Buffer 格式茬此基础上,构建 UDW在 UDW 基础之上,我们构建围绕各种主题的大数据的来源形成 DataMart。比如基于 Query 的基础大数据的来源再进一步汇聚,就可以鼡于 BI 的 Insight

这里我总结一下 UDW 思路的优缺点。优点是为上层应用提供了一套统一干净的基础大数据的来源上层的使用变得非常简单。一个广告团队仅仅是将大数据的来源源切换到 UDW,就提升了接近20%的收入更何况以前在做个需要多个业务线大数据的来源源的应用,只需要和我們 UDW 打交道这减少了多大的工作量和沟通成本。

不好的地方是源头的大数据的来源并没有变更我们中间是通过 ETL 过程将大数据的来源接入箌 UDW 的,而这个过程工作复杂难以维护具有很长的滞后性。并且因为多了一轮计算实效性也降低了。一些业务线开始抱怨对 UDW 产生了严偅依赖,特别是相对比较独立的业务线做这件事完全没什么好处,还不如根据原始大数据的来源来计算

在这之后,我又带着团队完成叻核心大数据的来源源的日志 Protocol Buffer 改造并构建了新的传输、查询、调度系统。在2012年初老大给我讲 Google 那边能够打了日志马上就可以分析我都觉嘚很不可思议,那时候百度的延迟至少是小时级的可经过两年多的努力,我们也达到了这一点以上是我的经历分享,希望能够给读者啟发少走一些弯路。


2016)将于5月13日-15日在北京举办今年大会特设“中国Spark技术峰会”、“Container技术峰会”、“OpenStack技术峰会”、“大大数据的来源核惢技术与应用实战峰会”四大技术主题峰会,以及“云计算核心技术架构”、“云计算平台构建与实践”等专场技术论坛大会讲师阵容囊括Intel、微软、IBM、AWS、Hortonworks、Databricks、Elastic、百度、阿里、腾讯、华为、乐视、京东、小米、微博、迅雷、国家电网、中国移动、长安汽车、广发证券、民生銀行、国家超级计算广州中心等60+顶级技术讲师,CCTC必将是中国云计算技术开发者的顶级盛会详情访问

如果该内容不能帮助您请查看

inotifywait 昰Linux 内核子模块 inotify 的用户态接口实现,inotify 实现在 VFS 层当文件操作到达 VFS 层时,inotify 模块会将操作类型(创建/删除/属性改变等)和操作对象(文件名)反饋给用户态用户态的 inotifywait 即可将本次操作信息输出给用户。

点击查看更多也可以搜索更多关于常见问题

答:因为域名的访问者是来源于全國各地,而全国各地的本地DNS服务器缓存失效时间是存在差异性的

例如有的访问者本地DNS服务器缓存可能即将到期,本地DNS则会重新发起递归查询因此可以获取到最新的解析结果,所以会让您感觉有些地区解析生效时间快;而有的访问者本地DNS服务器缓存时间则可能刚开始计时本地DNS需要等到缓存失效才会重新进行递归查询并获取到最新的解析结果,所以就会让您感觉有些地区解析生效慢

点击查看更多,也可鉯搜索更多关于常见问题
诚信通用户支持以优惠价格购买多个.xin域名吗

每个诚信通用户仅能以优惠价格购买 1 个 .xin 域名,且仅能购买 1 年(跟诚信通产品的购买年限保持一致)

如您想购买多个 .xin 域名,请登录 阿里云域名 以正常的价格购买 .xin 域名以正常价格购买的域名,您可以自行修改注册信息、过户、解析、备案等操作

为方便用户操作,系统默认域名的注册信息是在诚信通会员通过企业身份认证后的企业信息鉯方便快速完成备案。所以域名购买和续费均在诚信通平台发起用户无法自行修改域名解析、修改注册信息、过户、以及转移域名注册商等操作。且该域名只能指向到诚信通的企业官网

点击查看更多,也可以搜索更多关于常见问题

说明 可自定义参数及其说明请参见 参数說明及设置方法

点击查看更多,也可以搜索更多关于常见问题

在绑定域名时出现这种提示可能是由以下两种原因导致的:

如果该域名巳经绑定在这个弹性 Web 托管主机上,重复绑定会出现此报错请您登录弹性 Web 托管控制台,在绑定域名页面查看该域名是否已绑定

如果该域洺已经与其他应用绑定,如 ECS会出现此报错。请检查域名是否已经绑定到其他应用如果是,需先删除该应用与该域名之间的绑定然后偅新尝试该域名与弹性 Web 托管主机的绑定。

点击查看更多也可以搜索更多关于常见问题

有多少的访问量这个最准确的夶数据的来源是通过其自身的百度站长平台就能得出,但是如果你不是网站管理者获取不到这类信息,只能通过第三方站长工具来大概嘚获取流量信息流量通常只能是参考,因为都不太准确5118、站长工具、爱站这类查看。

你对这个回答的评价是

下载百度知道APP,抢鲜体驗

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 微信微粒贷 的文章

 

随机推荐