Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41031 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

32 | 数据处理:如何高效处理应用程序产生的数据?

数据采集需求多样化
数据堆积处理
程序性能损失最小化
优雅关停数据采集服务
启动周期性消费 Redis 数据
健康检查
初始化数据采集插件
数据采集插件定义
优雅关停数据上报
异步上报授权日志
数据上报功能设计
数据采集系统落地项目:iam-authz-server + iam-pump
同步上报
异步上报
健康状态 API
配置采集频率
优雅关停功能
数据缓存处理
插件化、可扩展
数据上报功能模块化
批量上报
异步上报
设计数据采集系统时需要解决的核心问题
链接:文章链接
主题:数据采集、异步数据处理、数据上报、数据采集系统设计、数据采集应用模型
作者:孔令飞
标题:如何高效处理应用程序产生的数据?
动手练习启动 iam-authz-server 和 iam-pump 服务,验证整个流程
设计数据上报和数据采集应用时需要注意的点
建议:将功能抽象成通用模型,实现基本框架,插件化定制化部分
设计可扩展、高性能的数据采集服务
数据采集需求转化成数据采集模型
iam-pump:数据采集
iam-authz-server:数据上报
数据采集功能设计
数据上报功能设计
异步采集
同步采集
参考文章
课后练习
总结
数据采集应用模型
数据采集系统设计
数据采集方式的分类
如何高效处理应用程序产生的数据?

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

你好,我是孔令飞。今天我们来聊聊,如何更好地进行异步数据处理。
一个大型应用为了后期的排障、运营等,会将一些请求数据保存在存储系统中,供日后使用。例如:应用将请求日志保存到 Elasticsearch 中,方便排障;网关将 API 请求次数、请求消息体等数据保存在数据库中,供控制台查询展示。
为了满足这些需求,我们需要进行数据采集,数据采集在大型应用中很常见,但我发现不少开发者设计的数据采集服务,通常会存在下面这些问题:
采集服务只针对某个采集需求开发,如果采集需求有变,需要修改主代码逻辑,代码改动势必会带来潜在的 Bug,增加开发测试工作量。
数据采集服务会导致已有的服务请求延时变高。
采集数据性能差,需要较长时间才能采集完一批数据。
启停服务时,会导致采集的数据丢失。
这一讲,我就来详细教你如何设计和落地一个数据采集服务,解决上面这些问题。

数据采集方式的分类

首先,你需要知道当前数据采集有哪些方式,以便更好地理解异步数据处理方案。
目前,数据采集主要有两种方式,分别是同步采集和异步采集。二者的概念和优缺点如下表所示:
现代应用对性能的要求越来越高,而异步采集对应用程序的性能影响更小,因此异步采集更受开发者欢迎,得到了大规模的应用。接下来,我要介绍的 IAM Pump Server 服务,采用的就是异步采集的方式。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了设计和落地高效数据采集服务的关键要点。强调了异步采集在现代应用中的重要性,并详细介绍了数据采集系统的设计要点和应用模型的绘制。通过模型化设计和插件化架构,解决了数据采集中的性能、数据堆积和多样化需求等问题。文章突出了异步数据处理的重要性,以及如何通过模型化设计和插件化架构来解决数据采集中的性能、数据堆积和多样化需求等问题。读者可以从中学习到如何设计和实现一个高效的数据采集系统,为应用程序产生的数据提供更好的处理方式。文章还介绍了iam-pump组件的设计要点和核心代码,以及如何实现数据采集插件定义、初始化和健康检查等功能。最后,作者建议将一些功能抽象成通用模型,并为该模型实现基本框架,然后将需要定制化的部分插件化,以设计出一个高扩展的服务,满足现在和未来的需求。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • Sch0ng
    数据采集服务分数据上报和数据采集,先做拆分再有针对性达成目标性能。 把功能抽象成模型,再把实现封装成独立的模块,应用依赖模型的接口,不依赖具体的实现。

    作者回复: 到位!

    2021-08-16
    2
    5
  • Vackine
    pump如果中途退出了,会记录已经消费的位置么?

    作者回复: 这里暂时不支持。 老哥,可以尝试将redis切换成kafka,kafka可以记录消费位置

    2021-08-07
    2
    5
  • 静心
    这个插件化的pump模型抽象的真好,感觉这个pump项目完全可以用到生产了。

    作者回复: 这个模型就是源自亿级QPS的生产项目,完全可以用到生产环境中。

    2021-10-29
    2
  • 左耳朵东
    func (r *Analytics) Start() { analytics = r r.store.Connect() // start worker pool atomic.SwapUint32(&r.shouldStop, 0) for i := 0; i < r.poolSize; i++ { r.poolWg.Add(1) go r.recordWorker() } // stop analytics workers go r.Stop() } 倒数第二行代码 go r.Stop(),这里把 recordsChan 马上又关闭了?那后面还怎么给这个 channel 发消息?

    作者回复: 这里是个bug哈,master分支有纠正过来,这里我让编辑改下

    2022-03-14
    1
  • Geek_63505f
    老师这句话是什么意思 viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_")) strings.NewReplacer里面不应该是("-","_")这样吗?前面那两个字符多出来是干嘛用的?

    作者回复: 将 . 也转换为_

    2022-01-22
    2
    1
  • Ethan Liu
    应用产生的数据放到日志中,再由数据上报服务读取至bufferd channel吗? 同步上报方式指的是rpc吗?

    作者回复: 同步上报指的是:调用上报接口,并阻塞直到上报接口返回。

    2021-09-09
    1
  • 来咯
    ensureConnection redis 重新连接 失败 应该需要sleep吧 不然日志写爆 CPU 也占满了

    作者回复: 没问题的

    2022-05-27归属地:广东
  • yandongxiao
    总结: 数据采集服务常见问题:不够通用化;采集服务延迟高、性能差、启停服务时会有数据丢失。 数据采集服务一般需要完成:数据上报 和 数据处理。它们一般不是同一个进程内。 数据上报:对数据压缩、支持批量上报、超时上报、优雅关停(停止接收新请求,完成服务中的请求) 数据处理:数据处理完毕后,还需要进行上报。将上报的模块做成插件化,非常重要。
    2021-12-04
    1
  • 伪装成学霸的学渣
    我想问一下这种大文件处理方式,文中处理方式是直接把大文件上传请求数据保存在redis么? 还有既然在上报后pump做了过滤处理,是否考虑在网关上报前做过滤处理? "我之前开发过公有云的网关服务,网关服务需要把网关的请求数据转存到 MongoDB 中。我们的网关服务曾经遇到一个比较大的坑:有些用户会通过网关上传非常大的文件(百 M 级别),这些数据转存到 MongoDB 中,快速消耗了 MongoDB 的存储空间(500G 存储空间)。为了避免这个问题,在转存数据时,需要过滤掉一些比较详细的数据,所以 iam-pump 添加了 SetOmitDetailedRecording 来过滤掉详细的数据"
    2023-11-14归属地:芬兰
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部