《实时流计算系统设计与实现》-Part 1-笔记

实时流计算

挑战

大数据的5V:Volume(大量)​、Velocity(快速)​、Variety(多样)​、Veracity(真实)和Value(价值)​。

使用场景

在线系统监控
移动数据和物联网
金融风控
实时推荐

实时流数据的特点

实时性、随机性、无序性和无限性(与批数据最大的区别)。

批处理是在固定数据集上进行不同的查询,流处理是在无限数据集上进行固定的查询。

系统架构

在这里插入图片描述

数据传输,选择消息中间件,考虑因素:

  • 吞吐量:消息中间件每秒能够处理的消息数。消息中间件自身的吞吐量决定了实时流计算系统吞吐量的上限;
  • 延迟:消息从发送端到消费端所消耗的时间。如同吞吐量一样,消息中间件自身的延迟决定了实时流计算系统延迟的下限。选择消息中间件时,需确定消息中间件本身延迟对业务没有明显限制;
  • 高可用:消息中间件的一个或多个节点发生故障时,仍然能够持续提供正常服务。高可用消息中间件必须支持在转移故障并恢复服务后,客户端能自动重新连接并使用服务。千万不能让客户端进入僵死状态,否则即便消息中间件依然在提供服务,而上层的业务服务已然停止;
  • 持久化:消息中间件中的消息写入日志或文件,在重启后消息不丢失。大部分业务场景下,支持持久化是一个可靠线上系统的必要条件。数据持久化从高可用角度看,还需要提供支持数据多副本存储功能。当一部分副本数据所在节点出现故障,或这部分副本数据本身被破坏时,可以通过剩余部分的副本数据恢复出来;
  • 水平扩展:消息中间件的处理能力能够通过增加节点来提升。当业务量逐渐增加时,原先的消息中间件处理能力逐渐跟不上,这时需要增加新节点以提升消息中间件的处理能力。Kafka可以通过增加Kafka节点和topic分区数的方式水平扩展处理能力。

数据处理,核心,目标可分为4类:

  • 数据转化:包括数据抽取、清洗、转换和加载,如常见的流式函数filter和map,分别用于完成数据抽取和转化的操作;
  • 指标统计:在流数据上统计各种指标,如计数、求和、均值、标准差、极值、聚合、关联、直方图等;
  • 模式匹配:在流数据上寻找预先设定的事件序列模式,我们常说的CEP(复杂事件处理)就属于模式匹配;
  • 模型学习和预测:数据挖掘和机器学习在流数据上的扩展应用,基于流的模型学习算法可以实时动态地训练或更新模型参数,进而根据模型做出预测,更加准确地描述数据背后当时正在发生的事情。

通常使用DAG(Directed Acyclic Graph,有向无环图)来描述流计算过程。常见的开源流处理框架有Storm、Spark、Flink、Samza和Akka Streams等。

数据存储

数据展示,We.UI

数据采集

设计接口

风险总体上可分成两类:

  • 贷款对象信用风险:关注的是贷款对象自身的信用状况、还款意愿和还款能力。信用风险评估常用的分析因素有四要素认证和征信报告,使用的风控模型主要是可解释性强的逻辑回归评分卡;
  • 贷款对象欺诈风险:关注的是贷款对象是否在骗贷。分析因素:网络(如IP是否集中)​,用户属性(如年龄和职业)​,用户行为(如是否在某个时间段集中贷款)​,社会信用(如社保缴纳情况)​,第三方征信(如芝麻信用得分)​,还有各种渠道而来的黑名单。使用的模型:决策树、聚类分析等。

互联网金融风控的一般流程:
在这里插入图片描述
解读:用户在客户端发出注册、贷款申请等事件时,客户端将用户属性、行为、生物识别、终端设备信息、网络状况、TCP/IP协议栈等信息发送到数据采集服务器;服务器收到数据后,进行字段提取和转化,发送给特征提取模块;特征提取模块按照预先设定的特征清单进行特征提取,然后以提取出来的特征清单作为模型或规则系统的输入;最终依据模型或规则系统的评估结果做出决策。

Spring Boot

置空。

BIO与NIO

在请求连接数比较小、请求处理逻辑比较简单、工作线程请求处理时延很短的场景下,使用BIO连接器是很合适的。

BIO连接器的本质缺陷是接收器和工作线程执行步调耦合太紧。

当前大多数操作系统在处理上万个甚至只需几千个线程时,性能就会明显下降。

在这里插入图片描述
Tomcat的NIO连接器还引入选择器(包含在轮询器中)来更加精细地管理连接套接字,选择器只有在连接套接字中的数据处于可读(Read Ready)状态时,才将其交由工作线程来处理,避免工作线程等待连接套接字准备数据的过程。

NIO连接器的两点改进:

  • 接收器和工作线程隔离,彼此不影响,更充分利用资源;
  • 队列缓存待处理的连接套接字,NIO连接器能保持的并发连接数不再受限于工作线程数,而只受限于系统设置上限(由LimitLatch指定)​。

NIO和异步

任务类型

大致可分为:

  • CPU密集型任务:CPU受限型任务,处理过程中主要依靠CPU运算来完成的任务;
  • I/O密集型任务:在处理过程中有很多I/O操作的任务,其执行速度会受限于I/O的吞吐能力;
  • I/O和CPU都密集型任务

纤程

fiber,也叫协程(coroutine),​一种用户态线程,其调度逻辑在用户态实现,从而避免过多地进出内核态进行进程调度和上下文切换

在这里插入图片描述

Actor

NIO配合异步编程

Netty

Netty工作原理如下图
在这里插入图片描述
解读:Netty用reactor线程监听ServerSocketChannel,简称SSC,每个SSC对应一个实际的端口。当reactor线程监听的SSC监测到连接请求事件(OP_ACCEPT)时,就为接收到的连接套接字建立一个SocketChannel,并将该SocketChannel委托给工作线程池中的某个工作线程做后续处理。之后,当工作线程监测到SocketChannel上有数据可读(OP_READ)时,就调用相关的回调句柄(handler)对数据进行读取和处理,并返回最终的处理结果。通常将reactor线程池称为BossGroup,而将工作线程池称为WorkGroup。

@AllArgsConstructor
private static class RefController {
   
	private final ChannelHandlerContext ctx;
	private final HttpRequest req;
	
	public void retain() {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值