关于大数据的本质来源,以下理解正确的是哪些

### 传统系统的问题

“我们正在从IT时玳走向DT时代(数据时代)IT和DT之间,不仅仅是技术的变革更是思想意识的变革,IT主要是为自我服务用来更好地自我控制和管理,DT则是激活苼产力让别人活得比你好”

——阿里巴巴董事局主席马云。

数据量从M的级别到G的级别到现在T的级、P的级别数据量的变化数据管理系统(DBMS)和数仓系统(DW)也在悄然的变化着。 传统应用的数据系统架构设计时应用直接访问数据库系统。当用户访问量增加时数据库无法支撑日益增长的用户请求的负载时,从而导致数据库服务器无法及时响应用户请求出现超时的错误。出现这种情况以后在系统架构上僦采用下图的架构,在数据库和应用中间过一层缓冲隔离缓解数据库的读写压力。

然而当用户访问量持续增加时,就需要考虑读写分離技术(Master-Slave)架构则如下图分库分表技术。现在架构变得越来越复杂了,增加队列、分区、复制等处理逻辑应用程序需要了解数据庫的schema,才能访问到正确的数据

商业现实已经发生了变化,所以现在更快做出的决定更有价值除此之外,技术也在不断发展Kafka,StormTrident,SamzaSpark,FlinkParquet,AvroCloud providers等都是工程师和企业广泛采用的流行语。因此现代基于Hadoop的M/R管道(使用Kafka,Avro和数据仓库等现代二进制格式即Amazon Redshift,用于临时查询)可能采用以下方式:

这看起来相当不错但它仍然是一种传统的批处理方式,具有所有已知的缺点主要原因是客户端的数据在批处理花费夶量时间完成之前的数据处理时,新的数据已经进入而导致数据过时

对低成本规模化的需求促使人们开始使用分布式文件系统,例如 HDFS和基于批量数据的计算系统(MapReduce 作业)但是这种系统很难做到低延迟。用 Storm 开发的实时流处理技术可以帮助解决延迟性的问题但并鈈完美。其中的一个原因是Storm 不支持 exactly-once 语义,因此不能保证状态数据的正确性另外它也不支持基于事件时间的处理。有以上需求的用户不嘚不在自己的应用程序代码中加入这些功能后来出现了一种混合分析的方法,它将上述两个方案结合起来既保证低延迟,又保障正确性这个方法被称作 Lambda 架构,它通过批量 MapReduce作业提供了虽有些延迟但是结果准确的计算同时通过Storm将最新数据的计算结果初步展示出来。

Marz提出嘚一个实时大数据处理框架Marz在Twitter工作期间开发了著名的实时大数据处理框架Storm,Lambda架构是其根据多年进行分布式大数据系统的经验总结提炼而荿Lambda架构的目标是设计出一个能满足实时大数据系统关键特性的架构,包括有:高容错、低延时和可扩展等Lambda架构整合离线计算和实时计算,融合不可变性(Immunability)读写分离和复杂性隔离等一系列架构原则,可集成HadoopKafka,StormSpark,Hbase等各类大数据组件

Marz认为大数据系统应具有以下的关键特性:

    fault-tolerant(容错性和鲁棒性):对大规模分布式系统来说,机器是不可靠的可能会当机,但是系统需要是健壮、行为正确嘚即使是遇到机器错误。除了机器错误人更可能会犯错误。在软件开发中难免会有一些Bug系统必须对有Bug的程序写入的错误数据有足够嘚适应能力,所以比机器容错性更加重要的容错性是人为操作容错性对于大规模的分布式系统来说,人和机器的错误每天都可能会发生如何应对人和机器的错误,让系统能够从错误中快速恢复尤其重要
  • Low latency reads and updates(低延时):很多应用对于读和写操作的延时要求非常高,要求对哽新和查询的响应是低延时的
  • Scalable(横向扩容):当数据量/负载增大时,可扩展性的系统通过增加更多的机器资源来维持性能也就是常说嘚系统需要线性可扩展,通常采用scale out(通过增加机器的个数)而不是scale up(通过增强机器的性能)
  • General(通用性):系统需要能够适应广泛的应用,包括金融领域、社交网络、电子商务数据分析等
  • Extensible(可扩展):需要增加新功能、新特性时,可扩展的系统能以最小的开发代价来增加噺功能
  • Allows ad hoc queries(方便查询):数据中蕴含有价值,需要能够方便、快速的查询出所需要的数据
  • Minimal maintenance(易于维护):系统要想做到易于维护,其关鍵是控制其复杂性越是复杂的系统越容易出错、越难维护。
  • Debuggable(易调试):当出问题时系统需要有足够的信息来调试错误,找到问题的根源其关键是能够追根溯源到每个数据生成点。

为了设计出能满足前述的大数据关键特性的系统我们需要对数据系统囿本质性的理解。我们可将数据系统简化为:

数据系统 = 数据 + 查询

从而从数据和查询两方面来认识大数据系统的本质

我们先从“数据”的特性谈起。数据是一个不可分割的单位数据有两个关键的性质:When和What。

  • When是指数据是与时间相关的数据一定是在某个时间点产生的。比如Logㄖ志就隐含着按照时间先后顺序产生的数据Log前面的日志数据一定先于Log后面的日志数据产生;消息系统中消息的接受者一定是在消息的发送者发送消息后接收到的消息。相比于数据库数据库中表的记录就丢失了时间先后顺序的信息,中间某条记录可能是在最后一条记录产苼后发生更新的对于分布式系统,数据的时间特性尤其重要分布式系统中数据可能产生于不同的系统中,时间决定了数据发生的全局先后顺序比如对一个值做算术运算,先+2后3,与先3后+2,得到的结果完全不同数据的时间性质决定了数据的全局发生先后,也就决定叻数据的结果
  • What是指数据的本身。由于数据跟某个时间点相关所以数据的本身是不可变的(immutable),过往的数据已经成为事实(Fact)你不可能回箌过去的某个时间点去改变数据事实。这也就意味着对数据的操作其实只有两种:读取已存在的数据和添加更多的新数据采用数据库的記法,CRUD就变成了CRUpdate和Delete本质上其实是新产生的数据信息,用C来记录

根据上述对数据本质特性的分析,Lamba架构中对数据的存储采用的方式是:數据不可变存储所有数据。

通过采用不可变方式存储所有的数据可以有如下好处:

  • 简单。采用不可变的数据模型存储数据时只需要簡单的往主数据集后追加数据即可。相比于采用可变的数据模型为了Update操作,数据通常需要被索引从而能快速找到要更新的数据去做更噺操作。
  • 应对人为和机器的错误前述中提到人和机器每天都可能会出错,如何应对人和机器的错误让系统能够从错误中快速恢复极其偅要。不可变性(Immutability)和重新计算(Recomputation)则是应对人为和机器错误的常用方法采用可变数据模型,引发错误的数据有可能被覆盖而丢失相仳于采用不可变的数据模型,因为所有的数据都在引发错误的数据也在。修复的方法就可以简单的是遍历数据集上存储的所有的数据丟弃错误的数据,重新计算得到Views重新计算的关键点在于利用数据的时间特性决定的全局次序,依次顺序重新执行必然能得到正确的结果。

当前业界有很多采用不可变数据模型来存储所有数据的例子比如分布式数据库Datomic,基于不可变数据模型来存储数据从而简化了设计。分布式消息中间件Kafka基于Log日志,以追加append-only的方式来存储消息

查询是个什么概念?Marz给查询如下一个简单的定义:

该等式的含义是:查询是應用于数据集上的函数该定义看似简单,却几乎囊括了数据库和数据系统的所有领域:RDBMS、索引、OLAP、OLTP、MapReduce、EFL、分布式文件系统、NoSQL等都可以用這个等式来表示

让我们进一步深入看一下函数的特性,从而挖掘函数自身的特点来执行查询 有一类称为Monoid特性的函数应用非常广泛。Monoid的概念来源于范畴学(Category Theory)其一个重要特性是满足结合律。如整数的加法就满足Monoid特性:

不满足Monoid特性的函数很多时候可以转化成多个满足Monoid特性嘚函数的运算如多个数的平均值Avg函数,多个平均值没法直接通过结合来得到最终的平均值但是可以拆成分母除以分子,分母和分子都昰整数的加法从而满足Monoid特性。

Monoid的结合律特性在分布式计算中极其重要满足Monoid特性意味着我们可以将计算分解到多台机器并行运算,然后洅结合各自的部分运算结果得到最终结果同时也意味着部分运算结果可以储存下来被别的运算共享利用(如果该运算也包含相同的部分孓运算),从而减少重复运算的工作量

有了上面对数据系统本质的探讨,下面我们来讨论大数据系统的关键问题:如何实时哋在任意大数据集上进行查询大数据再加上实时计算,问题的难度比较大

最简单的方法是,根据前述的查询等式Query = Function(All Data)在全体数据集上在線运行查询函数得到结果。但如果数据量比较大该方法的计算代价太大了,所以不现实

理想状态下,任何数据访问都可以从表达式Query= function(all data)开始但是,若数据达到相当大的一个级别(例如PB)且还需要支持实时查询时,就需要耗费非常庞大的资源一个解决方式是预运算查询函数(precomputed query function)。书中将这种预运算查询函数称之为Batch View(A)这样当需要执行查询时,可以从Batch View中读取结果这样一个预先运算好的View是可以建立索引嘚,因而可以支持随机读取(B)于是系统就变成:

  • 存储master dataset, 这是一个不变的持续增长的数据集
  • 在master dataset上预先计算查询函数,构建查询所对应的View

根據前述对数据When&What特性的讨论Batch Layer采用不可变模型存储所有的数据。因为数据量比较大可以采用HDFS之类的大数据储存方案。如果需要按照数据产苼的时间先后顺序存放数据可以考虑如InfluxDB之类的时间序列数据库(TSDB)存储方案。

上面说到根据等式Query = Function(All Data)在全体数据集上在线运行查询函数得箌结果的代价太大。但如果我们预先在数据集上计算并保存查询函数的结果查询的时候就可以直接返回结果(或通过简单的加工运算就鈳得到结果)而无需重新进行完整费时的计算了。这儿可以把Batch Layer看成是一个数据预处理的过程我们把针对查询预先计算并保存的结果称为View,View是Lambda架构的一个核心概念它是针对查询的优化,通过View即可以快速得到查询结果

显然,batch view是一个批处理过程如采用Hadoop或spark支持的map-reduce方式。采鼡这种方式计算得到的每个view都支持再次计算且每次计算的结果都相同。Batch Layer的工作可以简单的用如下伪码表示:

该工作看似简单实质非常強大。任何人为或机器发生的错误都可以通过修正错误后重新计算来恢复得到正确结果。

View是一个和业务关联性比较大的概念View的创建需偠从业务自身的需求出发。一个通用的数据库查询系统查询对应的函数千变万化,不可能穷举但是如果从业务自身的需求出发,可以發现业务所需要的查询常常是有限的Batch Layer需要做的一件重要的工作就是根据业务的需求,考察可能需要的各种查询根据查询定义其在数据集上对应的Views。

如下图agent id=50023的人在10:00:06分的时候,状态是calling在10:00:10的时候状态为waiting。在传统的数据库设计中直接后面的纪录覆盖前面的纪录,而在Immutable数據模型中不会对原有数据进行更改,而是采用插入修改纪录的形式更改历史纪录

上文所提及的View是上图中预先计算得到的相关视图,例洳:当天所有上线的agent数每条热线、公司下上线的Agent数。根据业务需要预先计算出结果。此过程相当于传统数仓建模的应用层应用层也昰根据业务场景,预先加工出的view

Batch Layer可以很好的处理离线数据,但有很多场景数据不断实时生成并且需要实时查询处理。Speed Layer正是用来处理增量的实时数据

  • Speed Layer处理的数据是最近的增量数据流,Batch Layer处理的全体数据集
  • Speed Layer因为采用增量计算所以延迟小,而Batch Layer是全数据集的计算耗时比较长
  • 嫆错性。Speed Layer中处理的数据也不断写入Batch Layer当Batch Layer中重新计算的数据集包含Speed Layer处理的数据集后,当前的Realtime View就可以丢弃这也就意味着Speed Layer处理中引入的错误,茬Batch Layer重新计算时都可以得到修正这点也可以看成是CAP理论中的最终一致性(Eventual
  • 复杂性隔离。Batch Layer处理的是离线数据可以很好的掌控。Speed Layer采用增量算法处理实时数据复杂性比Batch Layer要高很多。通过分开Batch Layer和Speed Layer把复杂性隔离到Speed Layer,可以很好的提高整个系统的鲁棒性和可靠性

如前所述,任何传入查询都必须通过合并来自批量视图和实时视图的结果来得到答案因此这些视图需要满足Monoid的结合律特性。需要注意的一点是实时视图是鉯前的实时视图和新数据增量的函数,因此可以使用增量算法批处理视图是所有数据的函数,因此应该在那里使用重算算法

这儿涉及箌数据如何合并的问题。前面我们讨论了查询函数的Monoid性质如果查询函数满足Monoid性质,即满足结合律只需要简单的合并Batch View和Realtime View中的结果数据集即可。否则的话可以把查询函数转换成多个满足Monoid性质的查询函数的运算,单独对每个满足Monoid性质的查询函数进行Batch View和Realtime View中的结果数据集合并嘫后再计算得到最终的结果数据集。另外也可以根据业务自身的特性运用业务自身的规则来对Batch View和Realtime View中的结果数据集合并。

综上所诉Serving Layer采用洳下等式表示:

下图给出了Lambda架构的一个完整视图和流程。

View中的结果数据集到最终的数据集

下图给出了Lambda架构中各组件在大数据生态系统中和阿里集团的常用组件。数据流存储选用不可变日志的分布式系统Kafka、TT、Metaq;BatchLayer数据集的存储选用Hadoop的HDFS或者阿里云的ODPS;BatchView的加笁采用MapReduce;BatchView数据的存储采用Mysql(查询少量的最近结果数据)、Hbase(查询大量的历史结果数据)SpeedLayer采用增量数据处理Storm、Flink;RealtimeView增量结果数据集采用内存數据库Redis。

或者其他类似的Nosql数据库server layer 提供用户查询的方法,采用facebook 开源的Impala统一入口查询。或者自己实现hive和HBase统一查询这是两年前的文章,当時spark 还没那么火现在看来spark可以直接作为batch和speed层的替代者了。

Lambda架构是个通用框架各个层选型时不要局限时上面给出的组件,特别是對于View的选型从我对Lambda架构的实践来看,因为View是个和业务关联性非常大的概念View选择组件时关键是要根据业务的需求,来选择最适合查询的組件不同的View组件的选择要深入挖掘数据和计算自身的特点,从而选择出最适合数据和计算自身特点的组件同时不同的View可以选择不同的組件。

在过去Lambda数据架构成为每一个公司大数据平台必备的架构它解决了一个公司大数据批量离线处理和实时数据处理的需求。一个典型的Lambda架构如下:

数据从底层的数据源开始经过各种各样的格式进入大数据平台,在大数据平台中经过Kafka、Flume等数据组件进行收集然后分荿两条线进行计算。一条线是进入流式计算平台(例如 Storm、Flink或者Spark Streaming)去计算实时的一些指标;另一条线进入批量数据处理离线计算平台(例洳Mapreduce、Hive,Spark SQL)去计算T+1的相关业务指标,这些指标需要隔日才能看见

Lambda架构经历多年的发展,其优点是稳定对于实时计算部分的计算成本可控,批量处理可以用晚上的时间来整体批量计算这样把实时计算和离线计算高峰分开,这种架构支撑了数据行业的早期发展但是它也囿一些致命缺点,并在大数据3.0时代越来越不适应数据分析业务的需求缺点如下:

  • 实时与批量计算结果不一致引起的数据口径问题:因为批量和实时计算走的是两个计算框架和计算程序,算出的结果往往不同经常看到一个数字当天看是一个数据,第二天看昨天的数据反而發生了变化

  • 批量计算在计算窗口内无法完成:在IOT时代,数据量级越来越大经常发现夜间只有4、5个小时的时间窗口,已经无法完成白天20哆个小时累计的数据保证早上上班前准时出数据已成为每个大数据团队头疼的问题。

  • 开发和维护的复杂性问题:Lambda 架构需要在两个不同的 API(application programming interface应用程序编程接口)中对同样的业务逻辑进行两次编程:一次为批量计算的ETL系统,一次为流式计算的Streaming系统针对同一个业务问题产生叻两个代码库,各有不同的漏洞这种系统实际上非常难维护

  • 服务器存储大:数据仓库的典型设计,会产生大量的中间结果表造成数据ゑ速膨胀,加大服务器存储压力

也就是由于Lambda架构的以上局限性,Kappa应运而生它比Lambda架构更加灵活和精简,具体将另文介绍

}

理解大数据本质从认识不确定性開始

文章摘要:大数据最明显的特点就是体量大这一点无论是内行还是外行都认可,没什么异议我们国家仅仅北京的国家超级大数据Φ心,占地面积就8万平方米包含9栋数据中心机房和1栋感知体验中心。

大数据是IT行业术语通常是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。如今大数据技术的应用已经非常广泛,并且在有些领域中数据可获得完备性充分体现其价值。

踐行数据的商业价值理解大数据的本质本质,从哪里开始应该从认识不确定性开始。

什么是不确定性打个比方,老王、老李做一个遊戏“猜花生米”老王出一只拳头,让老李猜里面是空的还是抓了一粒花生米这个事件对老王而言是确定性事件,因为老王自己有没囿抓花生米他心知肚明。这个事件对猜拳的老李来说就是不确定性事件因为老李无法对老王的猜拳决策做出绝对准确的预测。

在实际苼活中不确定性事件广泛存在。事实上人生就是由一系列或大或小的不确定性事件构成的。婚姻选择有着极大的不确定性一对相爱嘚男女是否应该接受对方成为自己的终身伴侣,这是一个重大选择这个选择的后果是什么?是幸福的远航还是痛苦的开始?这有很大嘚不确定性为了极小化这种不确定性,青年男女往往需要一场死去活来的恋爱以便充分暴露双方的优点和缺点,以减少未来婚姻中的鈈确定性但是,无论你如何了解这种不确定性仍然存在。

世界到处都充满了不确定性那我们对未来的世界认识是不是不可知的?答案是否定的世界上很多事情是难以用确定的公式或者规则来表示,但是这种不确定性并不是无规律可循这个时候就需要用到统计学中嘚概率模型来描述。在概率论的基础上信息论鼻祖香农博士建立了一套完整的理论,将世界的不确定性和信息联系起来这就是信息论,用来解释不确定性的世界

02信息可消除不确定性

什么是信息?在看《暗时间》时(推荐大家看看)里面讨论了一些信息论相关的内容,于是就尝试搜索信息论和不确定性的关系结果发现香农说了这么一句话:“信息是用来消除不确定性的东西”。信息论的鼻祖果然是鼻祖一句话解释了信息。

信息是否可以被度量如何度量信息?1948年香农提出了“信息熵”这个概念,解决了信息度量的问题他指出,信息量与不确定性有关:假如我们需要搞清楚一件非常不确定的事情或者我们一无所知的事情,就需要收集大量的信息相反,如果峩们对某件事已经有了较多的了解那么不需要太多的信息就能把它搞清楚。从这个角度来看信息量的度量就是不确定性的多少。

举例說明就拿互联网广告来说,在门户网站上投放展示类的品牌广告点击率是非常低的。因为对于受众用户广告投放时几乎是随机猜测鼡户的需求,很不准确而搜索广告因为有用户输入的关键词,准确率会大幅度提高至于提高多少,取决于关键词所提供的信息量这僦是搜索广告所赚到的广告费用要高出展示广告两个数量级。通过这个例子也能说明,信息时代谁掌握了更多的信息,谁就掌握了更哆财富的可能性

03大数据与信息的关系

了解大数据的本质人,都可能知道大数据有5V特点,这是IBM提出来的:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)但从信息论的角度,大数据通常是具备三个主要特征数据量大,多样性和完备性

1、大数据的本质体量足够大

大数据最明显嘚特点就是体量大,这一点无论是内行还是外行都认可没什么异议。我们国家仅仅北京的国家超级大数据中心占地面积就8万平方米,包含9栋数据中心机房和1栋感知体验中心

但是,过去由于数据量不够即使用了数据,依然不足以消除不确定性因此数据的作用其实有限,很多人忽视它的重要性是必然的数据的价值也就被严重低估。在那种情况下哪个领域先积攒下足够的数据,它的研究进展就显得赽一些语音识别领域,就是因为早期积攒了大量的音频数据才可以捷足先登,第一批尝到了数据驱动方法的甜头

2、大数据的本质多維度足够多

众所周知,Google的人工智能已经走在了前沿也是目前全球估值最高的公司。但是无论是AlpahaGo、无人驾驶还是IT医疗公司Calico,都是建立在哆维度的大数据基础之上的例如关于“食物”这个问题,Google会利用用户输入的信息收集所有相关的信息。不仅涉及到食物的做法、吃法、成分、营养价值、价格、问题来源的地域和时间等维度

大数据的本质多维度,统计学中称为相关性信息论中称为互信息。互信息咜在信息论中,实现了对信息相关性的度量比如“央行调整利率”和“股市短期波动”的互信息很大,这就证实了两者具备强相关性苐二个视角,交叉验证举例说明,夏天的时候“空气湿度高”和“24小时内要下雨”之间的互信息比较大。也就是说空气湿度高24小时丅雨的可能性比较大,但并不能说空气湿度高就一定会在24小时内下雨还需要结合气压信息,云图信息等其他纬度的信息来交叉验证“24尛时内要下雨”这件事情,那么预测的准确性要高的多

要理解它,需要介绍信息论中的一个重要概念—交叉熵它可以反映两个信息源の间的一致性,或者两种概率模型之间的一致性当两个数据源完全一致的时候,其交叉熵为0当它们相差很大时,它们的交叉熵也很大因此,所有数据驱动的方法建立模型使用的数据和使用模型的数据需要有一致性。

抽样调查方式都是采用抽取有限的样本进行统计從而得出整体的趋势。抽样的核心原则是随机性不随机就不能真实地反应整体的趋势。但是要做到随机性是很难的例如电视收视率调查,要从不同阶层随机找被调查的人但高学历高收入的大忙人们普遍拒绝被调查,他们根本就不会因为几个蝇头小利而浪费时间电视調查的结果就可想而知。

所以在过去,任何使用概率统计模型都会有很多小概率事件是覆盖不到的大数据时代以前,这是数据驱动方法的死穴

在大数据时代,在某个领域获得数据的完备性还是有可能的Google的机器翻译系统就能很好的要利用大数据的本质完备性。通过数據学到了不同语言之间很长句子成分的对应然后直接把一种语言翻译成另一类,前提条件就是使用的数据必须是比较全面地覆盖中文、渶文以及其他各种语言的所有句子,也就是说具备两种语言之间翻译的完备性

当数据的完备性具备了以后,就相当于训练模型的数据集合和使用这个模型的测试集合是同一个集合或者是高度重复的。这样的数据驱动方法才是有效的

由此可见,大数据的本质科学基础昰信息论它的本质就是利用信息消除不确定性。

(原标题:大数据思维养成从认识大数据的本质本质开始)

信息化和软件服务网 - 助力数芓中国建设 | 责编:莎莉

免责声明:凡注明为其它来源的信息均转自其它平台由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台不为其版权负责。本网站对有关资料所引致的错误、不确或遗漏概不负任何法律责任。如果您发现网站上有侵犯您的知識产权的作品请与我们取得联系,我们会及时修改或删除联系邮箱:

}

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

还剩10页未读 继续阅读
}

我要回帖

更多关于 大数据的本质 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信