腾讯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个人是主力)
    虽然项目没完成真正的需求,项目体量是比以前自己的做过的项目大,收获也非常多,与组员一起加班赶工的日子也是累并快乐着!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MedSAM:深度学习通用医学影像分割模型,更快、更准确地自动识别诊断疾病

MedSAM是一款基于深度学习的医学影像分割工具,它能够自动识别和描绘医学影像中的重要区域,如肿瘤或其他组织的病变。该工具通过学习大量医学影像和对应的掩模(即正确的分割结果),能够处理各种不同的医学影像和复杂情况…

数据库之TiDB基础讲解

文章目录 1 TiDB1.1 引言1.2 TiDB介绍1.3 系统架构1.3.1 TIDB Server1.3.2 PD Server1.3.3 TIKV Server1.3.4 TiKV如何不丢失数据1.3.5 分布式事务支持 1.4 与MySQL的对比1.5 性能测试1.5.1 测试一1.5.2 系统测试报告 2 1 TiDB 1.1 引言 当我们使用 Mysql 数据库到达一定量级…

使用nginx对视频、音频、图片等静态资源网址,加token签权

目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权 如: http://192…

Win10 双网卡实现同时上内外网

因为需要同时上内网和外网,但公司做了网络隔离,不能同时上内外网,所以多加了块无线网卡,配置双网关实现同时上内外网,互不影响 打开 Windows PowerShell(管理员),输入:ro…

CCF-CSP 202312-2 因子化简(Java、C++、Python)

文章目录 因子化简题目背景问题描述输入格式输出格式样例输入样例输出样例解释子任务 满分代码JavaCPython线性筛法 因子化简 题目背景 质数(又称“素数”)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。 问题描述…

房屋租赁系统-java

思维导图:业务逻辑 类的存放: 工具类 Utility package study.houserent.util; import java.util.*; /***/ public class Utility {//静态属性。。。private static Scanner scanner new Scanner(System.in);/*** 功能:读取键盘输入的一个菜单…

DevOps落地笔记-02|影响地图:产品规划和需求分析的利器

从这一讲开始,我们进入 DevOps 正题。按照端到端的顺序,讲解 DevOps 中的最佳实践如何在软件开发过程中发挥作用。所谓端到端,是指从需求提出到需求被发布到生产环境交付给用户的整个过程,可以理解为软件开发的全生命周期。所谓最…

06 SB3之Thymeleaf实现视图返回

1快速尝试一个返回视图的项目 1.1创建器添加Web, Thymeleaf, lombok依赖创建项目 1.2 编写Controller Controller public class QuickController {RequestMapping("/exam/quick") public String quick(Model model){//业务处理结果数据,放入到 Model 模…

【lesson1】高并发内存池项目介绍

文章目录 这个项目做的是什么?这个项目的要求的知识储备和难度?什么是内存池池化技术内存池内存池主要解决的问题malloc 这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc&#xf…

万户 ezOFFICE SendFileCheckTemplateEdit.jsp SQL注入漏洞

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Redis内存设置

通过redis-cli进入Redis命令行 redis权限认证命令:auth 查看redis内存使用情况的命令:info memory 查看最大内存命令:config get maxmemory 设置最大内存命令:config set maxmemory 也可以通过redis.conf配置文件修改最大内存…

MicroPython核心:映射和字典

MicroPython字典和映射使用称为开放寻址和线性探测的技术,本文详细介绍了这两种方法。 开放寻址 开放寻址用于解决碰撞问题,碰撞是非常常见的现象,当两个条目恰好散列到同一个槽或位置时就会发生碰撞。例如,散列设置如下&#x…

计算机基础知识讲解(原码反码补码)(以及在C语言里面是如何计算和运用的)

补码反码掩码以及原理 补码、反码和掩码是计算机科学中用于表示和处理数值的三种编码方式。 原码 原码是最直观的数值表示方法,它将数值的二进制表示与其符号位结合起来。在原码表示中,正数的符号位为0,而负数的符号位为1。原码的缺点在于…

【pytorch】nn.linear 中为什么是y=xA^T+b

我记得读教材的时候是yWxb, 左乘矩阵W,这样才能表示线性变化。 但是pytorch中的nn.linear中,计算方式是yxA^Tb,其中A是权重矩阵。 为什么右乘也能表示线性变化操作呢?因为pytorch中,照顾到输入是多个样本一起算的&…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制,可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

C++_list

目录 一、模拟实现list 1、list的基本结构 2、迭代器封装 2.1 正向迭代器 2.2 反向迭代器 3、指定位置插入 4、指定位置删除 5、结语 前言: list是STL(标准模板库)中的八大容器之一,而STL属于C标准库的一部分,因此在C中可以直接使用…

TestNG中的DataProviders(@DataProvider annotation)

目录 什么是数据提供者? 数据提供程序及其返回的内容 DataProvider语法 DataProvider注释的方法可以返回什么? 使用数据提供程序的测试用例 如何在测试用例中使用数据提供程序? 其他类中的数据提供程序 在DataProvider带注释的方法中…

深度强化学习(王树森)笔记11

深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…

植物病害检测YOLOV8,OPENCV调用

【免费】植物病害检测,10种类型,YOLOV8训练,转换成ONNX,OPENCV调用资源-CSDN文库 植物病害检测,YOLOV8NANO,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTH…

算法——线性代数——逆序数奇偶

一、逆序数奇偶 分析: 概念: 求一个排列的逆序数奇偶性有两种方法,一种是从前往后遍历数组,另一种是从后往前遍历数组从前往后时,当前数字前面大于它的数字的个数即为它的逆序数个数从后往前时,当前数字前…