最适合大数据应用的是SOA还是REST?

跟所有的企业数据一样,大数据唯有通过应用投射给用户才有用。对于设计或重新设计大数据应用的架构师来说,一个关键问题是究竟是用面向对象架构(SOA)还是RESTful API将大数据组件及服务与应用其他部分连接。从大数据产品要暴露的接口开始,然后在应用这一侧定义大数据接口。接下来,考虑安全和治理,最后,无论选择什么样的API都要小心地将管理和访问服务分隔开来。

做大数据应用的一个主要问题是与大数据容器本身进行交换的本质。这一关系包括了传统的哪一种抽象级别最适合应用的问题,所需的事务及状态控制以及必要的安全性。

大数据工具往往混合了API,部分RESTful以及部分类似SOA式的API。这种混编会导致一种混乱的景象,除非大数据接口被抽象为服务或资源,而不是直接暴露给应用。这样的话,只有一个组件需要做出变化——大数据适配器流程——如果大数据工具彻底改变了的话。

大数据应用,什么时候用SOA,什么时候用REST

在大数据适配器与其他组件之间的接口处,看看大数据是如何被用来为选择API进行指导的。SOA适合在向大数据容器这样的东西发布一组与应用绑定的特定能力的情况。这一模型可以是高度抽象的,意味着应用使用大数据可以与数据本身的技术和可分布性完全隔绝。

应用预期会在特定分析或规约流程的结果方面更多使用大数据,在这种情况下SOA是有意义的。如果应用需要知道作为资源集的大数据的情况,又不想把它抽象化为高层服务,那么RESTful接口也许会更合适。

在这种高度上进行应用审查,至关重要的一点是不要掉进这样一个陷阱,即假定大数据应用应该用Apache的WebHDFS这类现有的RESTful API来开发。通常而言,最好的办法是将大数据流程或设施与应用通过现有的接口连接起来,而不是那些用来直接进行文件系统级操作的。后一种类型的接口会产生可观的增量式开发工作,如果是在这个层面来写,要想将应用从一个大数据服务或设施迁移至另一个几乎是不可能的。

上下文、状态及事务性行为

事务就是工作的上下文,一个从业务角度产生流程步骤的逻辑序列。在确定是SOA还是REST最适合大数据应用时,第一个问题是事务性工作是否包含在大数据组件之内,或者大数据引用在事务中是否跨多个组件传播。第一种情况下,RESTful接口可轻易部署。而在第二种情况下,要想用REST,就得需要某种事务状态控制的机制。而SOA这两种情况都很容易处理。

在进行大数据的SOA和REST决策时,安全和治理也是很重要的点。SOA的安全、访问日志及控制是显式的,且与用户目录和应用控制是高度集成在一起的。而REST的安全和访问控制机制则可能是在外部应用的。这有可能是将大数据访问包装进SOA里面的一个有力的理由,即便在REST使用是在大数据产品级这种层次上也是如此。如果采用RESTful模型的话,必须明确如何建立起能通过正式治理评审的大数据安全。大多数用户会吸收VPN或SSL级的安全,但还会通过网络级的应用访问安全来增强。

最后,小心不要暴露过度。大多数情况下,大数据服务可分为两类——实际的数据访问服务以及数据服务平台管理和控制服务。所有的现代大数据架构都支持这两种,但因为平台管理和控制往往被视为是技术过程而非应用过程,其支持往往牵涉到通过简单的REST接口进行低级的功能访问。大数据管理服务应该尽量少直接暴露给应用开发者或用户,因为会导致相当重大错误的风险。

在需要平台管理工具为大数据使用进行准备时,最好是将这些功能在大数据适配器组件内实现,为应用开发者建立一个更容易的接口来使用,并确保在大数据分析开始之前永远都先经历必要的平台管理步骤。

为架构师和大数据专家预留对平台管理API的访问将是必要的,这样能让他们在日常的数据仓储维护任务中用到。部分用户建议对低级的平台管理API进行抽象,这样的话哪怕是平台管理实践也能跨多个实现应用,但经验告诉我们,要想在这种层次上建立有用的通用实践是很困难的。最好的做法有可能是就让专家和架构师在需要时采用特定的平台管理API就行了。

一旦大数据SOA/REST评审完成,永远要记得把这两种截然不同的API风格的结果与一般政策对照一下。一种工具被创建出来时,需要的绝不仅仅是确立的API基线支持,还包括不同的实践,要预料到更高层面的风险。确保在进行下去之前对风险进行了评估。

软件工程的根本问题

软件工程存在什么问题?直接讲这一问题是:当一个人一个组织提倡一种方法时,不单要阐明方法自身,还要阐明方法自身的边界。而不是潜在的认为每一个自己创建的方法都是全能型的。

因为软件是一个庞杂的概念,基于其本质来看只有设计模式、正交、信息隐藏这样基于纯粹思维的东西有可能是共通于所有软件的,而软件工程由于更多的要基于思维承载之物的特质,所以必然会有比较清晰的适用边界。

所以说更合理的状态是不只要有通用的软件工程,也应该有适用于互联网的软件工程,适用于国防部软件的软件工程等,后者才是真正面向实践的。敏捷,CMMI这类东西在描述方法的同时既要描述自己的方法论本身,也要描述自己面临的约束和适用边界。最好能说清楚,自己哪些东西是变量,面对哪类现实时要进行何种伸缩。

但实际上恰恰与此相反,每当一种工程方法出世的时候,它的作用总是潜在的有扩大的趋势,似乎一旦锤子在手之后,所有身边的东西就都变成了应该锤一锤的钉子。

这有市场的因素,因为扩大了后相关生意更好做一些,也可以拿到一些奖励什么的,但更多的还是因为自身并不做太多思考。作为一种结果,过去十年里种种方法论兴亡过手,但开发水平很可能并没因此而提高多少。有点年纪的人大致应该记得由ISO到CMMI,再到敏捷的故事。当前应该是敏捷正处在兴盛期,但反敏捷的声音已经出现。

这进一步导致了一个奇葩的结果:现场的人非常反感软件工程,说:我一看到软件工程的书我就略过。很多人不再相信什么工程方法,更多的跟着感觉走,但与此同时则是《人月神话》中描述的猛犸象挣扎于焦油坑现象一再上演。

如何定义或寻找方法论的边界

那究竟怎样才能去定义或寻找一种方法论的适用边界?

如果把所有影响软件的因素都涵盖于软件工程之内,那么这事儿就变成无边界的了,财务、公司运营、市场营销全对软件有影响,如果把他们都包含到软件工程的概念内,软件工程就变成了四不像,什么都是可也什么都不是。

这点上可以向经济学家取经,经济学家研究经济学的方法是:先假设某些因素不发生变动,进而观察几个特定因素的变化和关系。

我们可以先抽去商务因素、市场因素对软件的影响,寻找本质规律,用的时候再把商务因素、市场因素的权变加回来,看看如何弯曲本质规律以适应现实。

好比我们随意画圆的时候画出的圆很容易是不理想的,但只要我们知道了圆的理想方程,我们就总可以画出尽可能完美的圆。

带边界和约束的方法论示例

下面说个例子来看看这种带边界和约束的方法论可以是什么样子。一般来讲做软件的时候我们总会谈到自顶向下与自底向上,前一个在设计上还有个专有名词叫:Big Up Design Front。理想中的瀑布模型是比较纯粹的自顶向下,而迭代则是自底向上多些。

从开发模型的角度看,它们看着是对立的,但如果你把开发模型看成是最佳组合人与事的方式时,这种对立就会消失。

瀑布模型下,把软件构建的活动分解为:需求、设计、编码、单元测试、集成测试、系统测试等环节,并期望逐步推进。这一开发模型似乎从诞生那一天起,就开始饱受批评,比如被指摘不能很好的应对需求变化等。但这一模型根基是工作分解间的时序和因果关系,其本身并无错处。

其成立前提和适应场景是:

有人能够预先了解要开发产品的各种细节成员能力差异明显,构成明显的金字塔结构(少量极其优秀的人和较多能力较弱的人)

简单来讲就是在“想的人”对问题域非常清楚的情况下,比较彻底的分离想和做,最终“做的人”不用想。

虽然敏捷类思想不太考察这个维度,但事实上当组内一个人极度优秀,而其他人员平均水平比较差的时候,从项目的角度看,比较适合偏向瀑布,而不太适合导入敏捷类的迭代。

这个时候使用瀑布,可以获得更佳的生产率—当然你不能走极端,把瀑布绝对化。

但同样是使用瀑布模型如果上面的条件不具备,就会导致灾难:

没有合适的人确定需求,大部分勉强决定的规格可能完全没有意义。设计如果只是纸上谈兵,编码的人又无法修改,那么就会发生无休止的讨论,加剧内耗。

也就是说,假如说团队中的成员A,在经过一定的思考后可以预见到当前的实现方法会导致性能问题,那么就比较适合预先把应对措施定义下来(即使是Big Up Design Front),而不能等迭代出问题再进行解决,后者的内耗明显是高的。

从上面的例子里我们可以得到两个彼此关联的结论:

人和项目特征决定了开发模型,而非反过来需要根据开发模型来调整人员配置等。这是因为在特定时空背景下,调整人和项目特征的可能性小。假如人和项目的变化是连续的,那么无疑的绝对的瀑布和迭代之间程度的变化也是连续的。作为结果,大多时候最优的开发模型必然既不是绝对的瀑布,也不是绝对的迭代,而是一种具体情境下的选择,可能偏向于瀑布,也可能偏向于迭代。

开发模型的价值就在于,如果我们能够在连续中找到这一最佳平衡点,在这一点上内耗最低。

这种对方法论的描述无疑是与许多教科书上相差很大的,但我比较相信这才是一种正确的方式。

9名高层被集体免职 中国手游股价暴跌22%

6月20日消息,受中国手游9名高层被集体免职消息影响,中国手游股价下跌4.26美元,跌幅达22.57%。

6月19日,中国手游对外确认9名高层被免职,为集团总裁应书岭、副总裁孙晶芝、副总裁杜鑫欣、晨星游戏总经理闵曙中、卓星游戏总经理王昆、发行支撑中心总经理杜娟、海外发行事业副总杨斌、平台支撑事业群副总罗潇、采购总监但成海。

中国手游未公布人事调整原因,公关部回应称是正常人事调整。

此外,北京时间周四美股收盘时,中概股普跌,其中久邦数码跌幅为7.13%,当当跌幅为6.22%,猎豹移动跌幅为5.81%,微博跌幅为5.23%。