Introduction Of Stream Processing
09 Sep 2014流数据处理系统简介
20140908
一、典型应用
流数据处理的一些典型应用包括:在线广告投放,实时推荐系统,入侵检测,系统状态监控(包括网站负载状况,集群使用情况等),金融市场分析等。
流数据处理应用的特点是,能够对高速到达的输入数据做出及时的反应。例如,某个用户在浏览淘宝网时,每一次点击都会形成一条记录,这条记录包含用户ID,URL,产品ID等一些信息。淘宝就可以根据这样的记录与其他的一信息(例如,该用户的历史购买记录),判断该用户当前的购买需求,购买偏好,购买能力等,并以此向该用户推荐其相应的产品。而推荐结果需要实时得出并推送给该用户。
1.应用由单机向集群扩展
应用的规模已经远远超出了普通的单台机器的处理能力。
- 在twitter,storm集群包含数百台机器,每天产生数十亿条结果。也就是每秒钟产生数万条的结果。
- 淘宝每天最多要处理15亿条日志记录。
- 。。。
应对应用规模增长的方式有两种:
- 增强单机的处理能力:symmetric multiprocessor system (SMP)
- 使用多台机器执行应用:分布式集群
目前,SMP可以达到一台机器中包含数百个核。但是存在在问题是,SMP对处理能力的提升空间是有限的,因此它并不能从根本上解决应用规模增长的问题,而且SMP很贵,其价格并不是随着其处理能力的增长而线性增长的,最后,使用SMP需要相应的高性能配套设备,例如,网卡,交换机,网线等,而这些设备也很贵。
因此,目前一般都是使用的分布式集群解决应用规模大的问题。
2.分布式系统的两个基本问题
在分布式文件系统中为了能够最大的发挥出系统资源的能力以及能够正常的运行应用,就需要考虑两个问题,应用的可扩展性和可用性。
(1)可扩展性
可扩展性是指,系统计算能力的增长和资源数量的增长呈线性关系。
在某些采用中心化架构的系统中,系统得可扩展性将受到中心节点处理能力的限制。在这种情况下,当中心节点成为整个系统的性能瓶颈时,仅仅增加系统资源,是不能够提升整个系统的性能的。
(2)可用性
在集群规模很大时,集群中节点失效将变成一件很普通的事情,因此,需要尽可能的减少节点失效对应用正常运行的影响。即提高应用的可用性。
二、基础工具
开发分布式应用具有很高的复杂度,因为应用需要根据底层的节点分布信息,确定计算应该如何分布在集群中的节点上,不同节点上的计算任务如何通信,节点失效后如何恢复等各种复杂的问题。而这些问题其实是和应用的逻辑不相关的。因此,可以将这些分布式应用所共同需要的服务抽象出来,以向应用屏蔽底层的节点分布信息。通过使用这些抽象出来的服务,可极大地简化应用开发。
在流数据处理应用中,主要用到了,集群资源分配,消息传递和流数据处理框架这三种抽象服务。
1.资源分配
当一个集群中运行多个应用时,每个应用占用集群中的一个或多个节点。这种情况下,资源分配程序掌控所有的集群资源,并按照预先定义的分配规则和每个应用对资源的需求将集群中的资源自动分配给不同应用。
对于应用来说,只需要在运行时按照自己的需求向资源分配程序申请资源就可以了,这个过程是自动执行的,不需要应用的开发者或维护者根据底层节点的分布式信息对此进行干预。
2.消息传递
每个应用中不同任务之间需要进行消息传递,但是当集群规模比较大时,传输消息将会变得很复杂,原因主要包括:
- 不同集群中使用的网络设备和网络协议可能是不一样的,例如,以太网,IB等。而在应用开发时并不知道应用运行在什么类型的网络之上。
- 参与消息传输两端节点的对消息的处理能力有可能不匹配。
- 其中一个或者多个节点可能在通信过程中突然失效。
- 在穿过网络后,消息到达的顺序可能会与其发出的顺序不同。
- 消息的发送和接收端可能又不同团队开发,因此数据格式可能不统一。
- 消息被且仅被传输一次难以保障。
- 消息有可能需要被多次使用。
因此,通过抽象出一个消息队列服务,应用中,消息的发送方只需要将消息放入消息队列中,就可以认为消息已经被有效的传输出去,而消息的接收方只需要从消息队列中将消息读取出来就可以了。
3.流数据处理框架
流数据处理框架在资源分配和消息传递的基础想流数据处理应用提供以下服务:
- 计算任务在集群中的分布管理。
- 计算任务失效后的恢复,即,应用的可用性。
- 消息处理的可靠性保证(至少被处理一次,最多被处理一次,被且仅被处理一次)。
- 计算任务动态在集群节点间动态调度等。
对流数据处理应用来说,仅仅需要实现应用中每个计算任务的业务逻辑,配置计算任务之间消息传递关系,以及每个计算任务的并行度等参数就足够了,实际运行应用所需要做的其他工作都由流数据处理框架承担。
三、与云计算的结合
云计算是指通过网络使用云计算服务提供商维护的计算存储等资源,而不是使用本地建立的集群,或者个人电脑。
云计算有多种形式:
- Infrastructure As A Service :提供虚拟主机,块存储,网络。
- Platform As A Service :提供消息队列,数据库,对象存储等。
- Software As A Service :提供应用软件的使用,例如,邮件,文字处理,金融应用等。
1.云计算的特性
云计算最大的特点是具有弹性,即,用户可以根据自己的需要动态决定需要使用资源的数量。就像用水用电一样,你可以决定是否开灯,开空调,开电视,电力公司根据使用的电量来收取费用。在云计算中,云计算服务提供商根据用户使用虚拟主机的个数,存储数据占用的空间等收取费用。
2.向云环境迁移
流数据处理向云环境迁移有两种形式:使用IaaS或者成为一种云服务(PaaS)。
(1)使用IaaS
这种方式是租用多台IaaS中提供的虚拟主机,形成集群,并在这个集群之上搭建流数据处理框架。应用使用部署在云上的流数据处理框架实现流数据的实时处理。
这种方式需要解决的问题是,由于在云环境中,系统资源可以动态申请和释放,因此,集群的规模可以随着负载压力变化而变化,这就要求流数据处理框架能够根据负载变化,动态分割和并计算任务。
(2)成为一种云服务(PaaS)
待讨论。
四、相关资料
消息队列:Kafka