揭秘网易大数据实践与基于微服务的应用架构设计实践

5月24日,网易携手中睿在深圳益田威斯汀酒店举办了“云服务、大数据应用实例&高效研发管理---软件研发沙龙”,来自深圳五百强企业的信息技术部骨干,政府、事业单位的相关IT领导,金融业的IT精英等近百位技术人员参与了本次沙龙的学习。

首先,网易数据科学中心技术总监余利华从以下三方面分享了网易大数据实践:

一、网易在大数据方面做了哪些事情;
二、网易大数据建设的思路;
三、网易在大数据方面的2个工具。

网易在大数据方面的工作

网易在大数据方面的定位是充分利用数据统计分析挖掘价值,大力推进服务智能化和决策科学化,全面提升产品的规划运营水平和服务质量。

服务智能化

余利华以网易云音乐为例,说明了服务智能化的具体含义。网易云音乐在推出的时候市面上已经有了数个亿级用户的音乐产品,竞争非常激烈,之所以能够脱颖而出,就是因为网易云音乐从一开始就将个性化推荐作为核心功能来做。音乐并不像其它文本类的内容,用户不太容易表达自己的搜索需求。我们可能都有过类似的经历,偶然听到的一首好音乐,再想去听的时候却找不到了,网易云音乐能够用个性化推荐帮你找到这些音乐,帮助用户发现一些意想不到的好歌曲,给你带来惊喜。目前,网易云音乐从APP首页到歌单、歌曲、私人电台等场景已经全面实现了个性化,是一个个性化推荐深入到骨髓的产品。

推荐是个系统工程,不仅仅是算法的问题,产品和算法必须紧密配合。云音乐通过UGC歌单和个性化推荐,帮助用户更好的发现音乐和传播音乐,大大的提升曲库利用率。

个性化推荐的原理是找到人与物之间的关联,在合适的场景下把合适的物品推荐给合适的人。 这里的物,可以是新闻,音乐,理财产品等等。把人和物关联起来的方式通常有三种:
通过人关联,与你相同喜好的人喜欢的物品,或你的朋友推荐的物品,你通常都会喜欢;
通过物关联,因为奶粉和尿布是有关联的,如果用户买过尿布,那么推荐奶粉给他;
通过特征关联,摇滚是音乐的一个特征,如果一个人喜欢摇滚,那么推荐摇滚歌曲给他。

通过关联,我们就召回了很多候选商品,它们都是有可能和人发生联系的。在召回之后,要进行过滤,比如你在最近七天买过一个商品,通常会将这个商品过滤掉。过滤之后,就得到一个候选商品的列表,这时候要对商品进行一个多维度的打分,把你最可能喜欢的商品推荐给你,这就是一个基本的推荐过程。

类似服务智能化的应用场景还有很多,比如邮箱反垃圾,客服机器人,反作弊,金融反欺诈,视频鉴黄等。

服务智能化通常的工作流程是这样的:

  1. 形成想法,想法可能来源于数据的分析,然后寻找特征,增加场景;
  2. 从特征中设计方案,引入算法,调整方案,进行模型的训练;
  3. 效果验证:一般分为离线评估,线上A/B测试两类,只有发现效果好的时候,才真正让这个算法上线。

决策科学化

决策科学化,是指让数据来辅助决策,比如投放广告的过程中我们通常会这样做:

  1. 找到目标用户:用户多维度分析,确定投放目标用户群体;
  2. 分析投放目标:基于投放群体,筛选投放渠道;
  3. 监控投放数据:实时监控投放数据,快速调整投放策略;
  4. 构建用户质量评估模型,评价用户质量;
  5. 评估投放效果:ROI评估,发现更优质的渠道。

决策科学化还有很多应用场景,比如电商定价、促销设计、功能上线、留存分析等。

决策科学化的工作流程:

  1. 度量:部署实施数据采集,实施数据转化与加工,建立度量指标体系;
  2. 洞察:数据探索、建模、假设检验、用户研究、形成理论等;
  3. 干预:设计方案、实施实验、评估效果、推广应用等。

网易大数据建设思路:一个中心,两个平台

做好大数据业务需要很多东西,比如你要有很好的想法,比如你的算法工程师要很厉害,懂得很多算法,但一个成功的大数据应用关键在于两点:有数据+快速改进。

听上去很简单,但在实际开发过程中,还是面临很多问题:

  1. 数据孤岛的问题,你会发现你的数据散落在各个地方,可能在业务中,也可能在你服务器中的日志中,想用数据的时候找不到;还有一种情况是公司各个部门间的数据不共享;
  2. 数据资源缺乏管理,由于数据的规模很大,再加上人员的流动,没有一个人完全清楚所有数据表中每个指标的含义,导致数据的使用效果不好;
  3. 数据开发的门槛很高:首先是知识的门槛,专业的数据开发人员很难招到,他们要学习Hadoop、Spark等各种相关技术;另外,使用上也很麻烦,要把这些开源的东西放在一起,组成一个解决方案。
  4. 分析流程长,涉及的人员多,决策周期长。

网易的解决思路是一个中心,两个平台。一个中心是指数据资源中心,数据资源中心会集成所有有价值的数据,进行数据的融合和深加工,目的是打破各个产品的数据分界和壁垒,提高利用效率;两个平台分别是大数据管理与应用开发平台(猛犸)和数据分析平台(有数)。其中,猛犸会存储和管理整个公司级别的数据资源,提供高效、易用的大数据分析挖掘应用开发环境,提供大规模查询和计算能力;有数用来支撑产品分析与决策,产品营销推广。通过数据资源中心的建设,可以使得所有数据都在平台上,想用可以直接去用,降低了门槛。

大数据管理和应用开发平台

接下来,余利华介绍了网易大数据管理和应用开发平台猛犸,整个大数据平台的建设思路主要是满足效率快的需求,仅用开源的Hadoop是不够的。把Hadoop引进来经过改造成为适合我们自己用的体系化的大数据平台,所谓体系化,是指整个平台分为以下几层:

幻灯片21.JPG

最底层是元数据、数据湖和资源调度。表定义、权限和数据血缘关系都属于元数据的范畴。数据湖就是统一存储数据的,通常是HDFS;资源调度其实就是分配CPU、内存和磁盘这些资源。我们会把整个数据资源都放在数据湖中,然后用元数据去描述它,这样就建立了一个企业级的数据仓库,统一去管理数据。

再上一层是计算层,包括实时计算、离线计算、Adhoc查询等类型,各种引擎是有机整合的,就是在数据湖中的同一份数据,既可以用Hive来查,也可以用Spark来查,还可以用Impala来查,而且各引擎在权限控制上也保持一致。另外,离线计算和实时计算也是融合的,一个实时计算的任务可能去查离线计算的表,实时计算的表也可能会归档为离线计算的表。

再上一层是用户的使用界面,包含一个可视化的开发界面和统一的SQL语言开发。

最上层是各种应用,比如考拉、严选、云音乐等。

幻灯片22.JPG

上图是网易猛犸数据接入的界面,只要在界面上配置好数据源和数据目的地,就能把数据定期地导入进来,所有的操作都是通过表单实现的,另外还提供了基于SQL的ETL的功能。在数据资源管理方面,网易猛犸提供了主题管理,一个产品里面可能分好多主题,比如用户一个主题,商品一个主题,订单又是一个主题,我们提供了主题管理的功能,使得业务能够很方便地梳理他的数据仓库。另外提供了数据血缘的能力,使得任何一个数据的来龙去脉都非常清楚,知道这个数据是哪个任务计算出来的,依赖于前面的哪个数据。提供了拖拽式的可视化的开发环境,而且提供SQL化的开发,提升效率。

大数据可视化分析平台

最后,余利华介绍了企业级大数据可视化分析平台网易有数。网易有数的特点是安全、高性能和敏捷。报表的安全性是大家都关心的问题,我们会提供行列级的权限控制;在计算方面,拖拽报表的时候性能是非常关键的,有数中采用了MPP的引擎做优化,使得拖拽可以秒间完成。

1.png

接下来,奇硕CTO殷世林作为网易云的客户,分享了奇硕数据服务在大数据平台中的实战,殷世林从技术的角度介绍了奇硕的大数据平台和架构,分享了奇硕大数据平台和网易云的合作。下周会有文章单独分享殷世林的演讲内容。

基于微服务的应用架构设计实践

下午,网易云首席解决方案架构师刘超带来了演讲“基于微服务的应用架构设计实践”,分别从产品和最佳实践的角度介绍了网易云在微服务化方面的经验。

幻灯片4.JPG

目前,网易内部95%的产品都已经在使用网易云,上图是网易云整个的产品架构。最底层的云主机、云网络和云硬盘是比较通用的服务,目前主流的云服务商都会提供;右上方的平台服务,经历了网易内部产品长时间的考验,才开放出来,尤其是对象存储服务仅支持邮箱产品就已经积累了100PB以上的数据,而且迄今为止都是零丢失;最左边是容器服务和工具链,工具链是针对容器和微服务的,网易云相信容器在整个开发、部署和弹性扩展的过程中有着革命性的技术,是一个非常好的云计算的切入点。

Why 微服务?

接下来,刘超以运输过程中的集装箱为例,介绍了容器的概念,核心是封装和标准,将所有的配置文件、用户创建、路径创建、权限修改打包到标准的容器镜像中,只要基于这个镜像创建出来的容器就都是一样的。

容器改变了应用的管理和部署方式,从编码开始,镜像是贯穿整个过程的标准交付物,最终保证发布时测试、联调和线上环境的一致性,将整个过程打通了。其中编排想表达的思想是希望管理容器相互间的关系,网易云通过Kubernetes实现容器的编排。

就像漫画《当一个项目里的代码超过一百万行……》所描述的场景,随着应用的业务越来越大,无论从代码层面还是组织架构层面,代码的修改都会变得很难,甚至每次发布都要像行军打仗一样,统一由最高的领导来协调这件事情,整个迭代速度是非常慢的。如果拆分成微服务,只要服务间的接口定义相对松耦合并标准化,每个模块都可以独立地进行开发和上线。理想的情况是,每个微服务团队都在5-9个人的规模,相互间的沟通非常方便,迭代速度会快很多。

容器+Kubernetes的平台一个非常大的好处是,一个容器挂了,可以在秒级恢复,如果再配合负载均衡,对你的业务几乎是没有任何影响的,对客户来讲体验是非常好的。

总体来说,微服务化的收益是每天的更新速度和并发的访问速度在用户规模相对比较大的情况下,有一个很大的提升。

网易云容器服务优势

网易云的容器服务为了支撑内部应用,做了很多改进,来克服当前容器服务的缺陷,并提升容器服务的性能,这也是和其它同类服务相比网易云容器服务的特色。

幻灯片16.JPG

安全层面:由于容器是共享内核,所以经常被诟病不够安全,网易云的策略是在不同租户间实现主机隔离、内核隔离和二层虚拟网络的隔离。

幻灯片17.JPG

性能的改进:当前主流的容器平台多会采取左边的方式,容器间的联通又增加了一层虚拟成本,非常影响网络性能。网易云采取右面的方式,会把虚拟机的网卡打到容器中,容器看到的网络和虚拟机看到的网络是同一个二层网络,没有二次虚拟化;并且网易云的虚拟机二层网络是进行过高并发改进的,可以保证容器间交互的高吞吐量;同时也方便容器和虚拟机的混合部署。

![幻灯片19.JPG](http://upload-images.jianshu.io/upload_images/3947555-c78b45fef0de98dc.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

简化运维:左边是一般容器服务的模式,用户可以在上面一键创建容器平台,但实际用起来就发现还有很多问题需要解决,尤其是容器平台出现问题,或者需要升级和运维的时候,要自己去学Kubernetes或Mesos,相当于云平台又把很多工作交还给了用户。网易云采取右面的方式,红色的部分都是网易云来负责,在IaaS上面有一个统一的Kubernetes调度系统,用户只需要关心容器的部分,并且用户创建的应用依旧是主机隔离的。

工具链的完善:网易云提供了APM,监控,日志ELK的工具链。

幻灯片20.JPG

网易云在帮助客户实现微服务化,持续集成,DevOps的时候,逐渐发现客户做不到最佳实践往往并不是工具的问题,而是缺乏知识输出和经验分享的来源。网易云有非常丰富的微服务化实战经验,比如网易考拉海购就是从一个母婴产品的单体应用,逐渐发展成为跨境电商的第一品牌,目前整个架构中有600+的容器支撑业务逻辑,每天更新上线达700次以上。

十二原则和微服务化实践有着异曲同工之处,最后,刘超介绍了云原生应用的十二原则:

1.在线上部署的任何一套环境,在代码中都应该有相应的代码进行控制,你在任何环境中的任何操作,在代码中都有追踪,能够追根溯源;
2.把微服务间的依赖,包括API、接口、中间产生的DTO等清晰地暴露出来;
3.环境变量尽量存储在environment中,通用的环境变量打在镜像中;
4.后端服务当做附加资源,尽量使用PaaS服务,不要花太多时间在PaaS平台上;
5.严格区分编译和运行的环境;
6.尽量使用无状态应用;
7.通过端口绑定提供服务;
8.通过进程模型进行扩展;
9.快速启动和优雅终止可最大化健壮性;
10.尽可能的保持开发、预发布和线上环境的一致性;
11.把日志当做事件流;
12.后台管理任务当做一次性进程运行。

活动最后,中睿信息创始人鹿传明向大家传授了“从0到1打造高效的软件研发团队”的经验。鹿传明首先从研发项目管理的本质出发,认为不以提升质量与生产率的项目管理就是形式主义,再详细讲解了个人投入度与团队投入度的概念,量化讲述构建高效团队。接着详细对比论证了传统的重量级研发项目管理体系与轻量级的管理体系如Scrum的特点与适用性。最后鹿传明详细介绍了符合中国国情的iScrum项目管理方法在企业中的应用案例。

推荐阅读更多精彩内容