隔离期间解决的生产问题

大概在我集中隔离快结束的时候,运营发来一张照片,说我们最近好多解冻怎么都没有生效,一直在审核中。当时我还是比较诧异的,系统已经差不多一个多月没上线,居家办公的这个一个月线上也没什么问题,怎么会这么多解冻没生效呢? 当时第一反应是查下线上日志看看,一般这种情况大多是因为网络问题引起的。我的日志令牌一个放在了上海,一个放在了公司里,好不容易找到同事借了一个日志令牌,正准备查呢,想起来这个问题是不是上周五另外一个哥们上线导致的。虽然他最终没有上线完成,但是相关配置是上线了的。而我们的broker系统是有个已知bug的,消费者中有一个返回失败,那么其他的消费者也是收不到消息的。 赶忙联系了那哥们,确认了下,果然是配置上了,而相关代码没有上线。这就坑了,配置到broker系统的http接口相关代码没有上线,那肯定是404啊。又赶忙找运维确认了下broker系统日志,果然,调用到这个接口的地方都404了,导致后续通知解冻的接口收不到相关信息,从而解冻一直在审核中。 问题确认了,接下来就是修复的事情了。查了下broker系统暴露的接口,有让配置下线的功能,在测试环境验证了下。我擦,又是一个bug,这个只能让数据库这条记录失效,broker系统回调时候还是会调整这个配置上去的http接口。没办法,只能上物理删除,直接干掉这条记录了。 sql写完了走上线流程的时候有点犹豫,公司之前发生了点合规相关的问题,dba之前口头上和另外一个同事沟通过,说之后是不能上线物理删除的脚本的。但这次影响有点大,就想试试,谁知道dba竟然可以审批通过,于是也就没再关注,就让另外一哥们追踪去了。哪知道到了傍晚,同事联系我说,dba不执行这条删除的sql。当然真的是想骂娘,不执行你倒是别审批啊,浪费老子这么长时间。 想投机取巧取巧没成功,想上线的话现在也没这条件,居家办公期间公司一般不让上线。只好又重新研究了下broker的代码,发现调用接口的时候只要接口返回200就可以了。这就好办了,我们的接口都是通过nginx反向代理的,那么只需要将暂未上线的接口在nginx配置个200返回就ok了。这个首先和运维沟通了下,没啥大问题,终于顺利的上线了相关配置。 location /account/bpm/audit_result{ return 200 "OK"; } 晚上8点的时候找运营验证了下,问题算是修复成功了。 经验与教训 直面问题,正面解决,不要想着投机取巧,幻想用其他非技术手段解决 系统已知bug一定要尽快修复,否则不知道下次什么时候你就踩上了

2022-05-06 15:24 · 1 min · 江波·林沂

居家办公期间解决的一个过时的问题

上海疫情扩大之前,组里有个交易导出的需求,主要是会一次性导出几百万上千万的数据。之前都是直接生成csv格式的,这次运营突然不接受了,必须要excel的。这个开始还没怎么重视,不就是换种格式吗?也没什么大不了的,不就是两天时间的问题。 组里兄弟哼哧哼哧干了两天,晨会的时候抛出一个问题。我写的代码在本地电脑上都是可以正常的生成xlsx文件,但是到了测试环境就不行了。系统一直卡在那里,死死的就是不动。当时也没在意,让他不行就继续csv吧,大不了后续给运营搞一个本地的csv转excel的工具。反正windows下是正常的,也不是什么大问题。奈何领导不同意,没办法只能硬啃这个问题。 上去先看了下兄弟的改动,也没什么大坑。也都是复制粘贴了下以前的代码,然后加上自己的逻辑,至少看起来没啥大问题。远程了下测试环境,触发了下相关操作,果然如大兄弟所说的那样,本地测试毫无问题,测试环境是泥牛入海,操作完之后,啥日志也没有。 没有日志倒也没啥大问题,弄了个线程日志看看。非常奇怪的卡死在了POI对象初始化的时候。问题是这行代码在其他地方也是照常使用,理论上不会有啥问题。最终的堆栈卡在了类加载的地方,也就是loadClass的地方。这就更奇怪了,死锁也不应该在这个地方了,类加载线程无关啊。 问题就在这里卡住了。后面各种查资料,或者想法绕开POI,最终发现都是不行。既然不能取巧,就只能继续硬啃下去了。正好领导在第二天晨会上提了一句,是不是又是jboss类加载的问题。脑袋里突然想到,本地电脑可以,而测试环境不行,可能并不在于操作系统,而是本地环境用的jetty容器,而测试环境用的是jboss容器,两者最大的不同,就是jboss容器中多出了一大堆的默认jar包。 然后就开始翻jboss环境自带的jar与我们项目中打包的jar,发现poi强依赖的xmlbeans的包在jboss和我们项目的lib目录下同时存在,虽然版本一样,但是同时存在可能导致问题。于是就把项目中的xmlbeas在打包的时候给排除掉,重新上测试环境,问题圆满的解决了,猜测可能是两个jar同时加载导致死锁卡住。 整个问题解决过程耗时两天,这种类似问题会越来越少,毕竟后面这种自带jar的web容器已经越来越没有市场。耗时长的一个因素就是在排查jboss包自带包时有所遗漏,导致中间有很大一部分时间在错误地方排查。还有就是总想取巧,想这种老问题,总是想能避开就避开,不想深入研究。但解决问题的唯一办法还是直面应对,这才是最有效的方法。

2022-05-05 15:40 · 1 min · 江波·林沂

跟随solana官网文档制作一个简单的邮件系统

solana号称最快的区块链网络,是加密货币领域发展最快的生态系统。今天跟随着官网进行了一个简单的邮件系统开发。 官网的地址为:在 Solana 上创建全栈邮件 dApp . 我们的重点不在于翻译这篇文章。我下面我介绍我跟随这个网站进行开发过程中遇到的问题已经相应的思考。 我并没有根据官网亦步亦趋的一步步进行下去。我首先就把所有的代码都从github clone下来,并在本地运行。solana的这边文章对应的示例还是很严谨的。我根据项目README后端正常的进行了编译,打包,前段代码也开启了本地开发模式。 此时,我遇到了第一个问题。dAPP的后端代码打包成功了,但是我按照文章说明进行部署的时候,一直卡在部署环节,无法部署成功。我仔细的看了一遍又一遍的文章。同时,又找到了solana-cli的文档,尝试了几种可能的参数,依旧部署失败。 在官方文档平台解决不了这个问题之后,我启用了google搜索大法。还好,经过不懈努力,我在solana github中的一个2021年issue发现了解决办法。这是一个M1 Macbook的问题。arm64架构的它导致了solana不能开启JIT编译功能。最终我通过添加–no-bpf-jit参数在开启本地测试集群式不启用JIT功能最终解决了部署问题。 solana-test-validator --no-bpf-jit 本地集群问题解决之后。我的dAPP就可以在本地进行正常的调试了。这时候官网未涉及到的第二个影响调试体验的问题就来到了。文章中部署后端代码到本地集群后,会返回一个程序ID(program ID),也就是一个公钥地址(字符串类型)。而前端代码中,公钥对象却并不是从字符串类型构建,而是通过一个u8的数组进行构建。我也是细细的读了几次文章,仍旧是未找到怎么样将程序的公钥地址转换成一个u8数组。后续,我查看了solana web3.js的接口定义,发现公钥对象也可以从字符串构建。于是,替换成一下代码生成公钥对象,dAPP可以正常登录进去进入首页。 new PublicKey('公钥地址') 后续进行调试就比较容易了。唯一还可能混淆的地方就在于邮件系统的收件人。当你向给某个其他用户写信的时候,收件人并不是你登录进去关联的solana账户,而是通过邮件系统开户时,通过program id为你的solana账户生成的一个子账户。如果你在收件人填写的是对方的solana主账户地址,那么通过前端调试日志,你将会发现错误日志,日志会告诉你这个账户不存在一个期望的program Id. 跟着官网文章做完之后,又重新研究了一下后端的rust代码逻辑。文章中其实没怎么细说具体逻辑,也许是本身逻辑也比较简单。就这个示例而已,dAPP所处理的事情就是为solana主账户在solana网络中重新开启一个子账户。收信及发信行为其实就是将相应的邮件内容在序列化之后,直接存储在子账户的数据区域。在任何需要的时候,可根据账户ID轻松的获取出来。 随着而来的思考也就来了。我大略的翻了下官网的文章,solana的数据区域最大也就只能存储10Mb的数据。当某个账户的邮件内容超过了10Mb时,会发生什么呢?

2022-03-13 22:18 · 1 min · 江波·林沂

2022年2月20日“安吉雪景龙王山”徒步活动召集

龙王山顶千里冰封,万里雪飘 树枝纷纷穿上了晶莹剔透的"外衣 仿佛是被冰雪皇后施了魔法 晶莹的雾凇就把这里装扮成一个冰雪童话世界 ◆丨登顶七尖之一桐杭岗丨 桐杭岗,沿途风景如画,松涛阵阵。登顶远眺,会当凌绝顶,一览众山小。 ◆丨寻冰雪童话世界丨 龙王山本就怪石嶙峋,断崖奇峰遍布,在冰雪的点缀下,剔透晶莹,云海漂移,更似奇幻的童话世界。 雾凇这种奇特的气候现象在安吉龙王山自然保护区内经常出现。龙王山上树茂枝繁,冬日里在山上飘动的云雾,遇到寒冷的空气, 在树上凝结为霜花,便是“雾松”奇观。 每当雾淞出现的时候,整片的黄山松枝变成琼枝玉树,一片晶莹。清早,当晨光揭开雾霭的沙缦时,整个龙王山顶便是松柳银装,玉树临风,雪光岚气,云蒸霞蔚。人在其中,犹入仙境。 蓝天映着白雪雾凇,在阳光的照耀下,闪着银白色的光,晶莹剔透,放眼望去,群山峻岭冰封玉塑,银装素裹,纯净的森林在雪白色雾凇覆盖下格外动人。

2022-02-11 15:09 · 1 min · 江波·林沂

2022年2月19日第319期“湖州千亩梅园”徒步活动召集

报名链接 在浙北的一隅山间, 就藏着一座梅花生态博物馆! 千亩梅园嫁接了东方红梅、 绿萼梅等品种, 漫山遍野盛开的梅花倏然出现在眼前, 站在288米高的玻璃桥上 全方位赏1000亩梅花 那才叫一个美不胜收嘞~ 让我们一起, 去找寻这个季节最美的梅花! 每年的2-3月,就是原乡小镇一年一度的梅花节。瀛洲梅园的梅花开得正盛,一树树,一朵朵,绽放着初春的美好,梅园花影交错,或素雅疏淡,或热烈曲折,气韵灵动,别致雅趣,与山野相互映衬,美不胜收,吸引无数摄影师前往。 瀛洲梅园俗称千亩梅园,拥有近万棵青梅,萦绕在枝头的暗香如潮,绵延数十里,惹人驻足沉醉。 这里有沿山势建有长三角地区最长的梅林观光木栈道,总长约为4.8公里,并设有12座观梅亭,堪称为湖州的生态梅花博物馆,自在漫步细品姿态各异,颜色万千的梅花朵朵开。 穿上汉服赴原乡闹春赏梅之约,各地汉服同袍雅集,欢聚“西塞山梅花汉服节”,在粉墙黛瓦的花海中漫享古典时光。 聚焦非遗,经典传承。琳琅满目的非遗手工物品,香包、剪纸、糖画、竹编等,这回可是把各种“老古董”,全都给你搬来原乡咯~ 喜欢萌宠,是孩子的天性,给孩子一次撒欢的机会!摸摸小鹿柔软的毛毛,鼓励小朋友主动投食小奈良,与动物亲密接触,触发孩子的爱心,大人也可以在这里找到自己久违的童心。 5D酷炫的玻璃桥,全长有288米,全透明的玻璃设计,脚踩到哪,哪里就会裂开,在进行惊心动魄的挑战的同时,你还可以俯瞰远观香气袭人的梅花“雪海”,欣赏一场梦幻的视觉盛宴。 这里有亚洲规模最大、种类最多的,蝴蝶生态科普体验馆,可以了解蝴蝶的生活、习性、分布,参与蝴蝶标本的制作。 这里有可爱的复古小火车,1500米的轨道,7min的童话探险,迎着春风哐当哐当,坐着小火车转悠一圈就沦陷了。 除了上面这些,还有滑翔伞、ATV越野、童心童趣园、骑马、射箭、蹦蹦云乐园、粉色沙滩…

2022-02-11 14:49 · 1 min · 江波·林沂