直观:揭秘|每秒千万级的实时数据处理是怎么实现的?
优采云 发布时间: 2022-10-16 12:10直观:揭秘|每秒千万级的实时数据处理是怎么实现的?
0 1
目前,闲鱼的实际生产部署环境越来越复杂,对各种服务的横向依赖交织在一起,对运行环境的纵向依赖也越来越复杂。当服务出现问题时,能否在海量数据中及时定位问题根源,成为考验闲鱼服务能力的严峻挑战。
当网上出现问题时,往往需要十多分钟甚至更长时间才能找到问题的原因。因此,需要一种能够快速进行自动诊断的系统。快速诊断的基础是高性能的实时数据处理系统。这个实时数据处理系统需要具备以下能力:
1.实时数据采集,实时分析,计算复杂,分析结果持久化。
2、可以处理多种数据。收录应用日志、主机性能监控指标和调用链接图。
3、可靠性高。系统没有问题,数据不会丢失。
4. 高性能,底部延迟。数据处理时延不超过3秒,支持每秒千万级数据处理。
本文不涉及自动问题诊断的具体分析模型,只讨论整体实时数据处理环节的设计。
02
输入输出定义
为了便于理解系统的运行,我们将系统的整体输入输出定义如下:
进入:
服务请求日志(包括traceid、timestamp、client ip、server ip、耗时、返回码、服务名、方法名)
环境监测数据(指标名称、IP、时间戳和指标值)。比如cpu、jvm gc次数、jvm gc耗时、数据库指标。
输出:
某服务在一段时间内发生错误的根本原因,每个服务的错误分析结果用有向无环图表示。(根节点是被分析的错误节点,叶子节点是错误根因节点,叶子节点可能是外部依赖的服务错误或者jvm异常等)。
03
架构设计
在实际系统运行过程中,日志数据和监控数据会随着时间的推移不断产生。每条生成的数据都有自己的时间戳。实时流式传输这些带时间戳的数据就像流过不同管道的水一样。
如果将源源不断的实时数据比作自来水,数据处理过程类似于自来水生产的过程:
自然,我们也将实时数据的处理分解为几个阶段:采集、传输、预处理、计算、存储。
整体系统架构设计如下:
采集
使用阿里巴巴自研的sls日志服务产品(包括logtail+loghub组件),logtail是一个采集客户端。之所以选择logtail,是因为它性能卓越,可靠性高,插件扩展机制灵活。闲鱼您可以定制自己的采集插件,实现各种数据的实时采集。
传播
loghub 可以理解为一个数据发布和订阅组件,功能类似于 kafka。作为数据传输通道,更加稳定和安全。详细对比文章参考:
预处理
实时数据预处理部分使用blink流计算处理组件(开源版本称为flink,blink是阿里巴巴内部基于flink的增强版)。目前常用的实时流计算开源产品有Jstorm、SparkStream、Flink。由于Jstorm没有中间计算状态,计算过程中需要的中间结果必须依赖外部存储,会导致频繁的io影响其性能;SparkStream本质上是用小批量来模拟实时计算,其实还是有一定延迟的;Flink 以其出色的状态管理机制保证了其计算的性能和实时性,并提供了完整的 SQL 表达式,使得流计算更容易。
计算和持久性
数据经过预处理后,最终生成调用链路聚合日志和主机监控数据。主机监控数据会独立存储在tsdb时序数据库中,供后续统计分析。由于对时间指标数据的特殊存储结构设计,tsdb非常适合时间序列数据的存储和查询。调用链接日志聚合数据,提供给cep/graph服务进行诊断模型分析。cep/graph service是闲鱼开发的一款应用,实现模型分析、复杂数据处理以及与外部服务的交互,借助rdb实现图数据的实时聚合。
最后将cep/graph服务分析的结果作为图数据,在lindorm中提供实时转储供在线查询。Lindorm 可以看作是 hbase 的增强版本,它充当系统中的持久存储。
04
详细设计和性能优化
采集
日志和指标数据采集使用logtail,整个数据采集流程如图:
它提供了非常灵活的插件机制,有四种类型的插件:
由于指标数据(如cpu、内存、jvm指标)的获取需要调用本机上的服务接口,所以应该尽量减少请求的数量。在 logtail 中,一个输入占用一个 goroutine。闲鱼通过自定义输入插件和处理器插件,通过服务请求(指标获取接口由基础监控团队提供)在一个输入插件中获取多个指标数据(如cpu、内存、jvm指标),并将其格式化为一个 json 数组对象在处理器插件中被拆分为多条数据,以减少系统中 io 的数量并提高性能。
传播
LogHub用于数据传输,logtail写入数据后,blink直接消费数据。您只需要设置合理数量的分区。分区数必须大于等于并发blink读任务数,避免blink任务空闲。
预处理
预处理主要通过blink实现。主要设计和优化点有:
编写高效的计算管道
Blink 是一个有状态的流计算框架,非常适合实时聚合、join等操作。
在我们的应用中,我们只需要注意对有错误请求的相关服务链接的调用,所以整个日志处理流程分为两个流程:
1.服务的请求入口日志作为单独的流处理,过滤掉请求错误的数据。
2. 其他中间环节的调用日志作为另一个独立的流处理。通过上面的流加入traceid,实现了错误服务所依赖的请求数据的插入。
如上图双流join后,输出的是与请求错误相关的所有链接的完整数据。
设置合理的状态生命周期
Blink做join的时候,本质上是通过state缓存中间数据状态,然后再匹配数据。如果状态的生命周期过长,会造成数据膨胀,影响性能。如果状态的生命周期太短,将无法正确关联一些延迟的数据。因此,需要合理配置状态生命周期,并为应用程序允许最大的数据延迟。1 分钟。
启用 MicroBatch/MiniBatch
MicroBatch 和 MiniBatch 都是微批处理,但微批处理的触发机制略有不同。原则上,在触发处理之前缓存一定量的数据,以减少对状态的访问,从而显着提高吞吐量,减少输出数据量。
动态负载使用 Dynamic-Debalance 代替 Debalance
Blink 任务最忌讳的就是计算热点的存在。为了保证数据的均匀分布,可以使用Dynamic Rebalance,根据每个子分区中累积的buffer个数,选择负载较轻的子分区进行写入,从而实现动态负载均衡。. 与静态再平衡策略相比,当下游任务的计算能力不均衡时,可以更加均衡各个任务的相对负载,从而提升整个作业的性能。
自定义输出插件
数据关联后,统一请求链路上的数据需要以数据包的形式通知给下游图分析节点。传统的方式是通过消息服务传递数据。但是通过消息传递服务有两个缺点:
1.与rdb等内存数据库相比,它的吞吐量还是有很大差距(大约一个数量级)。
2.在接收端,需要根据traceid进行数据关联。
我们通过自定义插件异步向RDB写入数据,同时设置数据过期时间。在 RDB 中
数据结构存储。编写时只使用traceid作为消息内容,通过metaQ通知下游计算服务,大大降低了metaQ的数据传输压力。
图聚合计算
cep/graph计算服务节点收到metaQ的通知后,会根据请求的链路数据和依赖的环境监测数据,实时生成诊断结果。诊断结果简化为以下形式:
意思是这个请求是下游jvm线程池满造成的,但是一个调用并没有说明服务不可用的根本原因。如果需要分析整体错误情况,则需要实时汇总图数据。
聚合设计如下(为了说明基本思想而进行了简化):
1、首先利用redis的zrank能力,根据服务名或者ip信息,给每个节点分配一个全局唯一的排序序号。
2.为图中的每个节点生成对应的图节点代码。代码格式如下:
- 对于头节点:头节点序号 | 舍入时间戳 | 节点代码
- 对于普通节点:| 圆形时间戳 | 节点编码
3、由于每个节点在一个时间段内都有唯一的key,所以可以使用节点代码作为key来统计每个节点使用redis。同时消除了并发读写的问题。
4.在redis中使用set集合可以很方便的叠加图的边。
5.记录根节点,可以通过遍历恢复聚合图结构。
汇总结果大致如下:
这最终产生了服务不可用的整体原因,而根本原因可以通过叶子节点的数量来排序。
05
系统上线后,整个实时处理数据链路延迟不超过3秒。定位闲鱼服务器问题的时间从十多分钟甚至更长的时间缩短到了五秒以内。这大大提高了问题定位的效率。
06
目前的系统可以支持闲鱼每秒千万级的数据处理能力。自动定位问题的后续服务可能会扩展到阿里巴巴内部更多的业务场景,数据量将呈指数级增长,因此对效率和成本提出了更好的要求。
我们未来可能会做出的改进:
1.可自动减少或压缩处理后的数据。
2.复杂的模型分析计算也可以在blink中完成,减少io,提高性能。
3.支持多租户数据隔离。
具体分析:影响seo关键词排名上升降低的3个因素
当SEO关键词排名优化时,许多行为会影响关键词排名的上升和下降,其中一些影响更大。今天,SEO知识网将介绍影响SEO关键词排名上升和下降的3个因素。
一、网站的结构
网站结构清晰,用户体验高。树形,轮胎结构漏气,蜘蛛抓地力更平稳,水平不会太深,网站sEO关键词排名有很大的影响。
二、网站更新的频率
网站长时间不更新会导致SEO关键词排名网站下降。相反,网站文章稳定更新,网站关键词排名将稳步上升。当然,这是在百度稳定性的情况下,并没有触及算法。
三、网站tdk设置
网站tdk设置应该能够吸引用户点击,相关性高,关键词布局合理,符合用户的需求,新颖,使设置更容易被搜索引擎蜘蛛抓取,更容易获得更好的展示机会。
以上就是“影响SEO关键词排名上升和下降的3个因素”的介绍,希望对大家有所帮助。如果您还想了解更多关于SEO优化的知识,您可以关注和采集我们的SEO知识网络,SEO知识网络将不时更新网站建设,SEO优化,网站优化方案,SEO工具,SEO外包,网络推广等方面的知识供您参考和理解。
期待您的光临