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

news2024/11/19 21:21:24

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.coloradmin.cn/o/451057.html

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

相关文章

使用nginx做WSS转为WS

HTTPS 是一种加密文本的超链接,所以需要证书,证书可以 使用域名,在腾讯云等服务商申请 https 证书,证书有 收费的和免费的,免费的有使用期限。 利用域名申请证书后,一般会有4中证书文件, .csr…

QinQ技术与Portal技术

QinQ 802.1Q-in-802.1Q,是一种扩展VLAN标签技术。在城域网中,需要大量的VLAN来隔离区分不同的用户,但是原有的802.1Q只有12个比特,仅能标识4096个VLANQinQ即在802.1Q的基础上,再增加一层外层标签。使得可以标识4096*40…

Pytorch深度学习笔记(七)逻辑斯蒂回归

目录 1. logistic(逻辑斯蒂)函数 2.二分类任务(binary classification)损失函数 3.二分类任务(binary classification)最小批量损失函数 4.逻辑斯蒂回归代码实现 附:pytorch提供的数据集 推…

算法小课堂(六)回溯算法

目录 一、概述 1.1概念(树形结构) 1.2区别 1.3步骤 1.4回溯法模板 1.5应用 1.6回溯三部曲 二、组合问题 2.1组合 回溯算法 优化剪枝操作 2.2组合总和 2.3组合总和2 2.4组合总和3 2.5电话号码的字母组合 三、切割问题 3.1分割回文串 3.2…

简述Nginx中的负载均衡、正向代理、反向代理

前言 今天吃饭的时候看某站,然后就刷到了一个视频,感觉图片蛮好看的,讲的也适合入门,这里就跟大家分享一下 视频链接: https://www.bilibili.com/video/BV1vm4y1z7EB/?spm_id_from333.1007.tianma.4-3-13.click&…

实现栅格形式的进度条+奇特的渐变边框效果

介绍 效果图展示:(颜色自定义哦~js控制) 实现逻辑介绍: (1)主要实现方案就是使用css渐变背景实现的。(linear-gradient) (2)因为需要js控制颜色&#xff…

DDD领域驱动设计:支付系统中的应用一

文章目录 前言一、DDD意义1 为什么需要DDD2 DDD的价值 二、DDD设计流程1 战略设计2 战术设计 三、DDD代码落地四、参考文献总结 前言 DDD作为一种优秀的设计思想,为复杂业务治理带来了曙光。然而又因为DDD本身难以掌握,很容易造成DDD从理论到工程落地之…

V4L2系列 之 V4L2驱动框架(1)

目录 前言一、V4L2驱动框架概览1、应用层 -》中间层-》驱动层2、主要代码文件(Linux 4.19版本内核) 二、怎么写V4L2驱动1、如何写一个设备的驱动?2、Video设备主要结构体3、怎么写V4L2驱动 三、V4L2的调试工具1、v4l2-ctl2、dev_debug3、v4l2-compliance 前言 本篇文…

00后卷王的自述,我真有同事口中说的那么卷?

前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从14k涨到了20k,对于工作都还没几年的我来说,还是比较满意的,毕竟一些工作5、6年的可能还没我高。 我可能就是大家口中的卷王,感觉自己年轻&#xf…

一文读懂Redis哨兵

Redis哨兵(sentinel) 哨兵是什么? 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。 俗称,无人值守运维。 干什么? 主从监控&…

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon

Win10系统下VS2019编译Qt的Ribbon控件 -- SARibbon 一、源码下载二、源码编译三、封装成库四、Qt配库五、运行测试 原文链接:https://blog.csdn.net/m0_51204289/article/details/126431338 一、源码下载 【1】https://gitee.com/czyt1988/SARibbon/tree/master/s…

Python开发工具PyCharm v2023.1正式发布——推出全新的用户界面

JetBrains PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。 PyCharm v2023.1正式版下载 更新日志如下: 推出新的…

【UE】三步创建自动追踪自爆可造成伤害的敌人

效果 可以看到造成伤害时在右上角打印玩家当前的生命值 步骤 1. 首先拖入导航网格体边界体积 2. 首先复制一份“ThirdPersonCharacter”,命名为“ExplodingAI” 打开“ExplodingAI”,删除事件图表中所有节点 添加一个panw感应组件 在事件图表中添加如…

机器学习实战:Python基于PCA主成分分析进行降维分类(七)

文章目录 1 前言1.1 主成分分析的介绍1.2 主成分分析的应用[](https://chat.openai.com/ "openai") 2 Mushroom分类数据演示2.1 导入函数2.2 导入数据2.3 PCA可视化2.4 PCA散点图2.5 PCA散点图 3 讨论 1 前言 1.1 主成分分析的介绍 主成分分析(Principa…

Consistency Models

Consistency Models- 理解 问题定义研究动机本文中心论点 相关工作和进展Consistency Models创新点review扩散模型 Consistency Model-Definition一致性模型的定义一致性模型参数化一致性模型采样 Training Consistency Models via DistillationTraining Consistency Models in…

ChatGPT on Notes/Domino

大家好,才是真的好。 随着春节过去,小盆友也开始陆续到幼儿园报到,我们又回来和大家一起继续Notes/Domino传奇之旅。 去年年底ChatGPT横空出世,让大家震惊了一把。 可能有些老Notes/Domino人,还不知道ChatGPT是什么…

MySQL_第11章_数据处理之增删改

第11章_数据处理之增删改 讲师:尚硅谷 - 宋红康(江湖人称:康师傅) 官网: http://www.atguigu.com 1. 插入数据 1.1 实际问题 解决方式:使用 INSERT 语句向表中插入数据。 1.2 方式1:VA…

在OpenHarmony 开发者大会2023,听见百业同鸣

加强开源,助推中国科技强国战略,已经成为中国科技繁荣的必要条件,“十四五”规划中首次提到了“开源”两个字,并明确指出,支持数字技术开源社区等创新联合体的发展。 在中国发展开源,有着拓荒的色彩&#x…

Springsecurity笔记14-18章JWT+Spring Security+redis+mysql 实现认证【动力节点】

15 SpringSecurity 集成thymeleaf 此项目是在springsecurity-12-database-authorization-method 的基础上进行 复制springsecurity-12-database-authorization-method 并重命名为springsecurity-13-thymeleaf 15.1 添加thymeleaf依赖 | <groupId>org.springframewor…

西门子s7-300/400PLC-MMC密码解密

西门子s7-300/400-MMC密码解密 简介西门子加密工具及操作密码验证 简介 目前&#xff0c;市面上或网络上有很多针对s7-200&#xff0c;300&#xff0c;400&#xff0c;1200&#xff0c;1500的密码解密破解软件&#xff0c;但很多时候只能解数字或英文密码&#xff0c;对设置了…