【华为人】——一个维护人的“探案”之路

举报
技术火炬手 发表于 2018/08/06 16:52:52 2018/08/06
【摘要】 对我个人而言,触动最大的一点,在探案过程中,发现“元凶”固然重要,但如何解决它,用什么方法和态度去解决更重要。

我从小对数据逻辑感兴趣,喜欢看破案纪实、推理方面的书籍。我特别佩服福尔摩斯能够缜密地分析线索,顺藤摸瓜,迅速地找出真凶。我能够感同身受地理解那种成就感,希望自己也能像神探福尔摩斯一样,有敏锐的“嗅觉”,可以第一时间“抓住”凶手。毕业后,我进入华为,开启了我的“探案”之旅。

 

初级“探案小兵”上路

初到公司,来到硬件部底层软件组,对于使用最多的编程工具C语言,仪器学科出身的我只学过一点皮毛,看到同事们电脑桌面上满屏的代码时,我有点头晕。不久,当时的主管,也是我的思想导师,给了我一个快速提升的机会——去深圳出差支撑项目。我其实心里有点发虚,一个新人,专业又不对口,啥都不会,能帮上什么忙?主管鼓励我说,“只要肯干,做事细心,很快会上手。”于是我再无顾虑,踏上了前往深圳的路。


深圳团队当时正在开发华为下一代网络安全设备防火墙,我到深圳后,接手了一个模块的驱动开发任务。拿到相关资料后,便一边学C语言基础,一边学芯片手册,一边熟悉项目代码,一边熟悉工作环境。


工作后的第一个难关就这么来了,我的模块出现了问题:当负载达到一定量时,模块便会异常,设备重启。作为一个开发新人,一时间难以在大量代码中定位到问题,决定周五晚上留下来解决。然而,当时的我探案水平还比较初级,缺乏经验,掌握的定位手段只有在原有代码流程中增加日志或调试信息这种最基础的方法。每增加一次日志便需要重新进行一次程序编译、再加载到设备运行,这要花费40分钟左右。当我如此耗掉了几个40分钟,仍未发现问题所在时,我开始有点焦躁,但我告诉自己好好想想细节,“元凶”一定在代码中留下了蛛丝马迹。于是我静下心,比对多次生成的调试信息,再在代码中进行细致的筛查,终于发现资源循环使用的逻辑在多线程并行时存在问题。于是我马上修改了那段代码再重新编辑加载运行,果然问题排除了!虽然花了整晚时间,但我心里却爽快得很。我抓到了“元凶”,找到了真相,解决了问题,这晚睡觉都觉得比以前香。


这是我在工作中第一次感受到了那种切实的喜悦和成就感,它给了我一种无形的力量,促使我勇敢前行。经过二个月的努力,我所负责的模块成功交付,也输出了一些经验分享,得到业务主管的好评。我开始理解部门主管对我说的话,专业不对口并不是什么瓶颈,新手上路,胆大心细,抓住时机,迎难而上。事实证明,我是可以做到的!

 

成长:“案件重现”抓住“元凶”

世界唯一不变的就是变,人生也是如此。2015年底开始,我们推出的高中低端防火墙的归一化V5版本开始在全球商用上市。因之前版本开发中的综合表现还可以,我有幸被选中加入V5维护保障小组,任务是看护该版本在现网稳定上市。


我不会忘记,在法罗群岛的那次现网攻关。当时,法罗群岛(丹麦)的一台防火墙每天出现内存上涨。分析相关信息后,我们认为可能有内存泄漏。所谓的内存泄漏,可以简单地理解为不正常的内存占用,当设备内存占满时,设备将无法承载新建业务,手机用户将无法打开新的网页。但因为泄漏的是OS的内存,当时的版本没有有效的手段用于定位。如果是实验室出这类问题,并不是什么疑难问题,可以通过定位补丁、交叉验证,进入设备SHELL等手段快速定位。但这些实验室定位手段在现网根本没法使用,现网中甚至不让多次连续采集内存信息,因为这个设备承载着法罗群岛上所有人(约5万)手机上网业务,考虑的维度一定是业务优先。


这种情况下,我首先想到的是“案件重现”,复现法罗群岛的使用环境,统计故障表现因素,再一一排查,便可以找到“元凶”了。想到这我莫名地兴奋起来,但问题又来了,因为红线原因,法罗群岛的信息无法直接在实验室获取,只能放在欧洲GTAC处,不仅复现无法实现,即使是简单分析限制因素也很多,这个方法行不通了。


我召集开发、测试各领域的骨干多次讨论,仍然没有思路,会议室被无计可施的焦虑笼罩着,我独自走出会议室,开始沉思。只有设身处地寻找线索,真正深入“案发现场”,才有可能发现一丝线索。于是我安排了一个研发兄弟去法罗群岛现场。在办事处同事的帮助下,我们拿到了客户授权,现场的兄弟便进入客户机房天天蹲守,实时观察设备内存数据。经过一周观察,真的发现了线索,正常内存数据往往是没有变化规律的,而法罗群岛在某些时间点内存有突然增大的现象,这与实际用户的使用场景并不吻合,如此反常必然存在其他因素影响。经过对相关运行指标的变化情况进行对比发现,是由某项特殊业务对内存的频繁申请和释放,导致内存碎片化,这才引起了内存占用上涨。“终于还是抓到你了!”我心里多日来积压着的郁结一下子散去,倍感舒畅。


但我心里清楚,这次困难的根本是DFX(designed for X,非功能属性设计)可维护手段的缺失。一旦出现问题,除了人工收集和现场观察,没有其他途径获取和分析信息,这是很致命的。即使是福尔摩斯,没有案发环境和线索,也没办法破案。虽然我们在这次事件中排除万难,克服了技术手段缺失的艰苦条件,最终找到了问题所在,但手段是笨拙、低效的。作为维护人,不断自我升级、技术升级至关重要。
 

进阶:真相往往叫人意想不到

当然,光是抓到“元凶”还不够,还要解决和改进!刚好可以在下一个加固版本中将内存泄漏问题统一解决。


想象中的版本升级,就是换个大包重启一把的事情。现在看,这是我还未完全转变成维护人的眼光局限。按照计划,法罗群岛客户会在当地时间周一凌晨升级版本,我们出差的兄弟现场保障,国内研发远程保障,我是国内保障接口人,在实验室提前也做了镜像验证,这次升级准备充分,可谓是万无一失。但我还是留了个心,计划升级时间窗设定了4小时,放到往常,不需要这么长的时间。事后,我为自己当时的一丝谨慎感到庆幸。


设备按计划完成升级后,在业务测试过程中竟然真的碰到了问题!BGP(边界网关协议)路由无法建立,这就意味着法罗群岛上5万人的手机无法上网。如果不在升级时间窗内解决,就必须回退版本,会招受重大投诉。


当时开发代表召集大家紧急处理,看着维护人员毫无进展的情形也是焦躁不安。关键时刻公司“拼死相救”精神体现出来了,防火墙维护专家也参与到紧急攻关中。我再一次回忆整个升级过程,明明做了镜像验证,怎么现网还会出错,难道是验证本身就错了?时间一分一秒过去,此时的我压力很大,作为项目owner,必须在时间窗内把问题解决!我当机立断进行分工,一边与现场的兄弟对齐故障现象及信息,同时检查镜像验证环境的配置数据。


在现场,我们发现BFD(设备探测机制)状态竟然为“Down”,如果BFD检测不通,BGP路由也不可能通。这个问题在原版本中是没有的,说明应该是版本差异造成,于是我们通过在新版本中查找发现,BFD在客户的设备默认配置下被防火墙的安全策略阻断了。发现问题后,我们马上通过部署新的策略放行BFD探测报文进行解决,终于业务测试正常,回退版本的风险在时间窗内规避了,升级保障任务惊险地完成了。


真相往往叫人意想不到。经过调查,之所以在实验室镜像没有验证出来是因为当时未找到与现场一样的BFD的探测对端设备,当时测试时判断其风险不大,忽略了这个验证点。就是这个“风险不大”的验证点,险些让我们遭到重大投诉,让整个法罗群岛手机无法上网。


对我个人而言,触动最大的一点,在探案过程中,发现“元凶”固然重要,但如何解决它,用什么方法和态度去解决更重要。通过这次事件,让我开始从研发视角向客户视角转变,从纯技术思维,向端到端思维的转变。我深刻认识到公司价值观“以客户为中心”的意义,确实只有经历过这些事,才会真的感同身受。

 

一个探案者的终极目标

不久之后我就随着整个V5版本转到了维护,融入了整个维护LMT大家庭。我的工作,也从只看护V5版本,调整到安全网关全系列硬件产品的四线维护。

福尔摩斯探案不是为了任何利益,而是出于一种本能的正义和社会的使命。而维护人,很多时候也是肩负着一种责任感。对我来讲,一方面确实是部门给了我信任,也给我公正的一个评价和回报。另一方面,从客户角度也看到我们应该有的责任。


曾经有一次奥地利客户升级我们版本后发现CPU异常升高,一线发起ITR推动。我们坐在攻关室中封闭了两天,连续的通宵最终定位根因并解决问题。我在攻关室屏幕看到的是客户网络的KPI指标,每秒超200G的流量,意味着可能上千万的人在通过我们设备上网,这时我感受到的是一种责任,对我们的客户(运营商),以及对我们客户的客户(终端手机上网用户)的责任。我也曾经在大年三十晚上去浙江移动总部保障,看着全省同时有数千万用户在线,通过我们设备上网、抢红包。说实话在这个场合中,想的不再是春节,而是责任,是服务好千家万户的责任。所以我们更该严谨、一丝不苟的坚守在运维的岗位上,敢于当责,勇于挑战。


不过回到端到端的思维,我并不想看到这么多的疑难问题在现网发生,这对客户网络是极大风险。所以问题处理完毕后,还得思考以后如何避免这些问题。倒是希望我可以下岗休息了,那意味着我们的产品够稳定,客户用的很放心。这也是我们的终极目标。


本文为《华为人》版权所有,未经允许不得转载。如需转载请联系编辑部hwrb@huawei.com


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。