Go性能优化:基于 Pyroscope 的 PGO 最佳实践

性能监控与优化是现代软件开发中不可或缺的一环,尤其是在分布式系统和服务端应用中。通过有效的性能监控工具,开发者能够快速定位并解决性能瓶颈,从而提升系统的响应速度和用户体验。继《使用 Pyrscope 结合 Holmes 加速找到服务瓶颈》之后,Pyroscope 在我们的团队中发挥了重要作用。例如,在 ADX 服务中,通过对深拷贝操作的优化,实现了性能提升 10%的目标;在配置中心方面,我们也通过性能监控发现并解决了多个关键瓶颈。 然而,尽管 Pyroscope 和 Holmes 已经在性能监控方面取得了显著成果,但仍存在一些不足之处。首先,目前只有 Holmes 异常上报机制,缺乏正常运行时的数据上报,这使得在排查问题时缺乏对比基准。其次,随着 Go 语言版本 1.21 的发布,Profile-Guided Optimization (PGO) 已经成为标准特性之一,但 Holmes…

七猫自研机器学习平台

七猫小说APP内容推荐的精准度,依赖策略算法的持续迭代,预估模型是算法的核心能力。此前,七猫各项推荐业务接入模型需要一定的学习成本,且各项业务模型独立开发,不同业务间的模型能力不能快速协作和复用,无法形成合力,造成一定的人力浪费。针对这些痛点,我们基于开源框架,自主建设了一个机器学习平台,从特征、训练、部署等方面简化模型接入流程,将通用的数据、基建进行统一,提升模块的复用能力,减少重复开发和人力资源浪费。…

全托管 StarRocks 在七猫的应用和实践

七猫数仓团队主要的职责是承接七猫各条业务线的离线数据开发、实时数据开发、指标建设、数据治理等工作。现在七猫有多套全托管 StarRocks 集群在生产环境投入了使用,部分 StarRocks 集群从 EMR StarRocks 集群逐步升级成为全托管 StarRocks 集群。据不完全统计,数据治理前离线数据加实时数据,总数据量大约在 20PB 左右。那数仓团队是如何管理这些数据,支持各条业务线的用数需求的呢?…

Java+MotionEvent实现埋点自动化

本文旨在帮助测试人员“0”代码完成UI自动操作以及埋点自动校验,基于现状,埋点测试以及每次发版需要花费大量时间验证相关埋点,并且随着业务发展,埋点数量只会越来越多,很难做到每次发版将全部埋点回归验证一遍,虽然线上有埋点数据监控系统,但是发现埋点数据异常时已处于外网阶段,因此需要一套机制降低埋点问题逃逸率,同时降低测试负担,提高测试效率。…

基于Jenkins、Apifox和GitLab实现自动化测试

在现代软件开发实践中,快速迭代和高质量交付的需求日益增长。为了满足这些需求,测试团队必须采用高效的工具和方法来确保软件在整个开发周期中的质量和性能。自动化测试作为一种有效的质量保障手段,能够帮助团队在早期发现和修复缺陷,减少手动测试的负担,提高测试的覆盖率和准确性。Jenkins、Apifox和GitLab的组合为自动化测试提供了一个强大、灵活且高效的解决方案。 一、概述 如下图所示,本课题将详细阐述运用GitLab的触发功能(当代码被推送到GitLab以后)触发Jenkins自动构建和部署,接着运行Apifox的自动化脚本,运行完成后发送通知给飞书,由飞书机器人把结果推送给相关人员的整个过程,配置以及实际应用。 使用这一组合进行性能测试有很多优势: 自动化测试流程:Jenkins可以根据代码的提交自动触发测试,使用Apifox执行API测试用例,并将测试结果反馈给开发和测试团队;快速反馈和问题定位:自动化测试可以快速提供反馈,帮助团队及时发现和定位问题,从而减少修复成本;持续集成和部署:Jenkins支持持续集成和持续部署,确保软件质量的同时加快软件交付速度;文档和协作:Apifox生成的API文档可以实时更新,与团队成员共享,提高沟通效率;版本控制:GitLab的版本控制功能确保代码变更的可追溯性,同时支持代码审查,提高代码质量;可扩展性和可维护性:随着项目的增长和变化,自动化测试用例和流程可以方便地进行扩展和维护,适应不断变化的需求。二、Jenkins部署 1、安装插件 在Jenkins中安装GitLab插件,…

读懂前端「性能优化」

背景随着互联网的发展,用户对网页加载速度和交互体验的要求越来越高,前端性能优化是提高网页性能的关键,性能优化是前端开发避不开的话题,一个完美的网站必定是能够给用户提供更优的体验。本文将介绍一些常见的前端性能优化技巧,帮助开发者提高网页加载速度,提升用户体验。 一、性能优化的本质 前端性能优化的本质在于提供更快速、更可靠、更高效的用户体验。优化网站性能不仅仅是为了让网站加载更快,更是为了提高用户满意度、降低跳出率、提升转化率,并最终实现业务目标。 二、基于chrome浏览器分析的性能优化指标 2.1 以用户为中心 First Paint 首次绘制(FP)这个指标用于记录页面第一次绘制像素的时间,如显示页面背景色。First contentful paint 首次内容绘制 (FCP)LCP是指页面开始加载到最大文本块内容或图片显示在页面中的时间。如果 FP 及 FCP 两指标在 2 秒内完成的话我们的页面就算体验优秀。Largest contentful paint 最大内容绘制 (LCP)用于记录视窗内最大的元素绘制的时间,该时间会随着页面渲染变化而变化,因为页面中的最大元素在渲染过程中可能会发生改变,…

纵横小说的上云之路

纵横小说业务从传统IDC迁移到云上的过程,历经数月,我们技术中心也是经历了一场全面的业务优化和改变的过程。整个上云的过程是复杂且繁琐的,是在所有运维、后端、测试、产品等同学的一点点一轮轮的调研、讨论、测试中一步步完成的,其中的细枝末节都要经过数次的沟通测试,最终才成功完成上云的迁移。…

七猫utools插件分享

七猫utools插件这个工具其实已经在测试团队内部使用了很长一段时间了,在很多体验过同学的自来水推广下,很多业务组的开发同事也开始使用这个工具。可以说是很实用也广受好评的一个测试工具箱。…

七猫日志接收系统之客户端埋点 SDK

七猫日志接收系统系列文章将会向大家介绍七猫日志接收系统及相关的埋点 SDK,总共分为四篇, 本文为系列的第三篇,将介绍客户端埋点 SDK 的实现,主要涵盖了埋点日志的采集、存储、上传等一系列流程。…

纵横Android阅读器-绘制优化

随着纵横小说app各模块的迭代升级,阅读器所承载的功能也日益复杂。由于诸多历史遗留问题,阅读器内控件的绘制和点击实现方式变得相当繁琐,导致即便是对阅读器的微小调整,也需要耗费较长的开发周期,尤其是在当前一周一版的发布节奏下。因此,阅读器的需求变得难以快速响应,很难实现每周小步迭代。在本文中,将探讨纵横小说阅读器中可交互控件在简化现有实现方式上所做的一些尝试。…

七猫研发中心参加 Gopher China 2023 大会上海站回顾

2023 年 11 月 19 日,时隔三年 Gopher China 大会终于回归上海(Gopher China 2023 - 上海站)。Gopher China 大会是为广大的 Go 语言开发者以及大规模应用 Go 的示范企业精心准备的一场技术盛宴。自 2015 年由 Go 中国社区发起的第一届 Gopher China 大会在上海成功举办以来,历时 8 年它已经成为了国内最权威和最干货的 Go 大会。…

七猫日志接收系统之架构设计(下)

七猫日志接收系统系列文章将会向大家介绍七猫日志接收系统及相关的埋点 SDK,总共分为四篇。本文为系列的第二篇,我们将基于当前的 v4 版本详细介绍七猫日志接收系统架构,并从日志处理效率、系统的高可用以及成本控制等方面进行架构设计分析。同时随着七猫的继续壮大,日志接收系统必将迎来越来越多的挑战,我们也会对后续的迭代版本进行规划与展望。…

xorm与go-sql-driver的时区问题

go-sql-driver时区的默认配置是零时区,xorm默认的是本地时区,那么在DSN的配置中,加上loc=Local,让go-sql-driver与xorm使用相同的时区,这样就能避免我们在使用time.Time传递参数时,各个模块时间转换不一致的情况出现。…

Prometheus TSDB 的设计与实现

TSDB(时序数据库)是 Time Series Database(时间序列数据库)的简称,TSDB是一种高性能、低成本、稳定可靠的在线时间序列数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务,广泛应用于物联网(IoT)设备监控系统、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景,除此以外,还提供了时空场景的查询和分析的能力。…

媒体推广业务架构演进

在互联网APP项目推广中,媒体在线推广是市场推广中重要的推广手段之一,通常在运营中称之为买量或者付费推广,在推广的过程中,广告主需要与媒体进行对接,广告主需要对媒体侧下发的点击信息进行接收,用户下载完成激活后,还需要通过媒体下发的点击信息对新增或者沉默后又活跃的用户进行识别,主要识别来源于哪个平台及具体的广告效果,最后还需要回传通知广告平台激活用户设备相关的信息,从而实现广告平台与广告主之间推广及效果追踪溯源的链路闭环。七猫的媒体推广业务架构也随着业务的发展进行了一系列的演进,本文整理了整个过程中重要的调整节点,介绍整个架构的演进过程。…

StarRocks之视图及物化视图的实践

StarRocks提供了高效查询和数据处理的功能。为了方便用户进行复杂的查询操作,StarRocks引入了视图和物化视图技术,在 StarRocks在七猫的应用(二)中也提到视图与物化视图的作用。…

探索Go函数式编程:提升你的代码品质与可维护性

在2014年软件工程基础(FSE)大会上发表的一篇学术论文“A Large Scale Study of Programming Languages and Code Quality in Github”声称,函数式编程范式具有更低的代码错误率等四个结论。Go 支持一等函数、高阶函数、用户定义的函数类型、函数文字、闭包和多个返回值。 这些丰富的功能正好支持一门强类型语言编写出函数式编程风格的代码。…