论坛1 | 数据时代的技术与应用 曹洪伟 「tataUFO的大数据应用与实践」



  • 时间: 2016年7月28日
    发言人: tataUFO CTO 曹洪伟
    主题: tataUFO的大数据应用与实践


    我是来自tataUFO的曹洪伟,大家都叫我老曹。老曹有多老呢?我是一个70后,20年的码农了,95年大学毕业。很凑巧,tataUFO也是面向95后大学生的一个平台。

    0_1470627705669_841000065.jpg

    刚刚孔淼讲到所有的技术架构脱离了业务需求都是虚的。实际上不但是虚,而且是扯。我要跟大家分享的内容比较简单,也很轻松,主要是介绍一下tataUFO的产品、服务以及应用大数据的情况。大数据架构既要支持分析系统,比如像诸葛io的这种分析系统,更主要的是支持业务系统,数据用来为客户服务。

    0_1470380488575_upload-605a927f-59a6-48ee-a6e6-6855a36a3b82

    今天我要讲的三部分:tataUFO的产品和服务、我们的大数据应用实践、我们的技术演进。

    0_1470380515079_upload-ef63f640-0518-41ff-a496-754056da4524

    tataUFO的产品和服务。大家想想在社交圈子里找到一个知己是一种什么样的感受呢?我们的社交圈子都比较大。对于90后的大学生而言,他们找到知己的情况是什么样的呢?

    0_1470380540127_upload-a56202e8-ee45-4e9e-8187-95affbc99078

    这是tataUFO上一个真实的故事。去年5月份,两个济南的学生在tataUFO上相识了,后来他们共同进行了人生选择,今年6月份毕业去南方读研,他们想一直走下去。左边是他们在微博上秀恩爱。

    tataUFO不仅帮助大学生找到红颜知己,还可以找到其他的知己。有很多铅笔画很好的,他们可以结伴同行。有很多喜欢C罗的,可以在tataUFO上聊刚刚结束的欧洲杯。

    0_1470380558799_upload-31c62285-d400-409d-8fb3-c75593a44565

    一个大学生遇到知己的可能性有多大呢?全国有2800万的大学生,以同城为例,北京有60万。如果你认为知己是唯一的,可以找一个靠谱的你觉得情投意合的知己的概率是1/60万。那么如何压缩和减少这些青年建立连接的机会成本呢?这就是tataUFO的价值所在。

    0_1470380584843_upload-a7e7c54a-e7b6-4fde-a255-097a980b5eb7

    tataUFO的诞生过程和Facebook类似。FB诞生在哈佛,tataUFO的创始人毕业于北大。目前用户量有300多万,以95后大学生为主。

    0_1470380597492_upload-ff696712-d140-4ac7-bf88-4a2010f6a2df

    这是tataUFO客户端的展现形式,我们只是移动的APP,没有网站平台。

    0_1470380611155_upload-8179410c-1058-432a-8265-f8d12da908e2

    tataUFO的产品特色。每个产品特色都是跟后台的技术相关联的,是产品提给技术部门的需求。首先是十点匹配,每天10点的时候给你推荐一个新朋友。到10点的时候会有各种通知,push也好,站内信也好,新闻推荐也好;第二个是闪聊,增加和陌生人的沟通机会。第一是可以进行话题的自动生成;第二是把课题推送给用户,在闪聊室里,如果你不活跃,会自动被系统推出来,你再寻找其他的沟通机会;第三是发现式社交,主要是进行个性化的内容推荐;另外就是一些其他的常规服务。

    0_1470380626265_upload-8de510cf-0975-4540-bdb9-60db4273f59c

    下面要进入正题就tataUFO的大数据和实践。每一个人都有自己对大数据的理解。tataUFO的大数据不仅是真实中的现实数据,还是一种现象,更是一种技术。我们更多的从技术层面来考虑大数据。大数据有很多特性,包括通常大家定义的“3V”特性:规模性、多样性、快速性,分别对应着构成、空间、时间三个维度。后来又发展到“7V”,增加了合法性、可视性、真实性、价值性。

    0_1470380641430_upload-3930b3ad-e7b1-4336-80f9-98b14d2593e5

    tataUFO为什么要使用大数据呢?因为它是一个社交平台,数据比较丰富,基本可以对应到这七个特性。比如数据规模,每天的数据规模暂时不是很大,但也有十几个G;多样性,有各种的系统日志、多媒体文件、数据库、SQL数据;快速的响应,不同的反馈、补充;合法性就是怎么保护用户的安全,陌生人看陌生人、陌生人看好友、好友看好友,不同人之间看到的是不同的景象;可视性主要是对后台数据的呈现;真实性,很多大数据是真假并存的,但tataUFO都是实名注册,可以使陌生人成为知己;价值性,大数据的特点就是低密度,数据量越大,能得到的有用信息并不是很多;在tataUFO上体现最充分的就是数据的多样性,不仅包括用户的静态数据,还包括动态数据,就是所谓的用户行为数据分析。

    下面看一看tataUFO是怎么用大数据支撑业务平台的。我们通过三个重要的功能来讲。

    0_1470380659363_upload-9e035ea4-10d6-4974-b2a7-058fe4e54726

    首先就是每晚十点给你推荐一个新朋友。我们会通过各种技术手段来通知用户,或者说是通过固定时间推送和通知的方式来养成用户习惯。为什么是十点呢?因为十点是大学里的宿舍卧谈会时间,也是最适合推送新朋友的时间点。

    这是一个简单的推荐算法。从静态数据上看他的性别、年龄、姓名、家乡等一系列不变的数据。动态数据是你看了什么、看了什么内容、对什么内容感兴趣、跟谁请求过好友等等一系列信息,对这些信息进行聚类分析,做相似性评分。再经过过滤条件、优先条件的参数化,最终形成把这个人推荐给你的理由。它不是协同过滤,协同过滤一般是单向推荐,我们做的是双向的。经过重复算法,还是会有一些孤单用户,我们会对他进行算法补偿。在每天十点要完成一个Spark Job,实现匹配算法。这个Spark Job可能会跑几分钟,或者更多一点。

    Spark Job跟Map Reduce Job有一点区别:Map Reduce Job下面对应着的是task,Spark Job下面是,中间还有一个shuffle的阶段,再接下来才是task。在执行任务期间,那个时候认证过的用户,在Spark Job执行的同时,我们就开始用streaming 对某些数据进行处理,也就是通过Streaming对这些用户进行补偿。

    0_1470380686195_upload-1a121683-386a-411d-b2ef-b754b87f90b8

    每天十点,流量会暴增,会带来各种各样的问题。这就涉及到传统数据架构的“Capacity planning”即流量规划。在传统方式上这个时候只有两种可能:或者进行冗余,也就是资源利用率变低;另外就是不够用,导致挂掉。但是这个时候我们就会借助青云的弹性,一个是带宽的弹性,另外一个是后台服务的弹性。青云后台服务弹性是基于QoS的,通过SLB观测后台服务器的状态。如果响应时间短,服务质量下降,它会给你一个弹性。实际上这并不能充分满足我们的要求。我们的要求是防患于未然,在有迹象表明可能会出现问题的时候就要预先实现弹性,所以我们就用青云底层的API架一个服务器,监测各种服务资源。

    0_1470380701697_upload-030eac18-8713-467b-b48a-0a8306e5b14b

    是不是在SLB上设置了弹性就可以完全实现弹性的呢?其实还是有问题的。这跟服务相关。弹性还跟成本相关,原来很多系统都是放在一台服务器上,弹性的时候相当于各个服务的设备利用率是不一样的。这个时候就涉及到一个概念,就是微服务的重构。我们从去年开始对系统进行重构,用户账户的系统、内容的系统、消息支持系统等等一些列服务拆分出来提供微服务。如果说Architecture是宏观的概念,面向对象的编程和设计是一个微观的层面,那么微服务是介于两者之间的,可以作为中观的认识。

    0_1470380717267_upload-1050d299-1f53-48ab-944c-8e5a7e9bb46f

    有了微服务,问题又来了,就是各个微服务之间的通信。起来一个服务,它会依赖其他的服务,需要通信,通信的时候就涉及到服务的发现。比如内容服务器要访问用户系统服务器,本来内容服务器已经变成多个了,新起的是指向原来的,还是指向新的?这个时候就需要微服务发现,我们用了统一的配置管理,就是青云的ZooKeeper。

    0_1470380728744_upload-ad8fdd17-9d98-4be1-b4b8-ce9b2087f4bf

    刚刚谈过了十点匹配,大数据是怎么支撑的以及在青云上的应用。下面谈闪聊室。闪聊的“闪”主要是让你接触到更多的陌生人。聊就是“IM”,是我们采用的第三方服务。

    0_1470380738740_upload-0eb31968-eeaa-4ffd-80b9-51c5d19142ee

    用户在闪聊室认识了,我们会根据大数据提供一个话题。陌生人的沟通,我想认识你,我说点儿什么?这一点就是破冰的主题,也是通过大数据自动生成的。它的数据源就是用户发布过的内容、评论以及原来IM沟通中的信息。把数据采集过来以后做自然语言处理、分词、数据清洗、LDA算法、生成备选话题列表和相关内容。这个时候还增加了人工干预,生成的话题怎么提炼,让它更吸引人,符合大学生的语言表达习惯。最后就生成破冰的主题,也就是闪聊室用的主题。

    0_1470380752234_upload-3035a4b7-be5c-4632-8074-e5e5b6f796f2

    在生成主题以后,我们也可能对一些精品内容、热点内容进行补充,人工干预的时候可能会对话题加图片、视频等,这些数据我们都会存在非结构化数据库中,就是青云的Mongo DB里面。接下来就是怎么把闪聊室推荐给对这个主题感兴趣的人。那么首先要对用户的特征进行预处理,也是一个Spark定时任务,处理之后生成闪聊室的象限空间,两者做相关性计算,得到评分列表。最后,当客户登录到tataUFO的时候就会得到他可能感兴趣的内容的闪聊室。

    0_1470380770303_upload-9f093277-b096-464f-9ef1-8a013c2a1712

    第三个是个性化的内容推荐。社交是人和人之间的关系,引入了内容以后就变成了多方的网络,多了一个维度。个性化内容推荐就是通过内容的形式建立起人和人的多维度连接。

    0_1470380783102_upload-f37cb59f-6663-4c3f-a8bc-925ffc70d5c1

    引入了内容之后,我们可以建立一个二元的数据模型,也就是人和内容之间的关系。定义了人和内容这两个研究对象就可以评估每条社交内容的价值有多大。信息内容本身包括:信息量是多少、表现形式是什么样的;人对信息的直接反馈,最常见的点赞就是你对这个话题的态度,评论、传播和分享是更强烈的交互。信息对人的影响则分出八个维度,相关性、显著性、共鸣性、严重性、紧迫性、确定性、信源、娱乐性。

    0_1470380877821_upload-a1bfd5b5-b90c-41ad-a09e-0f3a0b8ea41a

    当我们定义了通过哪些维度去描述这两元的数据,我们可以做一个简单的线性模型。比如对内容自身,我们可以用一个简单的线性方程,用户对内容的反馈又是一个简单的线性方程,内容对用户的影响又是一个简单的线性方程。线性方程最简单,特别适合大数据计算。虽然简单,但是变量很多,加上系数相当于权重,是调优使用的。每个变量的计算都不是那么容易的,要用到大数据的方式,无论是向量计算,还是矩阵的点击相乘。

    0_1470380889437_upload-901a56bc-ac3b-45bd-8883-60eae741cb06

    数据的采集与传输我们引入了LEK。因为我们在用LEK的时候,青云还没有提供相关服务,我们就自己搭建了一套LEK的环境,就是LogStash。刚刚看到青云的周小四已经将它列入了开发计划,等青云上线的时候我们可能会进行迁移。用LogStash采集各个服务器上的数据。ElasticSerarch是一个NoSQL数据库,可以建立多维索引。Kibana是一个可视化的环境。消息队列应用的是青云的Kafka。我们把LogStash嵌入应用服务器,通过订阅的方式直接传到Kafka上去,一方面用于流式计算,另一方面,通过LogStash Agent把它存到ES里面去。传输完成之后,我们再来看看我们是如果做推荐的。

    0_1470380905414_upload-1de586f1-4b27-416d-bc7c-084b083626f2

    tataUFO基于Spark的个性化推荐系统。定制任务用的是Azkaban。Azkaban是原来在Hadoop上定制任务的方式,既可以做线上任务,也可以做离线任务,它是流程管理,可以做到项目依赖。左边是在Azkaban上的一个Job,如何生成内容价值的例子。

    0_1470380915523_upload-205095f9-fe57-401d-9f12-562070b5219c

    后边是Spark的典型的流式计算,数据从kafka进来之后,配合Spark的微型批处理,切成以秒为单位的若干段,把数据转移到RDB中,进行transform。这就是简单的个性化推荐的实时处理,保证每个用户刷新的时候得到的是类似今日头条的实时的推荐内容。

    0_1470380959748_upload-90b19a55-3bac-4f9b-9129-dd4fa221b67d

    刚刚介绍了我们通过大数据支持的三种业务,现在涉及到高可用性的问题,这对于小公司来说是非常关键的一个问题。tataUFO的高可用性是依赖于青云大数据平台自身的高可用性实现的,比如数据库的高可用性、通过弹性实现的服务的高可用性。青云的MySQL已经做了HA,以前我们做MySQL的高可用性要做双主,迁移的时候就比较棘手。青云的MySQL的高可用性做得还是不错的。

    0_1470380979270_upload-34f6d109-2770-485f-b089-b6aec3271c74

    tataUFO是一个典型的应用,没有涉及到特别高深的技术。总结起来包括几个方面:一方面是面向微服务的逻辑架构,如果想充分的利用云,最好把业务做成微服务的形式,无论是部署,还是弹性、DevOps的方式都会变得轻松起来;基于青云的弹性伸缩,再自己写一些东西进行补偿;主要是采用Spark的推荐系统;把LEK、LogStash、Elasticsearch、Kibana融合到整体的结构中;最后是多种云服务的混合云服务。通常来讲企业同时使用公有云和私有云是混合云。我尝试定义一下我理解的混合云,它是为了满足用户需求而使用各种云服务,或者说使用多种云服务来满足用户需求的IT架构。架构有很多维度,不同视角有不同的呈现形式。比如数据架构、运行架构、开发架构。

    0_1470380995057_upload-c400c883-6252-458a-a66c-4a7beda0bce5

    下面跟大家分享一下tataUFO的拓扑架构。从iOS、Android终端到SLB和青云的VPN。我们开始使用青云是搭了一个Dev的环境。之后会写一个脚本(当时还没有用到青云的资源编排,是自己写的一套脚本),复制一套Dev的系统,变成测试环境。从测试环境衍生出正式的生产环境,也就是产品服务。这里有若干的服务器,比如说推荐、UGC内容生活和提取、Account用户,还有一些portalet服务器,就是在混合编程和微信分享的时候用到一些H5都可以独立部署到这个服务器上。这里的config不是统一后台管理,而是为了前端服务的,也就是说我想做AB测试,我想把这些人给这些人,把一部分人给另一部分人,之间采用不同的算法,如何比较其中的结果,那一点的配置是通过config实现的。下面又引入了Scheduler就是Azkaban的平台,它有一些常用的短信、下载功能。底下是一些数据库。最有价值的就是这些不同的云服务:Hadoop平台、Spark和ZooKeeper。同时我们还饮用了很多第三方的云服务,对象存储、IM等。云时代使小团队做大事情成为可能。

    0_1470381015757_upload-497143d0-2231-4adc-b7e1-80e9d6381f96

    tataUFO接下来的技术演进。我们会进一步探索Lambda架构;同时,随着青云不断推出新的服务,考虑把一些我们自搭的业务迁移到青云的服务,比如HBase;推荐评估,如何评价推荐系统的好坏,建立线上评估A/B测试集,除了双向比较,最关心的还是线上用户的真实反馈;然后就是机器学习,我们现在的机器学习还是比较基本的算法,没有对算法做更深入的研究。我们现在正在做onlina的LDA,开源的版本可能还有各种问题,需要根据系统环境和数据形式做深度定制;另外我们在尝试深度学习,要挖掘人之间的关系,包括图形化的数据库,实际上就是用图的形式表现社交中的多边关系。如果各位对这些技术感兴趣可以直接联系我,欢迎大家加入tataUFO。

    谢谢大家!



  • @Xuanwo 有视频吗?



  • @jmzhuzhonghua 会有的,目前正在整理和剪辑中


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待