转发:SAP HANA神话(3):心黑胆肥的SAP

花开两枝,讲完黯然神伤的Michael和他可怜的卖不掉的H-store,我们来看看SAP的葫芦里卖的什么药。以事后诸葛亮的态度来说,SAP演出了一场大戏,从研发到宣传到销售到并购,很多东西是不是精心策划我无从判断,然而起码从结果上来说,可谓心够黑胆够肥。

HANA是High Performance Analytic Appliance的简称,它作为一个新型的数据库,有着一些其他数据库所不具备的特点和创新性,我们先了解一下这些主要的创新性:
首先,HANA是第一个支持ACID的transaction 语义的column-store。这应该是一个非常了不起的成就。虽然说实际上实现起来并非极其困难,但是对transaction的协议的改动还是很多的。当然这也是Michael很不喜欢HANA最根本的原因,捞过界了。
其次, HANA做了一个在09年看来非常大胆的决定。就是这个产品以堆高大上硬件的方式,把几乎所有的数据都放在内存里。想想看内存的速度和硬盘能是一个量级的么?所以这使得SAP精心准备的例子显得非常的牛。一个在Oracle或者DB2上需要一天才能完成的报表,换上HANA之后只需要3秒钟。对,亮瞎狗眼,只需要3秒钟。当然,对不起,您得升级硬件,买很多很多很多的内存,最好还要很多很多很多的core。
再次,HANA推荐在同一个系统上同时处理OLTP的业务和OLAP的业务,这完全避免了传统BI的ETL(extract, transform ,load)的过程,使得分析变得非常的实时。数据非常的fresh。
再次,HANA几乎完整的整合了R的功能,并且把SAP业务相关的很多功能直接在HANA内部实现了。这有点反计算机软件构架里面的封装。然而在内存数据库的环境下让数据离业务相关计算更近无疑是一种效率上极其有效的策略。
最后,现在的HANA是一个shared nothing的体系架构。数据被partition,每台只负责自己的部分。这让HANA同时也具备了比较灵活的资源配置和高效的资源利用。当然其实这个体系结构也有弊端,如果查询的key并不是partition key或者对partition key 有functional dependency的话,那查询需要并行读所有的数据。未必会慢但是很耗CPU资源。这个做法其实和很多key-value store的做法很像。而传统数据库一般是shared-everything的体系结构。在大数据面前,无疑是一个更为落伍的处理方式。

然而心黑和胆肥其实体现在SAP怎么样去运作和商业化HANA。 HANA2010年的时候挑了几个高富帅企业做内测,然后在2011年前后开始针对大型有钱的主推开。HANA的硬件是需要通过认证的,内存从64GB起,在10年的时候这样的机器几万美元是至少的。而HANA的软件则卖到了30万美元起的价格了.

从2011年到2014年,HANA一贯以来都实行非常高的价位,基本上就是只有土豪才能买得起的。市面上对HANA的抱怨基本上都被这蛋疼的价格所吸引了,然而正是因为价格高,用户不多,HANA不但获得了源源不断的钱,更是获得了非常重要的形象问题:高大上。不但如此,这几年的限制还给了HANA宝贵的时间去真正提高产品。土豪用产品有一个特点,HANA怎么宣传怎么用,比较傻白甜,所以很多HANA的缺点暴露的机会其实不多。

HANA的大胆还体现在HANA的宣传上。比如说面对老对手Oracle,SAP说,你们代表着过去,HANA才是新时代新硬件新体系下面的东西,我们是未来。这招对土豪们尤其管用。土豪不差钱,中国石油差钱还是民航差钱,要的就是最新最贵最牛13的东西。于是一圈圈的土豪都从Oracle上面转到HANA上,虽然HANA其实并没有ready。这些土豪里面,中国的土豪在最初的一段时间内贡献了大部分的比例,果然是敢为天下先的为SAP添砖加瓦的土豪们。当然随着产品的成熟,日本和欧美的大企业也越来越多的进到HANA的高端客户里来。

应该说,这是这么多年来第一次有人对Oracle的基本盘造成了动摇。这之前不管是DB2还是SQL Server,无非跟在后面跟屁虫一样的吃点残羹冷炙,算不得威胁。三板斧干死Oracle, 真的很牛。想来Oracle商业上这么牛的公司,居然也有瞎眼的时候。从实际行动上来看,Oracle一系列的发布从Timesten,Exalytica,Exadata,到Oracle 12c In-Memory Option,简直是亦步亦趋的证明了自己就是一个追随者,而SAP才是内存数据库的开拓者。所以土豪们更懒得去理那个亦步亦趋的Oracle了。Oracle是自己把自己作成了一个追逐者,其实在2011年的时候如果Oracle够冷静,还是可以发现HANA只是个不成熟的玩具的,就不至于匆忙因对了。我想这种商业上的成功在企业级市场是非常罕见的。

HANA的另外一个牛13的地方就是敢吹,每次都是新功能新特性先做一个半成品,就开release出去,在客户文档里面大肆吹多牛多牛,实际上bug一堆,然而因为我下面要讲到的一点,这并没有成为它的阻碍。举个例子,HANA在2011年的时候连high availability都还不具备,居然就开吹HANA怎么样通过一个cluster的机器来解决failure的问题。拜托,胆肥成这样不容易啊。

然而仅仅靠这些还是不够的,HANA的另外一个很牛的地方是疯狂开发疯狂release,在SAP推出市场以后,基本上做到了半个月到一个月一个release,每次release老的半成品的bug被小白鼠反馈回来修得差不多了,新版本又增加了一些半成品。4年下来80多个release。更夸张的是,每个版本的release的功能相差还是挺大的,半年后和半年前是两个样。我们都是软件开发的,只能说这说明2010年卖给土豪的版本,连个毛胚都算不上啊。30万美元买个毛胚大家怎么想?人傻钱多?奇怪的是用户还很吃这一套。做了小白鼠,架不住人家修的快啊。

HANA的另外一个牛的地方在于,SAP把这个作为公司战略高度的产品来推广。销售卖的业绩要看HANA卖了多少。各个产品组的新feature必须先支持HANA。总之是从宣传到销售到市场到研发一切以支持HANA为最高优先级。这种全力以赴的状态,在一个业已成熟的企业级软件公司,无疑是一场豪赌。

当然SAP知道自己很跛脚。SAP的传统数据库相关的积累太过薄弱,所以三板斧使唤完的时候就没救了。SAP另外一件偷偷摸摸做的事情是收购一个数据库厂商。其实当时市面上最好的选择大家都知道Sybase。这个曾经的第三大数据库厂商,因为决策失误的问题,90年代末卖了一份源代码给微软,做NT系统下的数据库,这后来就成了赫赫有名的SQL Server。买了源代码的人迅速超越成了第三,最近又成了第二。这个被迫成为第四的厂商越发难以为继。而SAP则偷偷的瞄准了它,给买了。我想这绝对是Oracle失算的地方。

获得了Sybase的加持以后,SAP HANA的体系立刻变得完整起来。举个例子,以前是全部内存的。但是总有人没钱不是土豪,买不起太高端的,怎么办. HANA后期的完整解决方案里面就有cold data存磁盘的办法,当然用的是Sybase那买的技术。另外一个特别重要的是实时备份技术,这在任何商用数据库里都很成熟但是HANA是一直裸奔的。买了Sybase,就迅速的集成了Sybase Replication Server。让SAP偷偷的买成了Sybase,绝对是一盘大棋里关键又险恶的一步,成功了,一下子就获得了Sybase仁波切的加持,各种各样缺少的东西都有现成的,失败了,迟早HANA的各种缺陷都会暴露出来。

等Sybase到手,关键技术integrate起来,2015年的HANA已经是一个各方面非常领先的内存数据库解决方案,即便如Oracle也已经无法有任何的实力可以撼动了。而且对不起,以前实施SAP总要搭个Oracle卖,现在通通的都变成HANA,想想,SAP要赚多少钱,Oracle要损失多少亿。这个时候HANA终于开始廉价倾销,各种选择都可以了。而树已大,风吹不动了。心黑胆肥的SAP不但树立起内存数据库的正统,更名正言顺的开始倾销其业已成熟的产品。够Oracle好好喝几壶的了。