① 大数据可能是一场骗局
大数据可能是一场骗局
几乎每天都能看到有人在谈论大数据,让人好生厌烦。什么是大数据(Big Data) ? 简单一点可以理解为超出传统数据管理工具处理能力的大规模、复杂的数据集合。判断是否数据大数据的范畴,要从三个维度来衡量:数据量(Volume)、处理速度( Velocity)以及数据种类(Variety)。
大数据(Big Data) 是 2012 年信息技术领域最时髦的词汇。当然,跟所有曾经的时髦技术热词一样,最后可能是一场骗局。为什么?
大数据是个相对的概念,新瓶装旧酒
有些人所说的大数据处理方式,不过是在既有的方案上包装了一下,新瓶装旧酒,只为赶时髦。今天的大数据可能到了明天算不上大数据。过去我们也曾经对「海量数据」望而生畏。但海量数据时代并没有给多少企业带来革命性的变化,在 MapRece 以及 Hadoop 出现之前,没有多少企业能够轻松的对数据进行大规模并行计算(奇怪的是,那时候没有多少人提大数据)。而 NoSQL 的出现也为处理数据的方式带来了更多可能性。我们突然发现,处理数据能力已经悄然增强。
大数据是机会,但不是所有人的机会
大数据的商业前景被过分夸大了。到目前来看,只有为数不多的企业真正拥有大数据,而且这些数据的管理、处理、分析并没有带来所谓空前大的挑战。因为新的工具、新的计算方式已经已经具备处理这些数据的能力。
大数据是机会,但只是少数人的机会,更多是巨头们的商业障眼法,比如 IBM 、Oracle、微软,他们提倡甚至夸大大数据的目的还是为了向你兜售他们的工具,兜售他们的解决方案,确切的说,从你身上赚钱。更有甚者,居然是向你兜售硬件,这不完全是扯淡么? 大硬件还差不多。
中小型公司应该绕道走,别唯大佬们马首是瞻,别总去凑热闹。你所需要的东西,通过开源社区就可以获取到,参加各种大佬们口沫横飞的会议还不如和工程师聊聊可以运用什么工具来具体操练一下。适用好比什么都重要。创业公司也应该绕着大数据走,这未必是个好方向。 大数据的确会有价值,但没有那么大
必须要承认从某些大数据中会挖掘出新的价值,但这个价值只是附加价值,没有理由去夸大他,更没有理由去无端的想象。你可以说这篇沙漠可能有金子,但并不是说沙漠中一定就能挖掘出金子。
从现在业界一些公司拿出来的所谓的大数据应用实例来看,依然只是在利用传统意义上的数据价值,只是巧妙地把这笔帐记在了大数据上而已。一个电子商务网站说什么地方的人买东西最疯狂或是什么型号手机最好卖,这会是大数据分析的结果,完全是扯淡嘛。难道数据仓库系统分析出来的结果和这个大数据出来的结果会有不同么?
不算结束的结束语
大数据不会是什么商业模式的变革,重视大数据,但没必要抱着大数据的大腿,尤其是在业界对于数据还不够重视的时候,就更别说大数据了。相信随着时间的推移,大数据这个词会和信息爆炸、网格计算、云计算等逐渐被淡忘,当然,到时候可能出现新的时髦词汇了。
没有大数据,只有数据;没有蓝海,只有大海;没有先知,只有忽悠。
② 注意力经济数字经济新媒体的四个维度
以下是关于注意力经济、数字经济和新媒体四个维度的解析:
1. 内容维度:
内容维度关注媒体传播的信息本身,涵盖文字、图像、音频、视频等多种形式。在注意力经济中,高质量的内容更能吸引用户关注,从而提高用户的留存率和参与度。
2. 平台维度:
平台维度涉及不同的数字媒体平台,如社交媒体、搜索引擎、新闻客户端和短视频平台等。每个平台都有其独特的用户群体和使用习惯。媒体需要针对这些平台特性来制定相应的传播策略。
3. 商业模式维度:
商业模式维度指的是数字媒体的盈利方式和运作模式,包括广告、付费订阅、电商、内容付费等。一个有效的商业模式不仅能够推动数字媒体的创新和发展,还能提升用户体验和价值。
4. 技术维度:
技术维度关注数字媒体运用的技术手段,如人工智能、大数据、区块链等。这些先进技术的应用为数字媒体提供了更高效、便捷和安全的服务,同时增强了媒体的创新能力和竞争力。
③ 利用大数据发展业务的五个维度
利用大数据发展业务的五个维度
对于大数据的前景,有53%的互联网专家和观察员相信,它将给社会的各个方面都带来积极的影响。大数据可以增加社会透明度、可以更好地分析系统性能等等,因此它在未来价值巨大。
除了以上优点,大数据还能创造新的商业模式、产品和服务。让我们来看看大数据的这些优点会给公司带来怎样的好处。以下是当今公司利用大数据发展业务的方法:
了解客户
市场界的新规则是:市场人员可以影响公众对品牌的看法,但不能完全控制公众的交流内容。除了提供优秀的客户体验并精简市场推广活动,公司还需要靠大数据的支持来提供定制化的私人服务。
利用大数据,当市场人员与客户进行交流时,就能发现哪些东西能影响客户,并在诸多渠道之中选择最佳市场方案。每天活跃在互联网上的10亿Facebook用户和4亿Twitter用户,让零售商看到了市场的巨大潜力。获取社交平台数据并不是了解客户行为的最终目的,市场人员还需要通过解读关键字使用频率趋势,以及运用某些矩阵分析法来做进一步分析。现在亚马逊能通过购买记录、浏览记录、购物车记录等数据来预测其8900万用户的购买行为。
优化流程
大数据意味着大机遇。当员工可以利用数据时,员工的工作效率和公司的销售业绩都会显著提升。在2012年,生产效率提升最明显的是零售行业,升幅达49%,相应的零售总量提升至12亿美元。
市场人员还可以通过实时商业情报系统和数据挖掘技术来优化流程。最近,保险行业诞生了估算个人风险的新模型。在澳大利亚富士施乐公司的支持下,保险行业现在能提供更快捷的私人服务,并更有效地与客户交流。
创造机会
通过人口统计学市场分割,公司能快速找到目标客户并提供相应产品。这样的市场调查让市场人员更了解客户的兴趣、需求、情感,从而更好地服务客户。
拿微软的市场调查来说,他们发现50%的年轻父亲受到电子广告的影响。如果市场人员的目标客户群是男性,或许这项调查会很有帮助。市场人员不仅可以快速找到目标客户群,还可以通过大数据分析来了解客户需求,并提前增加相应产品的库存量。
客户关系管理(CRM)
这些年,客户对申诉回复速度的期望越来越高。1/4的Facebook和Twitter用户认为公司应该在1小时内回复社交平台上的申诉。市场人员可以开展客户关系管理,在提供服务的时候获取客户的私人信息。而在详细了解客户之后,不论是发送定制广告、邮件,还是利用实时分析相关产品进行推送,都是有效的商业营销手段。
关于私人订制客户体验,一项调查中87%的体验反馈表明,抓取并共享有效的数据对评估投资回报率至关重要。
加强安全措施
公司一般需要信息技术专家来保护内部数据,但公司也可以选择采用云服务和云分析技术来达到相同目的。阿米特·维塔尔(Amit Vital)是某大型IT公司的首席信息官,他说大数据分析可以帮助定制并校准安全工具。
像谷歌这样的公司是不允许外人进入其数据中心的。公司将客户的数据储存在不同地方,这样做在提供安全保障的同时,还能达到改善客户体验的目的。
以上是小编为大家分享的关于利用大数据发展业务的五个维度的相关内容,更多信息可以关注环球青藤分享更多干货
④ 什么是大数据,红海,蓝海,互联网思维,o2o,众筹
个人理解。大数据首先有两个维度,一个是数量维度,一个是数据本内质属性指标容维度。比如就拿淘宝分析消费者这个案例来举例,首先这个消费信息够大,至少他能分析一个消费者十年的消费数据,这是单个维度的指标,淘宝上有上亿的消费者,同样可以做到区域性分析。所以大数据至少要有这两个维度。
红海一般指的是某一个产品品类进入的竞争者太多了,已经达到了完全竞争的状态,像手机行业,日化用品行业等等,红海一般的特征是,打价格战。
蓝海,一般是指目前进入这个行业的对手还很少,尚未达到完全竞争状态。创业最喜欢的就是蓝海!
互联网思维说的有点广,每个人都有不同的理解。但是本质上来讲,就是互联网解决了营销,和消除中间商的传统销售模式。所以互联网思维就是在这两个方面把握住。
o2o有很多版本,通常的理解是线上和线下。本质上来讲,o2o其实概念操作而已,但是现在创业不了解这些概念还真不好意思说你懂互联网了。
众筹其实就是多人用资金支持一个认为可以成功的项目,获得非金钱而是项目中承诺的物质回报的一种创业模式。
⑤ 高并发,你真的理解透彻了吗
高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。
在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多。
大概分成这样几类:
1、对数据化的指标没有概念 :不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键数据。
3、理解片面,把高并发设计等同于性能优化 :大谈并发编程、多级缓存、异步化、水平扩容,却忽视高可用设计、服务治理和运维保障。
4、掌握大方案,却忽视最基本的东西 :能讲清楚垂直分层、水平分区、缓存等大思路,却没意识去分析数据结构是否合理,算法是否高效,没想过从最根本的IO和计算两个维度去做细节优化。
这篇文章,我想结合自己的高并发项目经验,系统性地总结下高并发需要掌握的知识和实践思路,希望对你有所帮助。内容分成以下3个部分:
高并发意味着大流量,需要运用技术手段抵抗流量的冲击,这些手段好比操作流量,能让流量更平稳地被系统所处理,带给用户更好的体验。
我们常见的高并发场景有:淘宝的双11、春运时的抢票、微博大V的热点新闻等。除了这些典型事情,每秒几十万请求的秒杀系统、每天千万级的订单系统、每天亿级日活的信息流系统等,都可以归为高并发。
很显然,上面谈到的高并发场景,并发量各不相同, 那到底多大并发才算高并发呢?
1、不能只看数字,要看具体的业务场景。不能说10W QPS的秒杀是高并发,而1W QPS的信息流就不是高并发。信息流场景涉及复杂的推荐模型和各种人工策略,它的业务逻辑可能比秒杀场景复杂10倍不止。因此,不在同一个维度,没有任何比较意义。
2、业务都是从0到1做起来的,并发量和QPS只是参考指标,最重要的是:在业务量逐渐变成原来的10倍、100倍的过程中,你是否用到了高并发的处理方法去演进你的系统,从架构设计、编码实现、甚至产品方案等维度去预防和解决高并发引起的问题?而不是一味的升级硬件、加机器做水平扩展。
此外,各个高并发场景的业务特点完全不同:有读多写少的信息流场景、有读多写多的交易场景, 那是否有通用的技术方案解决不同场景的高并发问题呢?
我觉得大的思路可以借鉴,别人的方案也可以参考,但是真正落地过程中,细节上还会有无数的坑。另外,由于软硬件环境、技术栈、以及产品逻辑都没法做到完全一致,这些都会导致同样的业务场景,就算用相同的技术方案也会面临不同的问题,这些坑还得一个个趟。
因此,这篇文章我会将重点放在基础知识、通用思路、和我曾经实践过的有效经验上,希望让你对高并发有更深的理解。
先搞清楚高并发系统设计的目标,在此基础上再讨论设计方案和实践经验才有意义和针对性。
高并发绝不意味着只追求高性能,这是很多人片面的理解。从宏观角度看,高并发系统设计的目标有三个:高性能、高可用,以及高可扩展。
1、高性能:性能体现了系统的并行处理能力,在有限的硬件投入下,提高性能意味着节省成本。同时,性能也反映了用户体验,响应时间分别是100毫秒和1秒,给用户的感受是完全不同的。
2、高可用:表示系统可以正常服务的时间。一个全年不停机、无故障;另一个隔三差五出线上事故、宕机,用户肯定选择前者。另外,如果系统只能做到90%可用,也会大大拖累业务。
3、高扩展:表示系统的扩展能力,流量高峰时能否在短时间内完成扩容,更平稳地承接峰值流量,比如双11活动、明星离婚等热点事件。
这3个目标是需要通盘考虑的,因为它们互相关联、甚至也会相互影响。
比如说:考虑系统的扩展能力,你会将服务设计成无状态的,这种集群设计保证了高扩展性,其实也间接提升了系统的性能和可用性。
再比如说:为了保证可用性,通常会对服务接口进行超时设置,以防大量线程阻塞在慢请求上造成系统雪崩,那超时时间设置成多少合理呢?一般,我们会参考依赖服务的性能表现进行设置。
再从微观角度来看,高性能、高可用和高扩展又有哪些具体的指标来衡量?为什么会选择这些指标呢?
2.2.1 性能指标
通过性能指标可以度量目前存在的性能问题,同时作为性能优化的评估依据。一般来说,会采用一段时间内的接口响应时间作为指标。
1、平均响应时间:最常用,但是缺陷很明显,对于慢请求不敏感。比如1万次请求,其中9900次是1ms,100次是100ms,则平均响应时间为1.99ms,虽然平均耗时仅增加了0.99ms,但是1%请求的响应时间已经增加了100倍。
2、TP90、TP99等分位值:将响应时间按照从小到大排序,TP90表示排在第90分位的响应时间, 分位值越大,对慢请求越敏感。
3、吞吐量:和响应时间呈反比,比如响应时间是1ms,则吞吐量为每秒1000次。
通常,设定性能目标时会兼顾吞吐量和响应时间,比如这样表述:在每秒1万次请求下,AVG控制在50ms以下,TP99控制在100ms以下。对于高并发系统,AVG和TP分位值必须同时要考虑。
另外,从用户体验角度来看,200毫秒被认为是第一个分界点,用户感觉不到延迟,1秒是第二个分界点,用户能感受到延迟,但是可以接受。
因此,对于一个 健康 的高并发系统,TP99应该控制在200毫秒以内,TP999或者TP9999应该控制在1秒以内。
2.2.2 可用性指标
高可用性是指系统具有较高的无故障运行能力,可用性 = 正常运行时间 / 系统总运行时间,一般使用几个9来描述系统的可用性。
对于高并发系统来说,最基本的要求是:保证3个9或者4个9。原因很简单,如果你只能做到2个9,意味着有1%的故障时间,像一些大公司每年动辄千亿以上的GMV或者收入,1%就是10亿级别的业务影响。
2.2.3 可扩展性指标
面对突发流量,不可能临时改造架构,最快的方式就是增加机器来线性提高系统的处理能力。
对于业务集群或者基础组件来说,扩展性 = 性能提升比例 / 机器增加比例,理想的扩展能力是:资源增加几倍,性能提升几倍。通常来说,扩展能力要维持在70%以上。
但是从高并发系统的整体架构角度来看,扩展的目标不仅仅是把服务设计成无状态就行了,因为当流量增加10倍,业务服务可以快速扩容10倍,但是数据库可能就成为了新的瓶颈。
像MySQL这种有状态的存储服务通常是扩展的技术难点,如果架构上没提前做好规划(垂直和水平拆分),就会涉及到大量数据的迁移。
因此,高扩展性需要考虑:服务集群、数据库、缓存和消息队列等中间件、负载均衡、带宽、依赖的第三方等,当并发达到某一个量级后,上述每个因素都可能成为扩展的瓶颈点。
了解了高并发设计的3大目标后,再系统性总结下高并发的设计方案,会从以下两部分展开:先总结下通用的设计方法,然后再围绕高性能、高可用、高扩展分别给出具体的实践方案。
通用的设计方法主要是从「纵向」和「横向」两个维度出发,俗称高并发处理的两板斧:纵向扩展和横向扩展。
3.1.1 纵向扩展(scale-up)
它的目标是提升单机的处理能力,方案又包括:
1、提升单机的硬件性能:通过增加内存、 CPU核数、存储容量、或者将磁盘 升级成SSD 等堆硬件的方式来提升。
2、提升单机的软件性能:使用缓存减少IO次数,使用并发或者异步的方式增加吞吐量。
3.1.2 横向扩展(scale-out)
因为单机性能总会存在极限,所以最终还需要引入横向扩展,通过集群部署以进一步提高并发处理能力,又包括以下2个方向:
1、做好分层架构:这是横向扩展的提前,因为高并发系统往往业务复杂,通过分层处理可以简化复杂问题,更容易做到横向扩展。
上面这种图是互联网最常见的分层架构,当然真实的高并发系统架构会在此基础上进一步完善。比如会做动静分离并引入CDN,反向代理层可以是LVS+Nginx,Web层可以是统一的API网关,业务服务层可进一步按垂直业务做微服务化,存储层可以是各种异构数据库。
2、各层进行水平扩展:无状态水平扩容,有状态做分片路由。业务集群通常能设计成无状态的,而数据库和缓存往往是有状态的,因此需要设计分区键做好存储分片,当然也可以通过主从同步、读写分离的方案提升读性能。
下面再结合我的个人经验,针对高性能、高可用、高扩展3个方面,总结下可落地的实践方案。
3.2.1 高性能的实践方案
1、集群部署,通过负载均衡减轻单机压力。
2、多级缓存,包括静态数据使用CDN、本地缓存、分布式缓存等,以及对缓存场景中的热点key、缓存穿透、缓存并发、数据一致性等问题的处理。
3、分库分表和索引优化,以及借助搜索引擎解决复杂查询问题。
4、考虑NoSQL数据库的使用,比如HBase、TiDB等,但是团队必须熟悉这些组件,且有较强的运维能力。
5、异步化,将次要流程通过多线程、MQ、甚至延时任务进行异步处理。
6、限流,需要先考虑业务是否允许限流(比如秒杀场景是允许的),包括前端限流、Nginx接入层的限流、服务端的限流。
7、对流量进行 削峰填谷 ,通过 MQ承接流量。
8、并发处理,通过多线程将串行逻辑并行化。
9、预计算,比如抢红包场景,可以提前计算好红包金额缓存起来,发红包时直接使用即可。
10、 缓存预热 ,通过异步 任务 提前 预热数据到本地缓存或者分布式缓存中。
11、减少IO次数,比如数据库和缓存的批量读写、RPC的批量接口支持、或者通过冗余数据的方式干掉RPC调用。
12、减少IO时的数据包大小,包括采用轻量级的通信协议、合适的数据结构、去掉接口中的多余字段、减少缓存key的大小、压缩缓存value等。
13、程序逻辑优化,比如将大概率阻断执行流程的判断逻辑前置、For循环的计算逻辑优化,或者采用更高效的算法。
14、各种池化技术的使用和池大小的设置,包括HTTP请求池、线程池(考虑CPU密集型还是IO密集型设置核心参数)、数据库和Redis连接池等。
15、JVM优化,包括新生代和老年代的大小、GC算法的选择等,尽可能减少GC频率和耗时。
16、锁选择,读多写少的场景用乐观锁,或者考虑通过分段锁的方式减少锁冲突。
上述方案无外乎从计算和 IO 两个维度考虑所有可能的优化点,需要有配套的监控系统实时了解当前的性能表现,并支撑你进行性能瓶颈分析,然后再遵循二八原则,抓主要矛盾进行优化。
3.2.2 高可用的实践方案
1、对等节点的故障转移,Nginx和服务治理框架均支持一个节点失败后访问另一个节点。
2、非对等节点的故障转移,通过心跳检测并实施主备切换(比如redis的哨兵模式或者集群模式、MySQL的主从切换等)。
3、接口层面的超时设置、重试策略和幂等设计。
4、降级处理:保证核心服务,牺牲非核心服务,必要时进行熔断;或者核心链路出问题时,有备选链路。
5、限流处理:对超过系统处理能力的请求直接拒绝或者返回错误码。
6、MQ场景的消息可靠性保证,包括procer端的重试机制、broker侧的持久化、consumer端的ack机制等。
7、灰度发布,能支持按机器维度进行小流量部署,观察系统日志和业务指标,等运行平稳后再推全量。
8、监控报警:全方位的监控体系,包括最基础的CPU、内存、磁盘、网络的监控,以及Web服务器、JVM、数据库、各类中间件的监控和业务指标的监控。
9、灾备演练:类似当前的“混沌工程”,对系统进行一些破坏性手段,观察局部故障是否会引起可用性问题。
高可用的方案主要从冗余、取舍、系统运维3个方向考虑,同时需要有配套的值班机制和故障处理流程,当出现线上问题时,可及时跟进处理。
3.2.3 高扩展的实践方案
1、合理的分层架构:比如上面谈到的互联网最常见的分层架构,另外还能进一步按照数据访问层、业务逻辑层对微服务做更细粒度的分层(但是需要评估性能,会存在网络多一跳的情况)。
2、存储层的拆分:按照业务维度做垂直拆分、按照数据特征维度进一步做水平拆分(分库分表)。
3、业务层的拆分:最常见的是按照业务维度拆(比如电商场景的商品服务、订单服务等),也可以按照核心接口和非核心接口拆,还可以按照请求源拆(比如To C和To B,APP和H5 )。
高并发确实是一个复杂且系统性的问题,由于篇幅有限,诸如分布式Trace、全链路压测、柔性事务都是要考虑的技术点。另外,如果业务场景不同,高并发的落地方案也会存在差异,但是总体的设计思路和可借鉴的方案基本类似。
高并发设计同样要秉承架构设计的3个原则:简单、合适和演进。"过早的优化是万恶之源",不能脱离业务的实际情况,更不要过度设计,合适的方案就是最完美的。
作者简介:985硕士,前亚马逊工程师,现大厂技术管理者。
⑥ 认知计算,人工智能和大数据分析有何区别
你好·抄
大数据分析属于认知计算的一个维度。与大数据相比,认知计算的范围更广、技术也更为先进。
认知计算和大数据分析有类似的技术,比如大量的数据、机器学习(MachineLearning)、行业模型等,大数据分析更多强调的是获得洞察,通过这些洞察进行预测。此外,传统的大数据分析会使用模型或者机器学习的方法,但更多的是靠专家提供。
对于认知计算而言,洞察和预测只是其中的一种。但是,认知计算更为强调人和机器之间自然的交互,这些维度都不是传统的大数据分析所强调。
此外,认知计算目前成长很快的一个领域为深度学习(DeepLearning),它的学习方法与传统方法不同,更多的是基于大量的数据通过自学的方式得到这样的模型,而不需要很多的人为干预,这个从学习方法来讲和大数据分析有很多不同的地方。
希望能够帮助到你
⑦ 复杂与失控的现实 大数据平台的思考
复杂与失控的现实:大数据平台的思考
“在大数据行业干了这么些年,我相信大家都有一种在泥潭中挣扎的感觉。要搞清楚到底有哪些数据、数据的结构、数据的来源、数据的意义、数据的上下文、数据的质量、数据可能有哪些局限性等等,都是非常麻烦的事情。在大多数情况下我们会发现数据的元数据缺失,数据的说明文档不存在或者文档有用的内容很少。为了某一个新任务要把数据搞清楚,我们可能需要咨询很多不同的人,每个人对数据的说法都不完全一致,当所有相关方都沟通了几次后,我们才大致把数据的概貌搞清楚。而这仅仅是完成了第一步,后面的数据处理、数据探索、特征工程、分析建模、生产应用还有无数的迷宫的需要探索。
自然,面对这些问题,我们会想能不能有一个平台把数据以及数据利用的各个环节都有效管起来,让我们可以很轻松的把数据的来龙去脉搞清楚,借助各种强大的功能非常方便的让我们把数据处理、数据探索、特征工程、分析建模乃至生产应用都轻松的解决。总之,我们希望这个平台能把一切都管起来,把一切关于数据、项目和工程的信息都管起来。使用者只需要在这个平台上就能获得关于数据的一切信息,并能够获得各种运用数据的能力。这可以说是数据平台的终极理想。
但是最近半年来,我对这个终极理想产生了比较大的疑惑,感觉追求这一目标可能是“理性的自负”。
复杂与失控的现实
复杂的大数据:
“首先,大数据本身就是极其复杂的,不仅在于规模、维度、类型,也在于其各种变化和各种不完美。而且大数据还在日复一日的变得更大、更复杂、更快,要把所有数据以及所有数据的所有方面全部都搞清楚,恐怕是非常困难的,很可能已经是人力不可及的事情。
可能必须得承认,我们对大数据的控制能力是有限的,大数据很大程度上对于人类来说就是失控的。很直接的一个例子就是“数据湖”,显然“数据湖”失去了传统数据库和数据仓库那种井井有条的规范美。“数据湖”基本上就是把所有可以收集到的数据堆放在一起,并没有非常规范的管理。并不是人们不想管理,而是事实上是做不到的,只能向现实妥协。当然,这种妥协很大程度上是可能是自发的而不是自觉的。
可能很多人也认为“数据湖”只是一种过渡,我们还在等待更强大的数据管理和数据治理的技术、工具、平台和方法论的出现。但是,人的智力和精力终归是有限的,如果我们期望能为所有数据都建立非常良好的文档和谱系来进行管理,并且能够得到及时的维护更新,需要投入的人力可能是无法承受的。而且如何保证这些管理的质量?只做形式审查是比较容易的,但是无法正真保证管理文档的内容质量,但是实质审查实际上又是不可能做到的。因此,很可能我们根本没有办法对大数据建立起传统意义中的管理体系。”
复杂的技术:
“其次,技术上的问题也是非常复杂的。技术问题的复杂性主要来自于各种技术本身的不完备性,任何技术都只能解决某一类型的问题。但是一个通用的数据平台,至少需要考虑能解决大部分的常见需求,这就意味着必须要将不同的技术整合到一起。多种技术的整合是非常考验系统工程能力的,这是要过的第一关。
但更大困难在于技术的快速发展,新技术、新开源项目不断涌现,既有技术和项目有些持续发展、不断更新,有的逐步衰退。这种情况下,如何能够保证平台本身在技术上能跟上时代是个非常困难的问题。一个系统的结构一旦确定,就会形成路径依赖,随着时间的推移,会变得越来越难以变动,越来越难以将新技术整合进来。
另外,即使技术本身不变化、功能不变化,但是处理的数据规模不同、质量不同、具体的资源规模和配置都会有很大的不同。处理大数据难点在于如何用有限的资源和能力来处理规模巨大的问题。同样的处理逻辑,但是数据规模的不同,有效的处理方法可能就有很不同。而这是预设功能难以全面考虑清楚的。
综上,大数据平台面对的技术问题也是开放性的,或者说也是失控的,我们执着于技术和功能层面的大一统也很可能是“理性的自负”。
大数据平台设计哲学的重构
面对大数据,在数据和技术都失控的情况下,考虑如何强加对数据的控制和提高驾驭数据的能力都很可能是徒劳的。我们需要重新思考大数据平台的设计哲学,而不是在传统大型软件设计的哲学下做加强和修补。对于此, TalkingData首席数据科学家 张夏天 有一些思考。
拥抱不完美:
“首先,我们必须承认我们的无知和无能,放弃去构建一个全知全能的平台的理想。我们需要思考大数据平台要管什么,更重要的是不管什么。我们需要在该放手的地方就放手,我们需要接受甚至是拥抱某种程度的失控。我们很可能就没有办法把所有数据都非常好的管起来,只需要通过平台,新手就很容易把数据情况搞清楚。我们很可能也无法提供完全统一设计风格、交互逻辑的功能界面。我们必须容忍一定的混乱,从而拥抱无限的可能和变化。”
经验与价值的沉淀:
“还是先从数据来看,了解数据最便捷的途径就是找到最了解这个数据的人进行直接沟通。最了解数据的人可能是数据的生产者,也可能是数据的处理者,甚至是消费者。很多情况下完全搞清楚,可能需要与所有相关方都进行沟通后才比较清楚。平台的设计到底是要消除这种直接沟通,还是让这种沟通更有效率呢?
因为全面文档化是不现实的,那么我们能够考虑的是让目前的方式效率更高。数据平台能够承担的一个功能是更有效的把数据的需求方和了解数据的人连接起来。原来我想找一个了解某个数据的人,都可能需要问好几个人,而要了解清楚一个数据又可能需要找到好几个人,这就需要不断在线下反复的沟通。如果平台能够告诉我哪些人对这些数据最了解,这就可以提升相当多的效率。
当一个人一位对某个数据最了解,而被人问了很多次问到很烦的时候,他可以把自己对这个数据的总结的文档和FQA放到平台上。对这个数据关心的人也可以写评论谈自己对数据的理解和遇到的坑。当一个数据被使用的越多,那么平台上就可以沉淀出越多关于这个数据的信息,包括最熟悉的人和各种对数据的描述和解读,后来的使用者就越容易掌握这个数据。
我们可以想象,一个数据平台,经过一段时间的沉淀,有些数据的相关文档会变得十分丰富,而有些数据根本无人问津。当我们不追求全面的控制后,最有价值的信息可能就自动涌现了。当然,当我们要使用一些鲜有人问津的数据时,就需要经历一个比较痛苦的过程。但是只要平台能把这个过程积累到的经验沉淀下来,就是有价值的。”
从标准化到社区化:
“利用大数据是需要探索精神的,大数据平台不应该是一条机械的流水线,把使用者变成一个个没有联系的随时可以替换掉的零部件。因为我们不可能做成真正构建这样有效率的流水线。同时,我们几乎无法用一套客观的量化指标来衡量对数据的利用效率,我们必须寄希望于人的主动精神。大数据平台的设计哲学应该以人为中心,尊重人的价值,激励人的探索和创新精神,让对数据有激情的人能够涌现出来,产生更大的声音,同时鼓励和便利人与人之间的沟通,从而提高总体的效率。总之,平台设计思想应该从标准化转为社区化。”
弹性与开放:
“从技术上来看,我们需要尽可能的适应各种不同的功能和性能需求以及未来可能出现的技术演进。为了解决这个问题,我们需要的不是一个结构复杂包罗万象的技术架构,因为越复杂的系统就越脆弱,就越难以进化。 我们也不能绑定核心计算引擎就是Spark或者某几种特定技术,否则这就不是一个能力全面的数据平台。
很多为自有业务设计的数据平台是可以考虑业务特性来进行特化的。但是我们作为企业服务的提供商,需要考虑的是足够的通用性和灵活性。我们在技术架构的设计哲学上,不应该执着于提供多少强大的功能,而是应该专注于能够提供多少可能性和可扩展性。我们永远无法知道明天客户会有什么新需求,也无法知道会有什么新技术出现。
因此在技术架构上,应该以容器技术为基础,实现弹性的资源管理,和对技术和功能的开放支持能力。在容器技术的支持下,可以做到不同计算资源的即开即用即回收,可以支持资源的动态智能调整。当一个任务需要Spark时就创建Spark集群,需要TensorFlow就创建TensorFlow集群,任务完成就可以把资源及时回收,任务过程中根据资源使用情况和任务完成要求,动态的增加或者减少资源。
这种架构下,我们不是将各种技术能力整合封装成各种固定功能提供给使用者将他们的工作傻瓜化,而是向使用者赋能为其开放各种技术能力以及资源能力去创造无限的可能性。这种架构下很难提供统一的界面设计风格、交互逻辑,很多工作也需要使用者开发完成。因为我们无法做到对所有的技术进行统一风格的封装,而是把所有的技术直接暴露给了使用者,使用者必须自己使用这些技术来解决问题。当然这并不是说我们不需要做产品设计,只是产品设计的出发点不是创造一套独立完美的体系,而是应该着力于让使用者更容易的将不同的技术方便的组织起来,同时减少在不同技术之间切换的麻烦。
同时,技术架构也需要考虑不同模块之间如何组织的问题,这个问题遵循服务化的思路应该是已经形成共识,这里就不再过多展开。只是个人觉得在推行服务化之前,我们需要把服务接口的标准、服务总线的技术定下来。有好的服务基础架构,新增、替换、升级不同的模块就变得相对容易。从需求角度确定的功能和模块不可能是百分之百正确的,后续一定会面临着重构和调整的问题。只有做好面对一切变化的准备,才能更好的面对各种不确定性。”
适应而不是约束:
“最后,我想谈谈关于方法论的问题。产品设计方法论先行是对的,但是我们要深入思考什么才是有效的方法论。关于数据挖掘的方法论已经存在十几年了(CRISP-DM),老实说我们在思考的数据科学的方法论并不会有本质性的改变。但我对这些方法论的感觉就是“如何把大象放进冰箱”,或者5步画马法。原则上都对,但是对实际工作的指导意义非常有限,因为魔鬼都在细节中。
其实面对大数据,不仅我们对数据和技术是失控的,实际上我们如何处理、应用数据的过程在很大程度上也是失控的。整个过程就像在走迷宫,工作步骤分形似的不断展开。任何大的指导原则对于具体工作的指导意义就变得极为有限。
正因为如此,产品设计应该考虑的是如何适应这种Ad-hoc的工作状态,而不是用一套流程把使用者束缚起来。我们可以提供一些机制便于使用者来梳理手头的工作,但是尽可能不要去强制使用者遵守某种约束性很强的标准或者规范。为什么像NoteBook这样设计如此简单的工具能够流行起来,很重要的一点就是给使用者足够自由的工作界面来做任何想做的事情,而且即写即得,便于随时修改策略,同时文档可以根据需要随时插在代码之中。正是这种无结构的扁平性,使得用户可以按照最合适的路径去完成自己的工作,而不是在被设计好的过程中挣扎。”
总结
“写了这么多,其实核心想说的就是我们必须警惕“理性的自负”。我们首先必须承认理性的力量是有限的,我们不是无所不能的。面对着数据失控、技术失控和需求失控的问题,我们到底是要想尽一切办法去控制,还是顺应、包容甚至是欣赏这些失控。这是在我们智能数据平台研发道路的起点上需要思考的问题。”