1.3 Fourinone的产生背景

1.使用Hadoop时碰到的问题

笔者最开始尝试大数据并行计算分析是为了解决淘宝网的秒杀作弊问题。秒杀曾经是最成功的电商促销活动,往往在短时间内造成平时很多倍的销量,当然这也给系统造成很大的压力,但是这些都不是问题,关键是出现了像蟑螂一样的东西,怎么都灭不掉,那就是秒杀器。

当市场上不断出现秒杀器后,想用手工秒杀商品越来越难了,秒杀活动几乎全部被秒杀器软件垄断。于是买家开始大量抱怨不想参加秒杀了,卖家也不想发货给使用秒杀器作弊的人,甚至社会上流言淘宝网搞虚假秒杀,严重扰乱了市场秩序。

虽然技术人员也尝试屏蔽秒杀器作弊,但是一直收效甚微,比如尝试把验证码设计得很复杂,比如多加一些验证参数。写过秒杀器软件的人都明白,这样的防范把自己折磨得很辛苦,但是对秒杀器是不起作用的,因为秒杀器实际上是一个复杂的模拟HTTP交互的网络通信软件,它反复跟网站服务器交互HTTP报文,如果发现报文参数不够,会不断变更报文直到通过,因此只要秒杀器写得足够好,理论上就无法屏蔽它。

因此,唯一的办法是要深入分析HTTP报文本身的差异性。秒杀器和浏览器制造的报文是有区别的,这个区别或者大或者小,都是可以通过技术手段区分出来的,这是一个识别模型。由于每日大型、小型秒杀的订单数量太大,为了在短时间内识别出每个订单报文是否作弊,我们考虑用并行计算多机完成,为了完成这个技术任务,我们首先想到了用Hadoop。

按照Hadoop Map/Reduce框架的开发步骤,我们要实现Map和Reduce接口,取出每行,执行一段逻辑,打包好,启动jobtracker……我们学会了按照这个步骤开发后,尝试套用Map/Reduce框架会发现一些的问题,比如:

1)HTTP协议报文一个请求占多行,各行之前有一定逻辑关系,不能简单以行拆分和合并。

2)复杂的中间过程的计算套用Map/Reduce不容易构思,如大数据的组合或者迭代,多机计算并不只有拆分合并的需求(请参考2.1.11节)。

3)Hadoop实现得太复杂,API枯燥难懂,不利于程序员迅速上手并驾驭。

4)Map/Reduce容易将逻辑思维框住,业务逻辑不连贯,容易让程序员在使用过程中总是花大量时间去搞懂框架本身的实现。

5)在一台机器上未能很直接看出并行计算优势。

6)比较难直观设计每台计算机干哪些事情,每台计算机部署哪些程序,只能按照开发步骤学习,按照提供方式运行。

7)没有一个简单易用的Windows版,需要模仿Linux环境,安装配置复杂。

2.抽取一个简化的并行计算框架

我们从秒杀作弊分析延伸出了想法,提取和归纳了分布式核心技术,建立了一个简化的并行计算框架用于业务场景需要。我们的思路有以下几点:

1)对并行计算Map/Reduce和forkjoin等思想进行对比和研究。

2)侧重于小型灵活的、对业务逻辑进行并行编程的框架,基于该框架可以简单迅速建立并行的处理方式,较大程度提高计算效率。可以在本地使用,也可以在多机使用,使用公共内存和脚本语言配置,能嵌入式使用。

3)可以并行高效进行大数据和逻辑复杂的运算,并对外提供调用服务,所有的业务逻辑由业务开发方提供,未来并行计算平台上可以高效支持秒杀器作弊分析、炒信软件分析、评价数据分析、账务结算系统等业务逻辑运算。

4)可以试图做得更通用化,满足大部分并行计算需求。

下一章我们顺着这个思路深入解析并行计算模式的设计过程。