休假回来,这个班咋上的来着?
生活
发现旅游回来,饿超快。
学习和折腾
买了个京东AX1800Pro亚瑟
- 为啥:便宜。想着家里的路由器还是K2P和Newifi,好多好多年了,也该换换了。
- 没搞好:买来版本稍微有点高,是2242版本的,想要刷机必须联网开一个什么「A插件」,但据说联网会强制自动升级到更高版本,升级后就更没办法刷机了。我又不想拆机刷机……反正搞了一天没成功。
工作
整整被坑了一周,整整一周
- 一个奇葩的事儿:我们要给平台写模型服务。但是平台完全不知道会传给我们什么东西,只有IDL约定——哦,看上去是有IDL,其实IDL里面传的自定义Json。所以需要你先自己搞个服务出来,让平台给你打一个请求,你把它dump出来,然后把自己分析里面有哪些字段。
- 然后呢,我发现Python死活不能dump这个请求:用公司包了一层的库会直接抛异常,用thriftpy2里面的序列化也是不行,用pickle也会抛异常——所以这个IDL里面是有什么魔法啊!
- 无奈放弃Python,改用golang糊了个假服务,一切正常。
- 然后就回来研究,为啥前面两个地方会报错?发现是序列化/反序列化里面少了对Binary的支持,所以遇到Binary就挂。那好,就想办法加上这个支持,monkey patch一下。
- 然后上线,发现,线上报import错误,说找不到thrifypy2里面一个叫 u 的函数。由于我们的网络权限啥啥啥都被限制,所以用了一个非常慢非常慢但是合规的工具看了代码,哎,thriftpy2里面确实没有这个函数?看看版本,哦,0.5.0,本地是0.4.2……那就,降级。
- 然后发现,服务很奇怪。抄的老服务,服务里面为了加速,所以会多线程调用下游服务。同时为了加速,在启动的时候选择使用gevent+gunicorn的方式来启动,大概5小时后,「多线程」那里完全卡死,上游调用我的服务100%超时。又是一通oncall,发现去掉gevent就好了。
- 然后继续上线,这次docker镜像死活编译不过了。我是不升级会死星人,所以各种依赖的版本都写得比较高;但是有个依赖,它依赖另一个重要的组件,这个组件依赖了一个0.4.0版本的通讯库(大概是三年半之前的版本了,最新版本都到了2.6.2了),所以各种依赖冲突……无奈啊无奈,在启动脚本里面,写了个
pip install
…… - 然后就想着,啊,我还有个小工里面有个小bug。改了一行代码,编译,发现依赖报错——依赖方面明明啥都没动过。查依赖的错误又查了小半天。
- 哦对了,上面说服务是基于一个老服务改的。这个老服务呢,遵从组内一贯的风格:Python单文件,所有面条逻辑挤在一个1000多行的py文件内,没有任何注释;config分布在5处:远程配置平台、分出来了个
config.py
、Python单文件内、启动脚本会给py文件传args、启动脚本和py文件都会读环境变量,到底也不知道是谁把谁给覆盖了。每个请求过来,都会起一个新的线程池来处理调用下游的RPC。简直快把我看郁闷了。 - 各种被坑,很难受。不过还好,都解决了。
- 还好这玩意儿只有0.1QPS……
发表回复