腾讯mini项目总结-指标监控服务重构

项目概述

本项目的背景是,当前企业内部使用的指标监控服务的方案的成本很高,无法符合用户的需求,于是需要调研并对比测试市面上比较热门的几款开源的监控方案(选择了通用的OpenTelemetry协议:Signoz,otel-collector,jaeger;uptrace不能商用),去重构原有服务,实现降本增效:减少监控服务本身的接入成本、存储成本,提高监控服务的性能。

项目目标

我们需要通过在服务中接入不同监控方案的组件,实现小而精的监控服务,最终给到企业一个测试报表,告诉他们不同的监控方案在成本与性能上的对比。

项目原先需求

image.png

个人角色

开发、测试

  • 本人负责一种监控方案(SigNoz)的接入以及测试;
  • 实现了OTEL Log的上报;
  • 负责调研如何跨服务监控链路及链路关系图;
  • 负责编写并优化监控服务代码,实现无感化接入OTEL SDK、提高可扩展性;
  • 负责替换原项目服务中用到的kafka消息处理框架(使用Watermill-kafka Pub/Sub),并进行性能测试。

项目成果

针对原服务需求,设计了SLI,然后成功在原服务接入了两种监控方案进行指标收集和上报,对监控服务代码进行了无感化和可扩展性的优化,制作出SRE报表。
对不同的监控方案进行了测试,但因为测试经验不足、过程不规范,导致结果不可信。

项目的“开发”部分

image.png

监控对象

  • Venus 是负责性能事件上报的服务
  • Profile 是负责分析性能事件的服务

项目的“测试”部分

最后一周进行的测试流程是不规范的,结果无意义。自己也能从这个错误的过程中吸取些教训。
不规范在:

  • 目标不清晰,使用的手段效率较低
  • 缺少对测试的基础知识,经验不足,走过来全是坑,时间成本高

项目实施总结

小组日程

  • 7月6日~7月13日:熟悉需要监控的服务,并针对该服务设计需监控的SLI;
  • 7月14日~7月20日:接入需调研的监控方案的组件到服务当中,学习通用的可观测性协议:OpenTelemetry;
  • 7月21日~7月25日:在需监控的服务中接入OpenTelemetry SDK,完成trace、metric、log的上报;
  • 7月26日~7月29日:没提出什么需求,在导师对提交的代码review后,解决问题;了解、学习其他成员完成的任务内容。
  • 7月30日~8月4日:调研3种监控服务的cpu、内存的可行性方案;调研如何搭建跨服务链路追踪和本服务的链路关系图。
  • 8月5日~8月10日:没什么需求,研究了下使用到的一些第三方库的源码,解决服务运行时碰到的一些小问题。
  • 8月11日~8月19日:完成新的扩展任务:使用新的kafka消息处理框架替换原有的框架并进行性能测试,解决过程中遇到的难点。
  • 8月20日~8月25日:中期汇报,完成导师提的一些需求,接入腾讯云clickhouse集群。
  • 8月26日~8月30日:OliverDing导师召集会议,安排具体的测试任务,在导师的帮助下尽力完成3种监控方案的存储、性能的测试对比。

个人在项目实施过程的优点及缺点

  • 优点:
  1. 完成我这个开发角色应该完成的任务;
  2. 有一定的主动性,会主动研究源码或查阅资料解决问题;
  3. 积极,不管是在完成任务还是讨论问题、方案上。
  • 缺点:
  1. 对问题的整体来龙去脉没理清楚就动手;
  2. 很长一段时间都不知道离项目的真正需求有多远,只会听安排(导致整体项目是不被自己把控)
  3. 不知道怎么样组织、驱动成员并合理分工(虽然我不是组长角色)

项目问题

本次项目是以失败告终的。项目真正的需求是在8月26日与导师开完会后,才领到的,就是“测试”“测试”“测试”!,看完我们的小组日程,很容易就总结出了项目失败的原因:

  • 完成了对服务的指标监控后,没有立刻开展测试的工作,而是没需求了或者去完成一些扩展任务;
  • 过多关注在本项目的“开发”上,实际应该将重心放在“测试”上(90%的时间花在开发上、10%的时间留给最终最重要的测试)。因为当初本项目招人时,提的需求看起来都是与开发有很大关联的,但需求不断再变化。改需求这个事情是能接受的,不过在“测试”领域上,真的是一点经验没有,没有花时间去学习相关的技术,导致项目最后几天内需要给出测试报表时,“一股脑盲目测试”,测试过程不合理不规范就得把结果全部推翻再重来,产生了很大的时间成本。虽然导师全力帮助我们解决一些问题,但是奈何成员们几乎都没“测试”经验,时间也非常紧急,失败便成了必然。
  • 针对于本项目组8个人在这50多天完成的成果,先不谈成功与否,我和组长都觉得我们只需3、4个人即可完成到相同的程度(暂且不谈离真正的需求差多远)。这里我想表达的是:项目任务安排和成员分工这两个环节是出现了问题的

总结沉淀

本人经过此项目后,熟悉了几套监控方案的部署,积累了一些方法和经验,比如:

  • 如何通过搭建跨服务链路追踪,对多个服务进行监控;
  • 在完成监控服务无感化接入的任务时学习到:如何优化代码,减少对原服务的代码侵入,提高了对代码的可扩展性的关注;
  • 解决问题的方式:多利用搜索引擎,遇到问题先看官方文档和FAQ,不要“闭门造轮子”,多去参考官方的示例,避免增加时间成本,重复造轮子。

体会与收获

  • 项目学习的新知识

    • 通用的可观测性协议:OpenTelemetry和一些实现的方案及组件:Signoz、otel-collector、jaeger、prometheus、grafana
    • 分布式监控链路追踪系统的搭建;
    • 熟悉了Go语言(goroutine、test、benchmark)和一些服务中使用到的开发框架和中间件:fiber、viper、kafka、cobra、zap、watermill-Kafka Pub/Sub等等。
    • 监控cpu、内存等的方式:Pprof、cAdvisor、docker stats
    • 对clickhouse有更多的认识,比如:shard、replica(https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/replication )
      8367d9d717c0ab676898e89bc991f23.png
  • 代办

    • 课余时间去阅读Google的SRE,本项目涉及到其中的一部分:Monitoring,目前我对整体SRE还是没一个清晰的概念。之后我需要能够用一句话去总结SRE到底是什么
  • 参与此课程的感想与建议
    对于本次项目失败的结果,我最大的感受是非常非常非常地惋惜!首先是我们组是最多人的(8个),但是做出这种成果,我对8个人消耗的时间成本感到不能接受(虽然只有3、4个人是主力)
    虽然项目没完成真正的需求,项目体量是比以前自己的做过的项目大,收获也非常多,与组员一起加班赶工的日子也是累并快乐着!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM学习

1.Java虚拟机内部有哪些线程共享,那些线程隔离 程序计数器: 通过改变这个计数器的值来选取下一条需要执行的字节码命令 Java虚拟机栈: 栈,每个方法被执行时,Java虚拟机都会同步的创建一个栈帧用于存储局部变量表&…

java 实现微信公众号关键字自动回复

接上一篇内容https://blog.csdn.net/YISHENGYOUNI95/article/details/134383219 因为设置了公众号的服务器配置,导致之前设置的公众号自动回复失效了 需要通过之前配置的接口实现自动回复 参考一下官方文档回复文本消息 | 微信开放文档 根据用户发送的消息&#…

中国的茶文化:历史、传统与生活

中国的茶文化:历史、传统与生活 一、引言 茶,这一神奇而古老的饮品,与中国的历史、文化和生活方式紧密相连。中国的茶文化,源远流长,博大精深,是中华文明的重要组成部分。它不仅是一种饮料,更是…

Jedis连接池究竟是何物?

一、前言 连接池的用途实际上有过开发经验的朋友都已经比较清楚了,当资源对象的创建/销毁比较耗时的场景下,可以通过"池化"技术,达到资源的复用,以此来减少系统的开销、增大系统吞吐量,比如数据库连接池、线…

Leetcode 2808 . 使循环数组所有元素相等

链接 : 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路 : 本题是一道思维题; 最后变成的一样的数,一定是原数组中存在的数,那么用hash表来统计每个数在原数组中x出现的次数,那么对于非x的元素…

雍禾植发:“地球生发计划”修复荒漠化土地超百万平方米

日前,雍禾植发宣布“毛发森林•地球生发计划”从正式发起到2023年11月19日秋季造林结束,已经在内蒙古自治区额济纳旗东风镇额很查干嘎查种下60000棵树,修复荒漠化土地超过102.01万平方米。 作为此次公益活动的“落脚地”,额济纳旗地处内蒙古…

对于表的理解

文章目录 一、表的理解二、导入演示数据三、简单的查询命令 一、表的理解 数据库当中最基本的单元是表:table 什么是表table?为什么用表来存储数据呢? 数据库当中是以表格的形式来表示数据的。因为表比较直观,任何一张表都有行和列:行(row…

Swift Vapor 教程(项目创建)

The future of web development. 在初次接触 Swift Vapor 时,感觉代码比较清爽,用起来逻辑比较清晰。 困难点: Swift Vapor 使用了JWT管理三方库,比较吃网络Swift Vapor 搭建环境比较复杂初次使用Swift Vapor 尽量不要使用MySql。…

Linux内存常用命令指标详解

1. free rootnode02:~# free -m total used free shared buff/cache available Mem: 3919 1194 1738 1 986 2446 Swap: 0 0 0free 输出的是一个表格,其中…

网页版idea、pycharm搭建

官网教程提供了两种方法:1、有给应用版idea或pycharm安装插件来开放网页服务;2、使用docker创建容器开放网页服务。这边推荐并介绍第二种步骤。 基本过程为:拉取相关镜像;开启服务;使用网页版 (细节和注意点…

3D数据转换器HOOPS Exchange如何获取模型的几何数据? 干货预警!

一、概述 前面讲解过模型在内存中的结构,现在回顾一下,当模型导入成功后,整个模型数据会以原生结构的 PRC 组装树形式存放到内存中。(申请 HOOPS Exchange 试用) PRC结构的主要类型包含四种,分别是…

Qt 调用系统键盘

Wow64DisableWow64FsRedirection(&pvoid) 函数用于禁用 32 位 Windows 程序对文件系统重定向的支持。它将禁用文件系统重定向,以便在运行 32 位应用程序时,可以访问 64 位系统目录。pvoid 是一个指向先前启用的文件系统重定向状态的指针。 构建了要…

(2)(2.10) LTM telemetry

文章目录 前言 1 协议概述 2 配置 3 带FPV视频发射器的使用示例 4 使用TCM3105的FSK调制解调器示例 前言 轻量级 TeleMetry 协议 (LTM) 是一种单向通信协议(从飞行器下行的数据链路),可让你以低带宽/低波特率(通常为 2400 波…

ElasticSearch 应用实践 笔记

概述 介绍 ES 是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ElasticSearch的底层是开源库Lu…

【Golang】ModbusRTU协议CRC16校验算法

CRC校验码是通过在数据后面附加一个短的校验序列来生成的,用于检测数据在传输过程中是否发生错误。CRC16是一种特定的CRC校验算法,它生成一个16位的校验码。 下面是使用Go语言实现CRC16校验算法的代码: package main import ("encoding…

npm安装下载修改镜像源

问题描述一 npm install 时,报错:npm ERR! network request to https://registry.npmjs.org/postcss-pxtorem failed, reason: connect ETIMEDOU,这是因为默认npm安装会请求国外的镜像源,导致下载缓慢容易断开请求下载失败的 np…

SQL Server 函数参考手册(SQL Server 字符串函数)

目录 SQL Server ASCII() 函数 SQL Server CHAR() 函数 SQL Server CHARINDEX() 函数 SQL Server CONCAT() 函数 SQL Server 连接运算符 SQL Server CONCAT_WS() 函数 SQL Server DATALENGTH() 函数 SQL Server DIFFERENCE() 函数 SQL Server FORMAT() 函数 SQL Serv…

MySQL 函数参考手册(MySQL 字符串函数)

目录 MySQL ASCII() 函数 MySQL CHAR_LENGTH() 函数 MySQL CHARACTER_LENGTH() 函数 MySQL CONCAT() 函数 MySQL CONCAT_WS() 函数 MySQL FIELD() 函数 MySQL FIND_IN_SET() 函数 MySQL FORMAT() 函数 MySQL INSERT() 函数 MySQL INSTR() 函数 MySQL LCASE() 函数 …

【正点原子STM32】IWDG 独立看门狗(简介、工作原理、IWDG寄存器配置操作步骤、IWDG溢出时间计算、IWDG配置步骤、独立看门狗流程)

一、IWDG简介 IWDG有什么作用? 二、IWDG工作原理 三、IWDG框图 四、IWDG寄存器 键寄存器(IWDG_KR)预分频器寄存器 (IWDG_PR)重装载寄存器(IWDG_RLR) 状态寄存器(IWDG_SR) 寄存器配置操作步骤 五、IWDG溢出时间计算 IWDG溢出时间计算公式…

【脑电信号处理与特征提取】P5-彭薇薇:脑电信号的预处理及数据分析要点

彭薇薇:脑电信号的预处理及数据分析要点 脑电 脑电是神经活动的测量方法,在不同位置测量有不同的方法。比如大脑皮层表面测量的是ECoG,在头皮测量的是EEG。除了EEG是无损的,其他都是有损的。 脑电信号采集系统 下面是完整的…