高并发系统实战课
徐长龙
前微博架构师、极客时间架构师
11663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 30 讲
结束语&结课测试 (2讲)
高并发系统实战课
15
15
1.0x
00:00/00:00
登录|注册

13 | 实时统计:链路跟踪实时计算中的实用算法

根据数据特征过滤网址内参数
Trier Tree保存URL替换配置列表
GEO hash实现地图分块分区统计
Redis的hyperLogLog对大量数据做大致计数
Bloom Filter减少扫描次数
Trace ID跳转到Trace过程渲染页面
错误发生时间、次数、开始时间、开始错误日志
错误类型列表遍历对比
辅助字段修正
日志近似度对比计算
接口响应http code及对应的响应个数
耗时个数
平均耗时
最快耗时
最慢耗时
累计请求次数
24小时,96个数据统计块
15分钟一个时间块
数据特征筛选
人工配置替换模板
巧妙的算法
2000台服务器做ELK
SQL如何做聚合归类去重
其他应用场景
资源匮乏下的简单算法实现
算法的应用
Roaring Bitmap压缩bitmap空间
内存浪费问题
错误频率周期记录
错误归类展示
错误日志聚类方案
错误日志的重要性
统计指标
时间块划分
时间块方式保存周期时间块内的统计
URL去参数后的性能统计
URL整理
RESTful方式设计内网接口
服务器资源匮乏
数据量很大
思考题
总结
bitmap实现频率统计
错误日志聚类
时间分块统计
URL去参数聚合
服务器资源
定制的分布式链路跟踪系统
ELK架构
实时统计:链路跟踪实时计算中的实用算法

该思维导图由 AI 生成,仅供参考

你好,我是徐长龙。
前几节课我们了解了 ELK 架构,以及如何通过它快速实现一个定制的分布式链路跟踪系统。不过 ELK 是一个很庞大的体系,使用它的前提是我们至少要有性能很好的三台服务器。
如果我们的数据量很大,需要投入的服务器资源就更多,之前我们最大一次的规模,投入了大概 2000 台服务器做 ELK。但如果我们的服务器资源很匮乏,这种情况下,要怎样实现性能分析统计和监控呢?
当时我只有两台 4 核 8G 服务器,所以我用了一些巧妙的算法,实现了本来需要大量服务器并行计算,才能实现的功能。这节课,我就给你分享一下这些算法。
我先把实时计算的整体结构图放出来,方便你建立整体印象。
实时计算的整体结构图
从上图可见,我们实时计算的数据是从 Kafka 拉取的,通过进程实时计算统计 Kafka 的分组消费。接下来,我们具体看看这些算法的思路和功用。

URL 去参数聚合

做链路跟踪的小伙伴都会很头疼 URL 去参数这个问题,主要原因是很多小伙伴会使用 RESTful 方式来设计内网接口。而做链路跟踪或针对 API 维度进行统计分析时,如果不做整理,直接将这些带参数的网址录入到统计分析系统中是不行的。
同一个 API 由于不同的参数无法归类,最终会导致网址不唯一,而成千上万个“不同”网址的 API 汇总在一起,就会造成统计系统因资源耗尽崩掉。除此之外,同一网址不同的 method 操作在 RESTful 中实际也是不同的实现,所以同一个网址并不代表同一个接口,这更是给归类统计增加了难度。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在实时计算中使用的一些实用算法,包括对URL去参数聚合、时间分块统计、错误日志聚类和bitmap实现频率统计。作者分享了在资源匮乏的情况下,如何通过巧妙的算法实现性能分析统计和监控。针对RESTful接口设计中的参数问题,提出了两种常用的解决方式:人工配置替换模板和数据特征筛选。通过将一段时间内的请求数据在内存中汇总统计,实现了对不同接口的性能统计。文章还提到了监控系统对细微问题的重要性,强调了对细微故障的排查和处理的必要性。此外,介绍了使用simhash算法进行错误日志聚类和bitmap实现频率统计的方法。通过这些算法和方法,读者可以更好地了解在资源匮乏情况下如何实现性能分析统计和监控,为实时计算提供了实用的技术参考。文章内容涵盖了实用的技术算法和方法,为读者提供了解决实时计算中性能分析统计和监控问题的思路和工具。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Spoon
    还是以Restful API举例说明 GET geekbang.com/user/1002312/info => geekbang.com/user/*num*/info_GET PUT geekbang.com/user/1002312/info => geekbang.com/user/*num*/info_PUT DELETE geekbang.com/user/1002312/friend/123455 => geekbang.com/user/*num*/friend/*num*_DEL method: GET/PUT/DELETE url:geekbang.com/user/1002312/info geekbang.com/user/1002312/friend/123455 time: 请求时间,秒 可以用大数据HIVE或者阿里的MaxCompute进行离线分析,这里以我司MaxCompute为例: caoncat/regexp_replace参考文档 https://help.aliyun.com/document_detail/48973.html SELECT processed_url ,COUNT(*) As total_cnt ,MEDIAN(time) AS tp50_time ,AVG(time) As avg_time FROM ( SELECT concat(regexp_replace(url,"\d","*num*"),"_",method) AS processed_url ,time FROM soure_data ) as temp_statistics GROUP BY processed_url; 这里用离线数据分析的SQL举例,如果实时的类似 还有一种可以使用小时表同步方案做离线统计

    作者回复: 你好,目测这是另外一个方式了,很有趣,具体效果我还没有操作验证,maxcomputer这个需要云离线计算服务的支持。另外,如果是阿里云另外补充一个:阿里的日志中心支持聚类,也可以自动识别重复部分格式,聚合类似格式日志,不过有一定误判,比较简单方便,只是不能指定聚合字段和格式。

    2023-04-02归属地:浙江
  • 若水清菡
    对SQL不是很了解,接触到的SQL语句大致分为:增insert、删delete 、改update、查select这四类。其中查 select 的操作存在重复的可能性,如果是多人同时查询一个时间或者一个条件的数据,可以考虑根据select的参数聚合归类去重;增insert、删delete 、改update 都是原子操作,这三类操作都具有唯一性,可以提供语句操作模块,然后日志这边通过人工配置替换模板来聚合归类去重。

    作者回复: 你好,若水清菡,这里要注意如果查询语句条件参数不一样,但是语句一样是需要聚合成一条这样更好管理

    2023-01-23归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部