小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

news/2024/4/29 14:57:57/文章来源:https://blog.csdn.net/weixin_49715102/article/details/130317796

2023年4月14日,Atlassian中国合作伙伴企业日·上海站圆满落幕。作为Atlassian全球白金合作伙伴、云专业伙伴,龙智参与了此次活动,并邀请小米集团信息技术部SRE薛世英作为演讲嘉宾,分享了小米公司的Jira实战经验。
以“小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定”为主题,薛世英深入介绍了小米成功实践万人规模Jira迁移的经验,并分享了如何优化Jira,如何根据用户需求实现功能的扩展,如何实现不间断提供服务,以及一些Jira日常使用技巧,为大家提供实践参考。

▽ 点击此处观看回放视频

小米集团 Jira 实战:如何在高负载状态下保持 Jira 性能与运行稳定720p

以下是部分文字实录(有删改润色):

各位下午好,我是来自小米公司的薛世英,今天受龙智邀请来讲解小米Jira系统的使用经验,我会分享我们是如何让Jira系统保持运行稳定性的。

小米从早期就开始使用Jira,2013年我接手了Jira系统的运维与管理。当时使用的是Server版本,现在已迁移至数据中心版。

小米Jira项目概况

2013年的时候,小米公司的Jira用户不足百人,主要用于安卓的研发。当时使用Jira的原因是用户数(员工数)增长过快,大家不可能认识所有同事,也不可能了解到每个人具体负责的工作内容,修bug很难找到正确的人或部门,加上bug统计管理的需求,以及UI界面易用性的考虑,我们开始使用Jira。

到现在,小米已经使用Jira 10年了。目前我们的数据量特别大,大概有千万级的Issue,而且这些Issue都是不能归档的。我们大约有2,000多个项目,界面、阶段的数量也比较多。

我们遇到最多的问题是接口机器人对接导致Jira系统运行慢。小米自动化的程度很高,每天大概有上百个接口机器人不停地对接Jira系统。

我们日活用户大约有14000人,有专人维护系统和需求,每周大概有50多个需求到我们这里进行各种需求变更。

Jira优点

Jira优点在于接口丰富、开放。用了Jira系统后,所有用户都可以随时随地拿到他想要的数据,不存在需要二次研发后才能有接口,或需要额外增加成本投入的情况。其他还有一些常见优点,比如可以自定义工作流、界面和字段,还有它本身的敏捷理念,丰富的插件市场等。

对于小米来说,除了接口,标准的webhooks服务用得也比较多,我们推送变更数据到用户方,Issue的状态可以实时变更。

Server版迁移到数据中心版

说一下我们为什么要把Server版迁移到数据中心版,以及在迁移过程中遇到了什么问题。当用户数增加、数据量庞大,再加上机器人的频繁对接,单机版的Server一天可能停止服务七、八次。

我们当时分析了原因,也找官方做了大量优化工作,找出的原因:

第一是因为JVM内存调整,会导致长时间Full GC回收频繁失败,导致Jira没有响应。

第二是因为数据量较大,Issue也多,随时需要查看和搜索。还有一点是我们购买的Server产品不限制用户数,导致用户较多,机器人随时在对接。

第三是因为Server版本产品无法使用限流功能。

我们想到的临时应对方法是通过人为重启中止Full GC操作。但是人为重启需要五分钟时间,如果人不在旁边时间会更长。

还有一个方法是使用脚本实现HA功能,加速自动化处理,但是再怎么加速还是需要恢复时间。

另外,我们从用户端解决问题,建立使用规范和机器人登记规范,降低获取数据的频率,缓解不可用次数。

但这些方法都治标不治本。

迁移至数据中心版

我们选择迁移到数据中心版来解决以上问题。迁移的时候,我们内部遇到最大的问题是部门成本与分摊核定。处理好成本问题后,我们又面临筛选供应商的问题。公司的采购部门已经提前将优质供应商进行了筛选,再根据相应的标准综合评判,最终选择龙智作为我们的Jira代理商。

在这里插入图片描述

采购前,我们做了一些技术上的方案测试,包括后来的正式迁移。在正式迁移之后,我们来到龙智公司的上海办公室待了一周的时间,与龙智专家和官方技术支持一起,把积攒的108个问题集中解决,其中包括需求、建议、接入、SSO等。

现在小米的Jira系统可用性已经在99.95%以上,正常情况可达到99.98%。

在这里插入图片描述

Jira优化

在这里插入图片描述

目前,我们的用户处理流程是用户提出需求,内部沟通确认,一部分需求在确认好之后我们就直接解决。如果解决不了,比如新的功能需求,我们会让龙智帮忙评估,包括评估是否能够通过开发实现、开发的周期和成本、是否需要购买某个插件等。

如果可以通过龙智开发实现,我们会与用户沟通成本和周期,用户再内部评估,成本申请下来后,就开始进行开发、脚本实现等工作。

还有一部分可以通过我们自己研发实现。我们会直接修改DB或脚本插件来实现,也可以找龙智编写脚本,例如将用户的操作及流程通过自动化脚本进行约束,以符合规范要求。

定制开发

在这里插入图片描述

我们买的插件比较多,使用的核心是龙智自研的组织架构插件,其次是龙智自研的Jira飞书插件,因为小米使用飞书,需要把Jira和飞书打通。但飞书自带的Jira大师不好用,会有卡顿和新版本支持等问题,所以我们找到了龙智做二次开发,还有ScriptRunner等脚本插件的支持。

问题排查

我们平时用的关键分析工具是JFR和HAR。JFR(Java Flight Recorder)是一个Java的数据收集框架,通过Jira的参数实时运行JFR,把dump包保存到各个节点上,遇到CPU增高时,可以根据监控时间来分析当时Jira系统在做什么,一清二楚。HAR就是大家平时使用浏览器的F12开发工具。如果使用这两个方法还是无法解决,我们就会寻求官方支持,解决速度还是很快的。

在这里插入图片描述

1、用户仪表板异常问题

我们的Issue数量较多,总体千万级,单个项目就有超过百万的Issue。所以当用户使用filter进行全局排序时,稍微操作不当,JAVA内存就会Full,负载增高,所以从CPU监控图上就能看到CPU突然会飙高。

我们通过JFR文件根据时间去查,能清晰地看到用户是谁,做了什么,然后我们会去搜索该用户的仪表盘,看到该用户的仪表盘是空的,基本上都是刷不出来,而且该用户每次登录Jira,或者是打开Jira主页的时候都会卡一次。

解决方法:访问用户仪表盘后,发现第一个图表一直在刷新,并且是白色状态,不出数据,基本可定位该图表异常,可以联系用户本人删除filter或缩小filter搜索范围。

2、访问速度越来越慢问题

访问速度越来越慢的问题让我们和用户都觉得头疼。在大家打开Jira主页时,加载时间超过10秒以上,而且每一项都加载得很慢。从运维的角度看,监控指标和各项性能又没有太大的异常,PV值也很低。

解决方法是:我们和龙智、官方技术支持多次会议后,达成一致意见,从nginx代理上做前后端分离,也就是用户端和接口端分开,分开之后感觉速度有质的飞跃。额外的收获是官方帮助我们多次优化了脚本插件,让每个网页的加载从10M多减少至5M,提升了公司wifi线路的用户体验。

在这里插入图片描述

3、RMI连接超时问题

我们经常查日志分析问题,发现日志里经常有RMI连接超时,每次报超时就会一连串报很多条,并且Jira前端无反应或反应慢。

我们会首先查看时间点对应的CPU波峰状态,然后去进行分析。JFR分析能看到是哪个用户用了API接口进行操作,占用了多大内存。比如一个接口占用了10G,这肯定是不正常的。然后联系用户,去查看具体情况。

以我们的经验来看,大部分都是因为一个Issue的评论数过千,甚至有的过万。这种就是机器人自动对接(一般为Issue中包括手机操作系统和BUG的提交、分析等自动化匹配操作)导致的,有些Issue中关键Bug原因不明确,机器人会自动添加评论,提供更多信息,所以会出现一次一个Issue占用10G的情况。

4、Jira系统Full GC问题

无论是Server版还是数据中心版,Full GC都是困扰我们的问题,相信大家也会遇到。虽然数据中心版保证了用户端的高可用性,但从后台运维角度来看,有时候某个节点还是会有问题,Jira某个节点会不定时的出现Full GC,大概的无响应的时间是几秒到几分钟。我们做了一系列的排查,最终的目标是降低成本、提高质量,不能无限制扩容服务器数量,所以我们抓取了占用jvm内存最多的人和进程。

在这里插入图片描述

可以看到,某用户做了2620的看板操作,并使用了大量内存。联系用户进行优化2620看板对应的JQL,缩小范围,其中包括增加经办人、日期、Issue状态的条件,避免对整个项目进行排序。因为一个项目有百万Issue时,再排序直接就停止响应。最后是系统管理员自行删除。

如何实现不间断提供服务

对于超大Jira系统,这里有几个建议,也是我们的日常做法。

  1. 多使用webhooks功能,实现主动推送变更数据到业务系统,这样能实现实施的功能,也能满足业务需求。
  2. 多多提交问题和想法让龙智或官方解决,我们提交的问题比较多,包括Jira的一些功能优化,也经常和官方沟通。
  3. 一定要有研发能力,实现top级问题用户自助解决。
  4. 一定要配备专门人员或龙智驻场,因为如果不太懂Jira的人员进行操作,一不小心就会影响全局。
  5. 项目版本和模块数量一定不能过百,不然在项目中新建问题会很慢。
  6. 一定要针对数量top级项目约定好使用规范。

给大家分享一下我们的Jira系统中JFR相关的设置、集群互斥锁和GC参数。

在这里插入图片描述
在这里插入图片描述

我们内部比较关心成本、效率和质量。我们使用Jira,但Jira很庞大,对于SRE来说肯定需要研发一些自助系统来辅助Jira。

成本方面,我们会自动禁用账号,在职用户60天不登录系统,我们就会清理掉他账号的系统权限,自动收回授权。还有部门人员分布统计,用来解决成本分摊问题。还有license授权告警,假如我们一共买了10个license,假如用户数超过了8个,我们就会有收到报警,不会等到超额才发现。

效率方面,因为入职员工比较多,好多用户让我们查询问题,我们一个人是无法面对将近2万的用户的。怎么办?开发一个系统让用户自己去查,角色权限增删和项目ID等等也交给用户自助解决。

质量方面,举个例子,我们内部称之为“地雷”看板,它是一个计划任务,大约每30秒检测一次,自动去数据库检查危险的filter,如果检测到会进行自动删除,确保系统稳定。

Jira监控

在这里插入图片描述

我们内部都是使用Falcon监控,并增加了jmx监控。对于某个节点出现无响应这种P0报警,会通过电话和飞书通知。日常报警例如CPU增高等由飞书直接推送普通消息。

有几个核心指标,他们会影响到整体服务。其中,最重要的是RMI错误数和GC情况。

日常使用技巧

这里讲到的使用技巧,技术层面的偏多。

首先是建议写好日常问题知识库和用户指南。

其次是多利用系统公告栏和用户群公告。

第三,也是最关键的一点,因为现在小品牌插件较多,这些插件可能经过了Jira官方的高性能测试,但在日常使用过程中,你不能过于信任这些插件,**试用插件前一定做好性能测试。**因为我们发现Jira本身性能非常强,但用了某些插件后会逐步很慢,所以要减少对插件的依赖。

第四,是为了避免系统过于庞大,多利用归档功能。

第五,建议大家使用ScriptRunner等脚本插件,可以实现批量增加字段和字段值更改等便捷功能。

第六,这里强调一点,我们内部也会针对一些日常反复出现的问题进行集中讲解培训。除了把自研系统做好以外,我们也会不定期开展培训。我们主要找到龙智为我们提供培训服务,培训内容包括Jira服务方法和最佳实践。我们会在内网上发起报名,可以观看直播、录屏,也可以现场学习。我们的录屏也是放在Jira中让用户自行观看。集中培训为我们解决了难题,提升了工作效率。

在这里插入图片描述

未来,我们要做的事情很多,针对可用性挑战、业务侧连续性要求,我们都会和官方、龙智共同商讨解决方案,也会及时升级到新的长期版本,我们新的优化问题已经在官方版本9上得到了解决,未来我们也会持续投入。

以上是我分享的内容,谢谢大家。

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

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

相关文章

【手撕MyBatis源码】执行器与缓存

文章目录 概述执行器(Executor)执行器总结 缓存MyBatis缓存概述一级缓存(LocalCache)Spring集成MyBatis后一级缓存失效的问题二级缓存二级缓存组件结构二级缓存的使用为什么要提交之后才能命中二级缓存?二级缓存结构二级缓存执行流程 概述 通过一条修改语句,我们来…

完美解决丨RuntimeError: create_session() called before __init__().

错误&#xff1a; import sys sys.path.append(/home/pi/ssd-detect) import ssd_detect ssd_detect.detect(/home/pi/ssd-detect/test.jpg) 报错如下&#xff1a; Traceback (most recent call last): File "test.py", line 6, in <module ssd_detect.detect(/ho…

java二维数组遍历

在 java中&#xff0c;二维数组是指在二维平面上的一个数组。在二维数组中&#xff0c;数据都是按行排序的。我们通常可以用“从上到下”、“从左到右”、“从后到前”等方法来遍历二维数组。由于二维数组中数据的有序性&#xff0c;我们可以在二维数组中快速地找到我们所需要的…

Python数据结构与算法-RAS算法(p96)

一、RSA加密算法简介 1、加密算法概念 传统密码: 加密算法是秘密的 现代密码系统:加密算法是公开的&#xff0c;密钥是秘密的&#xff1b;&#xff08;密钥可能是随机生成的&#xff0c;与他人不一致&#xff09; 对称加密—加密和解密用的同一个密钥 非对称加密—加密和解密用…

客户端请求耗时严重原因排查优化 (Nginx导致)

客户端请求耗时严重&#xff0c;初步从几个方面进行排查 1.检查网络连接&#xff0c;是否实现丢包&#xff0c;网络波动&#xff0c;网络拥堵等问题。 2.检查客户端请求耗时和project api 接口耗时差异&#xff0c;判断是nginx问题还是接口问题 如果是nginx耗时导致&#xff0c…

用CentOS服务器自己搭建部署个Discuz论坛网站,网站搭建教程

Linux系统CentOS服务器使用堡塔搭建论坛网站全套教程。服务器大本营&#xff0c;技术文章内容集合站发车啦&#xff01; 操作系统&#xff1a;Centos 7.6 网站程序&#xff1a;Discuz-X3.4 前言 首先&#xff0c;搭建一个网站需要准备&#xff1a;服务器、域名、网站程序。 …

php使用tcpdf,通过html生成的pdf文件,合同章(图片)错位?需要怎么解决

php使用tcpdf&#xff0c;通过html生成的pdf文件&#xff0c;合同章有错位&#xff1f;需要怎么解决&#xff1f; 1、html下的排版正确&#xff0c;如图&#xff1a; 2、html代码&#xff0c;如图 3、生成pdf后的文件&#xff0c;如图 $pdf->Image()&#xff0c;计算一下x、…

如何利用工时表来帮助项目管理做得更完善?

项目管理是一项复杂的任务&#xff0c;需要协调各种资源以确保项目按时交付。其中一个关键方面是管理各个员工工时。工时表软件是一种可以帮助企业记录各个员工工作时效的工具&#xff0c;而且还可以帮助项目管理者记录和跟踪项目成员的时间。那么如何利用工时表来帮助项目管理…

贝叶斯学习(Bayesian Learning)基础篇

Bayesian Learning 前言Motivation and IntroductionThink about Spam Filtering.先验概率后验概率似然度边际概率 Basic assumptionRelevancePractical diculties Bayes TheoremProbability: random eventsBayesian Learning Maximum A Posteriori HypothesisBayes Optimal Cl…

Java核心技术 卷1-总结-9

Java核心技术 卷1-总结-9 使用异常机制的技巧为什么要使用泛型程序设计定义简单泛型类泛型方法类型变量的限定 泛型类型的继承规则 使用异常机制的技巧 1.异常处理不能代替简单的测试。 使用异常的基本规则是&#xff1a;只在异常情况下使用异常机制。 2.不要过分地细化异常。…

人机交互有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是几个人机交互领域的SCI期刊推荐&#xff1a; ACM Transactions on Computer-Human Interaction (ACM TOCHI)&#xff1a; 由ACM&#xff08;Association for Computing Machinery&#xff09;出版的人机交互领域的顶级期刊之一&#xff0c;发表关于计算机和人之间相互作…

简单聊下HBase

大家好&#xff0c;我是易安&#xff01; Google发表了三篇论文&#xff0c;即GFS、MapReduce和BigTable&#xff0c;被誉为“三驾马车”&#xff0c;开启了大数据时代。今天我们来聊一下BigTable对应的NoSQL系统HBase&#xff0c;看看它是如何处理海量数据的。 在计算机数据存…

客户体验的重要性和企业发展的紧密联系

近年来&#xff0c;随着企业数字化转型的加速&#xff0c;客户服务的意义越来越被人们所重视。客户服务的质量不仅直接影响到客户满意度和忠诚度&#xff0c;而且会间接影响到企业的品牌口碑和市场竞争力。然而&#xff0c;目前市面上的很多企业帮助中心搭建平台&#xff0c;可…

Point cloud tools for Matlab(点云学习工具)

Point cloud tools for Matlab (tuwien.ac.at)https://www.geo.tuwien.ac.at/downloads/pg/pctools/pctools.html#PointCloud_class 下载&#xff1a;Download Matlab Code 添加路径 addpath(genpath(D:\MyMatlabCode\pointCloudTools)); pc pointCloud(Lion.xyz); pc.plot…

redis入门必会知识

Redis基础知识目录 5、sortedSet 文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一、redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务 ! 是一个开源的使用ANSI C语言编写…

Python 查看数据常用函数

Python 查看数据常用函数&#xff08;以 iris 数据集为例&#xff09; 1、查看前后几行数据&#xff1a;head 和 tail2、查看数据基本信息&#xff1a;info3、查看数据统计信息&#xff1a;describe 查看数据可以用很多函数&#xff0c;这里就挑选几个最常用的进行简单展示&…

除了学历,你更需要有能力

遥想当年&#xff0c;家里培养出一个大学生&#xff0c;是多荣耀的事&#xff01;可现今却处于一个比较尴尬的状态。 为什么大学生贬值得这么厉害&#xff1f;其实大学生之所以会不值钱不外乎三大原因&#xff1a;量大、与企业需求不匹配、质量差。 高校扩招下&#xff0c;大…

分布式系统反向代理设计与正向代理

反向代理与正向代理分析 代理服务器&#xff1a;位于发起请求的客户端与原始服务器端之间的一台跳板服务器&#xff0c;代理服务器分为正向代理服务器和反向代理服务器 正向代理 &#xff1a;代理客户端&#xff0c;隐藏了真实的请求客户端&#xff0c;服务端不知道真实的客户…

数据库系统概论--第五章课后习题

1.什么是数据库的完整性&#xff1f; 答&#xff1a;数据库的完整性是指数据的正确性和相容性。 2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系&#xff1f; 答&#xff1a; 数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存…

TortoiseSVN使用-授权访问

文章目录 3.4.6 授权访问 3.4.6 授权访问 总结&#xff1a; 如果是匿名访问&#xff08;就是不用输入用户名密码的访问方式&#xff09;&#xff0c;请只开启anon-access write如果授权访问&#xff0c;请先设置anon-access none&#xff0c;然后打开3个&#xff1a;auth-a…