当前位置: 首页 > 科技观察

AI专家:大数据知识图谱——实践经验总结

时间:2023-03-12 00:53:39 科技观察

作为数据科学家,我想把业界最前沿的知识图谱总结分享给技术大咖,让大数据知识真正转化为互联网生产力!大数据与人工智能智能、云计算、物联网、区块链等技术日益融合,成为全球最热门的战略技术,给大数据从业者带来巨大的发展机遇,也为大数据工程师的技能树立了高标准要求。大数据具有海量、多样性、高速性和可变性等特点。映射到大数据平台建设的需求,不仅要具备海量数据采集、并行存储、灵活转发、高效调用、智能分析的通用PaaS服务能力,还要具备快速孵化各类SaaS新应用的能力。为实现这一目标,架构设计至少要满足三个总体技术要求:一是要将分布式大数据平台的基础数据服务能力建设放在首位。规划支持PB级数据运营能力的云平台架构,运用经典设计原则和设计模式架构之美,吸取业界主流分布式技术精髓,深耕主流平台服务模式的演进内涵到现代微架构;以系统架构设计和微服务构建思路武装团队,持续书写多维架构蓝图,促进团队协作;三是围绕大数据全栈技术体系解决项目实战中的各类问题,制定主流技术规范和设计标准,通过平台核心组件快速迭代产生新业务。在设计要求上,大数据平台服务的整体设计必须具备全面、整体、平衡的关键技术要求,既能充分提炼国内外优秀架构和解决方案的精华,又能理解底层设计分布式技术的想法;不仅可以全局了解上下游技术生态和业务集成的设计流程,还可以游刃有余地处理系统功能和性能问题;不仅可以权衡引入新技术和改造旧系统的成本估算,还可以促进作战团队轻松掌控新技术。第一个总体技术要求:把分布式大数据平台的基础数据服务能力建设放在首位。规划创新的支持PB级数据运营能力的云平台架构,利用经典设计原则和设计模式之美,吸取业界主流分布式技术的精髓,深化主流平台服务模式向现代微服务的演进。建筑学。第二个总体技术需求:利用系统架构设计和微服务打造思想武装团队,持续书写多维架构蓝图,促进团队协作。架构师不仅要有大型云平台架构的实践经验,还要有大智慧和战略思维,通过蓝图推动和管理每个产品的全生命周期。第三个总体技术需求:围绕大数据全栈技术体系解决项目实战中的各类问题,制定主流技术规范和设计标准,通过平台核心组件快速迭代新业务。关于设计规范的重要性,我们不妨借用《孙子兵法》的大智慧来分析一下。从系统的整体技术能力出发,提出了物联网大数据平台八个通用微服务的技术需求,包括大数据的高并发采集服务、灵活的分发服务、高扩展性的海量存储服务、海量数据的高并行开发。存储服务、高可靠海量存储服务、自定义迁移服务、基于机器学习的智能分析服务、基于Spark生态的实时计算服务,具体如下:高并发采集服务:支持多移动端可扩展接入和物联网数据,并具有大规模访问并发处理能力。兼容主流行业通用的可扩展协议和规范,采用高可靠的集群或负载均衡技术框架解决问题。比如引入Mina或者Netty技术框架后,可以适配各种移动端接入。标准化接入要求字节流、文件、Json等常用数据格式符合主流标准格式。灵活的分发服务:根据分析和应用需求,转发不同的数据类型和数据格式。其中一种交互方式是主流的消息中间件MQ或Kafka,保证数据高效转发和转换到数据服务运营商。第二种交互方式是Restful方式,保证数据能够按照协议规范安全可靠的转发和传输。高度可扩展的海量存储服务:支持可扩展的数据类型和数据表,对物联网大数据进行海量存储和计算,特别适合初创公司开发大用户群中的大数据平台。高并发海量存储服务:支持数据类型和数据量的快速增长,物联网大数据的批量处理,适合构建PB级数据量和最大用户量的云平台。高可靠的海量存储服务:支持物联网多源异构数据的统一、高效、海量存储,为行业数据提供易扩展的离线计算和批处理架构,适合构建ZB级数据量和亿级用户。大平台。基于Spark生态的实时计算服务:支持物联网大数据智能分析,通过企业级中间件服务框架提供安全可靠的接口,实现数据的实时统计和计算。基于机器学习的智能分析服务:支持安全高效的机器学习算法,通过支持分布式分类、聚类、关联规则等算法,为用户和物联网组织提供个性化的智能分析服务。自定义迁移服务:支持物联网大数据的整体迁移和同步,通过数据转换和数据迁移工具进行不同数据类型和数据格式的整体迁移,实现数据集的自定义生成。01高并发采集微服务面对千倍用户数、万倍数据量的增长速度,如何保证物联网大数据在较快的时间内进入平台?针对用户量的增加,如何在规定的时间内完成采集?除了硬件设备的处理能力,让数据更快的聚合到平台是核心需求。具体考虑如下:满足采集不同厂商、移动设备类型、传输协议的行业数据的需求。在界面设计上,我们完全可以针对不同的设备和传输协议进行设计,这就是借鉴了用兵的“分而治之”的方法。小的部分,然后一个一个的解决,找出每个部分的解法,把每个部分的解法组合成整个问题的解法。这种简单的想法也完全适用于技术设计。软件架构设计和模块化设计都是分而治之的具体体现。战略模型就是这一思想的集中体现。策略模式定义了各种算法以不同方式实现的通用接口。满足高并发要求。需要依托消息队列、缓存、分布式处理、集群、负载均衡等核心技术,实现数据的高可靠、高并发处理,有效降低端到端的数据传输延迟,提升用户体验。借用“因食敌”的说法。“给敌以食”的实质是从敌获取,从敌取胜,以战养战,动态共存。我们常说借对手的优势发展自己,整合资源就是这种思想的集中体现。官方商业系统需要高性能的中间件来并行处理数据,以实现低延迟不丢包。我们采用商用的Mina负载均衡技术框架,可以支持多种设备和传输协议(HTTP、TCP、UDP)的数据访问,可以满足每秒数万并发的数据访问需求。基于以上核心需求分析和技术定位,我们可以利用第三方中间件和设计模式来实现个性化业务,解决接口集中化、扩展性、灵活性等问题。借助Mina的SocketNIO技术魅力,适配高并发数据接口IOFilterAdapter进行反序列化编码,适配高并发数据接口IOHandlerAdapter进行业务处理。02灵活转发在微服务灵活转发能力的整体设计中,需要考虑接口和消息中间件两种方式。其中,消息中间件可为用户大规模支持消息并发,适用于物联网、车联网、移动App、互动直播等领域。其应用场景包括:第一,在传统的系统架构中,用户从注册到跳转到成功页面需要等待系统接口返回数据。这不仅会影响系统响应时间,降低CPU吞吐量,还会影响用户体验。二是通过消息中间件实现业务逻辑的异步处理。用户注册成功后,将数据发送给消息中间件,然后重定向成功页面。消息发送的逻辑然后由订阅消息中间件的其他系统处理。三是消息中间件的读写速度非常快,时间消耗可以忽略不计。可以通过消息中间件处理更多的请求。主流的消息中间件有Kafka、RabbitMQ、RocketMQ。让我们比较一下他们的表现。Kafka是一个开源的分布式发布-订阅消息系统,属于Apache***项目。其主要特点是基于拉取方式处理消息消费。追求高吞吐量主要用于日志采集和传输。从0.8版本开始,支持复制,不支持事务,对消息的重复、丢失、错误没有严格的要求。适用于产生大量数据的互联网服务的数据采集业务;RabbitMQ是一个开源的消息队列系统,使用Erlang语言开发,基于AMQP协议。完成。AMQP的主要特点是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性和安全性。AMQP协议用于企业系统,对数据的一致性、稳定性、可靠性要求高,对性能和吞吐量的要求次之。RocketMQ是阿里巴巴开源的消息中间件,采用Java语言开发,具有高吞吐量、高可用性的特点,适用于大规模分布式系统应用。RocketMQ的设计思想源于Kafka,但不是Kafka的照搬。它优化了消息的可靠传输和事务性能。目前广泛应用于阿里集团的交易、充值、流计算、消息推送、日志流处理等领域。、binglog分发等场景。结合上面的服务优势对比,第3章我们将使用最主流的ActiveMQ消息中间件来处理数据转发,第6章我们将使用分布式Kafka来实现数据转发。03高度可扩展的海量存储服务高度可扩展是大数据处理的核心需求之一。在实际工作中,当用户数小于100万,数据量在TB以内时,往往可以选择使用Mysql数据库。灵活、成熟、开源的Mysql数据库是创业公司的首选。我们考虑使用垂直表来实现灵活可扩展的系统,将经常使用的数据放在一个数据表中,灵活的字段可以用字典表的方式实现,内容经常变化的数据对象尽量采用JSON格式可能的。大名鼎鼎的OpenMRS系统在Mysql数据库中实现自定义表格,让医生可以灵活自定义表格,收集自己的临床试验数据,让用户每天记录自己的饮食信息。这样的设计可以实现应用场景的普适性。我们借鉴OpenMRS的核心思想,构建基于Mysql的小型物联网大数据模型。应用场景是:一个病人去多家医院,进行体检,记录各项生理指标。我们根据应用场景构建数据模型。patient表构造为Patient表,hospital表构造为Location表,体检构造为Encounter表,measurement构造为Observation表,体检类型描述构造为Concept桌子。五张表的多表关联,实现数据的通用性和可扩展性。该模型将在第3章详细阐述。另一种高可扩展性的接口实现是Restful架构。Restful接口是安全开放平台的主流接口风格。一般应用系统使用Session来存储和验证登录用户信息,而大数据平台开放接口服务的资源请求使用Token来验证登录用户信息。Session主要用来维护会话信息,客户端会保存一个cookie来维护用户会话的有效性,而Token只用于登录用户的身份认证。因此,在移动端使用Token会比使用Session更简单、更安全。Restful架构遵循统一接口的原则,其中包括一组有限的预定义操作。无论是何种资源,都使用相同的接口访问资源。接口应使用预定义的主流标准Get/Put/Delete/Post操作等,将在第三章详细阐述。04高并发海量存储服务MongoDB是一款适合垂直行业应用的开源数据库,是我们做高并发存储和查询的最佳数据库。MongoDB可以使企业业务更具可扩展性。通过使用MongoDB创建新的应用,团队可以提高开发效率。下面详细分析一下关系模型和文档模型的区别。关系模型按照数据对象存储在各个对应的表中,使用时按需调用。例如,对于一个体检数据模型设计,用户管理信息包括用户名、地址、联系方式等。根据第三范式,我们将联系方式存储在一个单独的表中,通过关联检索需要的信息时显示用户信息。但是在MongoDB的文档模式下,存储单元是一个文档,可以支持数组和嵌套文档。本文档可以涵盖与该用户相关的所有个人信息,包括联系方式。关系型数据库的关联功能恰恰是它的发展瓶颈,尤其是用户数据达到PB级之后,性能和效率会迅速下降。我们使用MongoDB设计了一种高效的文档数据存储模式。首先考虑embedding,将相同类型的数据放在一个嵌入的文档中。嵌入的文档和对象可以生成一对一的映射关系。例如,Map可以存储嵌入的文档。如果是多表关联,可以在主表中存一个id值,指向另一个表中的id值,通过两套存储数据实现多表关联。目前MongoDB4.0以后支持多表。单据的交易处理。我们使用AngularJS框架设计了一个高并发的调用系统。提到数据调用,JQuery框架就浮现在脑海中。JQuery框架的设计思想是在静态页面的基础上操作DOM元素。数据调用最成熟的主流框架之一是AngularJS框架。AngularJS特别适用于基于CRUD的Web应用系统。它简化了Web开发人员的体验要求,同时使Web本身更具功能性。AngularJS对DOM元素的操作都是在Directive中实现的,一般很少直接写DOM操作代码。只要监控Model,Model改变后View也会跟着改变。AngularJS框架强调以Html声明式的方式构建UI,数据和逻辑由框架提供的机制自动匹配绑定。AngularJS有很多有利的设计思想,其核心是:数据原因、依赖注入、自动双向数据绑定、语义标签等。依赖注入的思想实现了分层解耦,包括前端和后端分离和合理的模块化组织项目结构,让开发人员更加关注每个具体逻辑本身,从而加快开发速度,提高系统质量。双向绑定是其本质,即来自界面的操作可以实时反映在数据上,数据的变化可以实时显示在界面上。数据模型Model和视图View绑定到内存映射$Scope。下面是我设计的AngularJS项目框架,可以适用于所有的业务系统,在第四章体检报告的可视化展示中有详细阐述。创建一个MVC的三层框架,首先创建一个单页面视图层Main.html,然后创建一个模型层Service.js,***创建一个控制层App.js,App.js包括JS的多个模块和html文件,从而构建一个完整的AngularJSMVC框架。05高可靠海量存储服务高可靠海量存储是大数据处理的核心需求之一。在实际工作中,往往需要实现多模态、不同时间粒度行业数据的统一、高效、海量存储,并提供易于扩展的离线计算和批处理架构,例如引入Hadoop和Spark大数据存储和计算解决方案。高可靠数据海量存储的整体设计应该吸收主流的Hadoop架构。Hadoop集群是一个分布式计算平台,用户可以很方便地构建和使用它。用户可以在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下优点:可靠性高。Hadoop按列存储和处理数据的能力值得信赖。Hadoop可以在节点间动态移动数据,保证每个节点的动态平衡,因此处理速度非常快。高可扩展性。Hadoop将数据分布在可用的列集群中完成计算任务,这些列集群可以轻松扩展到数千个节点。容错性高。Hadoop可以自动保存多份数据,并可以自动重新分配失败的任务。主流的HBase架构应该吸收海量数据存储的弹性设计。它是一个高可靠、高性能、面向列、可扩展的分布式存储系统,适用于结构化存储。底层依赖于Hadoop的HDFS。使用HBase技术,可以在廉价的PCServers集群上构建大规模结构化存储。因此,HBase被广泛应用于大数据存储解决方案。从应用场景分析,因为HBase存储的是松散的数据,如果应用中数据表每一行的结构不一样,就用HBase***,因为HBase的列是可以动态增加的,而且列是空的。存储数据,所以如果需要经常添加字段,而且大部分字段都是NULL值,可以考虑HBase。因为HBase可以提供基于Rowkey的高效查询,所以你所有的数据都有同一个主键Rowkey。详见第六章。06实时计算服务实时计算的整体设计要考虑Spark生态技术框架。Spark是使用Scala语言实现的,这是一种面向对象的函数式编程语言,可以像操作本地集合对象一样轻松地操作分布式数据集(Scala提供了一种称为参与者的并行模型)。Spark运行速度快,易用性和通用性好。Spark是在MapReduce的思想基础上发展起来的,继承了其分布式并行计算的优点,改进了MapReduce的明显缺陷。具体优势分析如下:Spark将中间数据放在内存中,迭代运行效率高。MapReduce中的计算结果需要落地保存到磁盘中,势必会影响整体速度。而Spark支持DAG图分布式并行计算的编程框架,减少了迭代过程中的数据落地,提高了处理效率。Spark是高度容错的。Spark引入了RDD(ResilientDistributedDataset)的抽象,RDD是分布在一组节点中的只读对象的集合。他们重建。此外,在RDD计算过程中,还可以使用checkpoint来实现容错。Spark是通用的。在Hadoop提供Map和Reduce操作的基础上,Spark还提供了很多数据集操作类型,大致可以分为两类:Transformations和Actions。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、oin、Cogroup、MapValues、Sort、PartionBy等多种操作类型,还提供Count,Actions包括Collect、Reduce、Lookup、Save。强大的SparkMLlib机器学习库旨在简化机器学习的工程实践,便于向更大规模的扩展。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,以及低级优化原语和高级管道API。详见第六章。07基于机器学习的智能分析服务在智能分析服务的整体设计中需要考虑SparkMLlib工具。当今主流的建模语言有R语言、Weka、Mahout和Spark等,我们来分析一下它们的基因和应用场景。R是一种封装了大量机器学习算法的数学语言,但它是独立的,不能很好地处理海量数据。Weka类似于R语言,包含大量经过良好优化的机器学习和数据分析算法,可以处理与格式化数据转换相关的各种任务。唯一不足的是在处理大数据对内存要求高时遇到了瓶颈。Mahout是Hadoop的一个机器学习库,具有并发处理海量数据的能力。主要的编程模型是MapReduce。但是基于MapReduce的机器学习在迭代过程中会产生大量的磁盘IO,即本次计算的结果要作为下一次迭代的输入。在这个过程中,只能将中间结果存入磁盘,然后在下次计算时重新读取,这对于迭代频繁的算法来说显然是致命的性能瓶颈。所以计算效率很低。现在Mahout已经停止更新MapReduce算法,正在迁移到Spark。另外,Mahout和SparkML不是竞争关系,Mahout是对MLlib的补充。MLlib是Spark对常用机器学习算法的实现库,包括相关测试和数据生成器。Spark旨在支持一些迭代作业,这恰恰符合很多机器学习算法的特点。在逻辑回归计算场景下,Spark比Hadoop快100多倍。SparkMLlib基于内存计算,适用于迭代计算。而且,Spark提供了基于海量数据的机器学习库,提供了常用机器学习算法的分布式实现。工程师只需要有Spark基础,了解机器学习算法的原理和方法中相关参数的含义即可。基于海量数据的机器学习过程是通过调用相应的API实现的。详见第8章。08自定义迁移服务数据迁移能力整体设计应考虑Sqoop框架。Sqoop是Hadoop和关系型数据库之间传输数据的主流工具。它可以将数据从关系型数据库(MySQL、Oracle、Postgres等)导入到Hadoop的HDFS中,或者将HDFS中的数据导入到关系型数据库中。作为ETL工具,在数据从数据源传输到Hadoop时,使用元数据模型判断数据类型,保证类型安全的数据处理。Sqoop框架可以设计用于大数据的批量传输,能够拆分数据集并创建Hadoop任务来处理每个块。具体实施见第九章。【本文为专栏作家《移动实验室》原创稿件,转载请联系原作者】点此阅读更多本作者好文