
186
|
第
11
章
如果事件流的定义里没有提到事件所包含的数据和每秒钟的事件数量,那么它就变得毫无
意义。不同系统之间的数据是不一样的,事件可以很小(有时候只有几个字节),也可以
很大(包含很多消息头的
XML
消息),它们可以是完全非结构化的键值对,可以是半结构
化的
JSON
,也可以是结构化的
Avro
或
Protobuf
。虽然数据流经常被视为“大数据”,并
且包含了每秒钟数百万的事件,不过这里所讨论的技术同样适用(通常是更加适用)于小
一点的事件流,可能每秒钟甚至每分钟只有几个事件。
知道什么是事件流以后,是时候了解“流式处理”的真正含义了。流式处理是指实时地处
理一个或多个事件流。流式处理是一种编程范式,就像请求与响应范式和批处理范式那
样。下面将对这
3
种范式进行比较,以便更好地理解如何在软件架构中应用流式处理。
请求与响应
这是延迟最小的一种范式,响应时间处于亚毫秒到毫秒之间,而且响应时间一般非常稳
定。这种处理模式一般是阻塞的,应用程序向处理系统发出请求,然后等待响应。在数
据库领域,这种范式就是
线上交易处理
(
OLTP
)。销售点(
POS
)系统、信用卡处理系
统和基于时间的追踪系统一般都使用这种范式。
批处理
这种范式具有高延迟和高吞吐量的特点。处理系统按照设定的时间启动处理进程,比如
每天的下午两点开始启动,每小时启动一次等。它读取所有的输入数据(从上一次执行
之后的所有可用数据,或者从月初开始的所有数据等),输出结果,然后等待下一次启
动。处理时间从几分钟到几小时不等,并且用户从结果里读到的都是旧数据。在数据库 ...