给自己一些时间

70 阅读11分钟

工作现状

在就职的公司。平日还是负责开发,单独负责的模块出现过好几次的问题。

第一次: 问题:之前遗留下来的积分业务一直都是我本人进行开发,所有的业务流程处理本质上来说我都应该是最熟悉的才对,但是很多时候别人反馈我都是去看代码了解之前的逻辑。

解决:所有的业务代码在去开发之前,都应该先通过其他工具绘制对应的流程图、业务图、数据流图等方式去剖析业务,清楚之后再去开发代码。

第二次:

问题:最开始茅酒积分的业务是依赖于发票识别的AI能力,如发票识别有误就会导致业务不能正常开展,之前很多时候都需要人工通过接口的方式来手动处理,时间长了之后需要处理的就非常多,所以不能完全依赖于AI能力,针对AI没有完全识别出来的字段,需要进入人工审核,人工根据发票图片去填充字段后,进行审核,审核通过的也会进行一些规则校验比对,比对成功之后会对积分账户累计积分。在进行这次改造开发时,因为在发票上传时需要调用多个三方能力,导致接口响应慢,用户可以重新上传,因为开发时只在上传发票时校验有没有审核中的数据,之后就导致了一笔订单有多个审核中的记录,最后存量了非常多的待审核记录,增加了人工审核的成本和工作量。

解决:因为上传发票涉及三方接口调用,响应过慢时前一次上传校验通过之后,后一次上传在前一次还没有入库的时候也校验通过了,最后导致的有两条同样订单的审核中的记录。在上传发票时校验如果有审核中的记录就不让上传,同时在最后入库的时候也做一次校验,记录入库肯定是前后进行,针对多并发场景,在最后入库的时候去做去重的校验逻辑可以保证不会出现重复记录。

第三次:因为茅酒积分的业务需要扩展其他渠道,对接线上消费场景也可以参与活动。原先对接的企业是一码付商家,从业务中台获取,业务中台没有线上的商家,针对该需求需要重新对接企业中心获取企业信息。在对接过程中在测试环境发现的一个问题是:企业的信息可能为空,包括行业、社会信用代码、区域等信息都可能为空。但是当时只考虑到新增企业为空的话,可以通过企业运营端去修改之后再参与活动就不会有问题,没有考虑到已经参与活动的企业信息如果为空,会导致什么后果。上线之后才发现出现的两个问题:(1)存量参与活动的企业,社会信用代码为空,会导致在积分发票比对的时候一定比对不上从而进入人工审核,导致大批量人工审核的数据。(2)存量已经参与活动的企业,在积分中心的行业和易信现存的行业比对不上,导致修改活动,或者已经绑定活动的企业,创建附加积分规则时加载不出来,因为存的行业和商家现在的行业不对不上。

解决:为了解决易信的已经参与活动的企业社会信用代码为空导致的大批量审核单,需要将易信的社会信用代码批量修改为正常的,从源头上阻止社会信用代码为空进入审核中的单子。但是处理的方式有问题:首先中台将所有的易信企业和中台一码付的企业数据的社会信用代码进行比对后,发现1800多家比对不上,我针对1800多家去优先筛选出已经配置积分规则的,但是没有发现这1800多家里面只有142家有积分规则,但实际有积分规则的有420多家,所有第一次没有全部处理完成。另外,针对待审核已经为空的审核中的单子,不直接处理数据库,应该在审核的时候为空的话去实时查询易信并更新审核记录来解决这个问题。

第四次: 问题:茅酒积分运营端有商家导出、积分列表导出功能,因为是依赖中台调用接口拿到数据、依赖第三方接口响应数据,导致导出时数据量过大中台拦截、或者接口响应过慢被nginx拦截等问题,导出功能一直不能正常使用;刚开始采用的方案是多线程调用对方接口,最后将结果合并之后返回给前端,但是一次请求过后还是会超过2分钟。

解决: 此时应该针对2分钟NGINX不能正常返回的这个点去优化,不可能修改NGINX的配置,那就不将问题暴露在前端。而是给前端提示已经在下载了,在后端处理之后,将同一个请求的结果处理成功之后进行缓存,之后访问就是秒级以内。其中涉及到多线程处理优化、访问结果异常后重试3次访问、超过3次异常后缓存异常结果、正常请求后将结果缓存、超时的异步处理控制等知识点,这个点需要好好的去学习。

第五次:

问题:茅酒积分业务中,积分列表、上传发票、累计积分的操作是在H5页面开发,将H5放到安卓APP上,经前端反馈部署最新的代码之后,还有很多请求是旧的代码请求,出现这个问题的时候很不可思议之前没有出现这种情况,最开始想到的是NGINX的问题,所以在某个早晨修改了NGINX,结果导致用户手机上所有界面出现白屏。导致了大批量的事故。

解决:之所以选择去修改NGINX,主要是因为前端同事看到有个地方NGINX的配置看起来像是nginx的缓存,缓存了js文件,并且缓存了30天,所以应该把js文件给去掉,在去掉之后就出现了大量白屏的事故。本质上这个问题不是NGINX配置导致的,而是原生APP上的缓存策略导致的问题,需要APP端去修复。

碎碎念思考

本质上来说,上面暴露的这些问题都还是由于自己缺少工作经历和经验的积累。

(1)在开发过程中没有借助工具绘图的习惯;

(2)只注重正向的思考,开发过程中没有设想过可能出现的并发 或者异常情况导致的问题;

(3)在出现问题时,通常只按照自己的思路去解决,想不到更加全面的解决方案,没有去链接自己掌握的知识点来解决问题;

(4)在出现局部的问题时,思考得非常局限,没有更加全局的意识以及对各种风险的把控能力;

(5)出现问题时,没有产品意识,只是站在研发的角度去看待和分析产生问题的原因,没有想清楚要让客户能正常使用产品,应该想办法去杜绝因为原因导致的问题,有没有其他更好的方式去实现让产品能够正常使用起来;

(6)在每次出现问题时,没有尽可能深刻的去总结原因,避免下次再犯错;

(7)对待问题的态度不够认真和严谨,每次出现问题总结了之后就放一边了,下次再开发设计的时候,没有预想可能由于自己的疏忽、遗漏导致上线之后可能还会出现问题。

从7月份到现在,自己一直处于茅酒积分的业务阴影里面,吃饭、睡觉、休息过程中,脑子里面都在想的积分业务,微信群里频繁的@、反馈问题、处理问题导致整个人在去处理问题的时候都非常的麻木,只聚焦于处理当下的问题,没有考虑到问题产生的实质原因,可能有接口、业务、产品、环境等各种原因。

其实现在想来,只要是出现用户频繁反馈问题就说明业务实现是有问题的,这时候就要想怎么去杜绝让别人来找我,从根本上把问题解决了。日常出现问题是很正常的,我们需要做的是出现问题了,想办法链接自己已有的工具、知识、方法从业务、产品、代码多角度去思考解决问题的方案,产品需要优化的就尽可能提出产品优化思路尽可能去说服别人,业务代码层面需要优化就尽可能的链接已有知识,去思考怎么能杜绝问题的发生或者不将问题暴露在客户面前。

最开始,在出现问题的时候自身是非常害怕的,心想怎么又出现问题了,在脑子里一团乱麻,后续都是定位到了问题的原因,但是解决问题的方式就还是停留在原来的层面,思维打不开,导致问题本应该很快定位并很快解决的,最后总是拖延到最后让客户反馈给上级,篓子捅大了。

在我开发积分业务这段时间,暴露出自己的很多缺陷和不足,所有开发过程、解决问题思路、业务对接都是停留在学生层面,说来惭愧,已经是工作三年的人了,但很多时候还是没有独当一面的能力。面对领导施压,心里咬牙切齿,但是没有足够说服别人的能力;遇到问题清楚的知道根本原因不在自己这里,但是又只能先顾着埋头解决问题。

在这段时间一直处于这几次的生产事故的阴影里面,开始不断怀疑我到底适不适合这一行,刚开始是因为兴趣,现在以及以后自己还能不能保持初心,甚至特别想要逃离现在工作的这个环境,脑子里面全是天马行空的想法,工作没有特别大的动力,一直困顿于工作带给我的意义、我到底该追求些什么、生命的意义是什么、为什么人一定要工作,开始不断怀疑自己,追问这些所谓至关重要的问题。静不下心来学习和总结这段时间的问题,导致这篇文章一直拖延到了现在。

未来规划

希望自己能够早日从之前线上的失误中走出来,早日给已经过去的事情画上句号,以便更好的重新出发。工作真的是一门学问,工作三年也只是一个入门者,时间真实过得挺快的,有时候甚至觉得自己还是一张白纸。专业的东西还有很多需要去学习,遇到问题脑袋一团乱麻只知道哭,问题解决了开始自暴自弃天马行空的觉得自己是不是不适合这一行。反观这些行为,最近有种体会就是人性真的挺复杂的,不清楚从什么时候起我成了一个悲观主义者,遇到问题开始想要逃避,有害怕困难的心理,在外人看来,乐观、坚强明明一直都是我的代名词。

刚开始这份工作的时候,我信誓旦旦的说自己想成为一名架构师,到现在这个声音在心里回荡得已经非常微弱,是因为我清楚的知道了这条路的道路上还有很多困难。希望自己在未来可以克服畏难心理,踏踏实实的走好每一步,该学的学,多扩展自己的思维,每天都需要看书、看视频学习,至少就算工作一天心情很沮丧的情况下,自己还是有进步的。