总结一下做性能平台的过程
受康师傅委托,为大家写一个性能平台,上个Q一些基本的功能做好了,这个Q的目标是写一个api,将上一个Q写的基本功能自动化😂,称之为“调度”。
过程
- 有连接数据库的需求了,于是开始学习sequelizes,但是它太大了,比较着急,所以直接抓了一个现有的项目的数据库配置,模仿着写。虽然能够解决燃眉之急,但是最后下来还是稀里糊涂的,用的时候还是有很多迷惑点。所以一定要做好技术储备!
- 开始写查询了,真的好难🤯。没技术储备的缺点暴漏出来,本来写sql就不太行,连API都不知道,于是开始求助stackoverflow,一个sql抠个好长时间。需求是查询一个任务的执行次数,失败次数。
const taskHistorys = await History.findAll({
where: { taskId: taskIds },
order: [['auto_update_time', 'DESC']],
attributes: [
'taskId',
['auto_update_time', 'updateTime'],
[sequelize.fn('COUNT', sequelize.col('*')), 'triggrCount'],
[sequelize.literal('SUM(exec_status=3)'), 'failCount'],
],
group: ['task_id'],
raw: true,
});
看上去似乎还可以
- 和康师傅讨论过,为什么现在硬件做的很好,但是软件却落后了,原因之一就是模块化。我门在processon上共同配合,我将自己的想的画出来,结果看上去只是很简单,似乎是只是其中的一小部分。康师傅更新了一下,我一看,吆,差别果然很大。能很明显的看出来,他将一个流程划分成几个模块,模块之间相互协作。我想在里面增加新功能,只需要改动模块内部即可。真的非常好!接下来,开始动手就比较明确了。
- 对于模块,我决定定义几个class,这样看起来似乎一一对应。写函数式编程写多了,oop只是一个外皮,内里还是函数式。函数式也没啥问题,就是函数多传参。将功能大致实现之后,所有的class都new一个挂到了global上。还是发现了一个别扭的地方。每一个执行任务对应一个监视器,这个时候,我不能全局只有一个监视器,而是一个任务一个监视器,很oop。
- 最后还是心理方面,这个工作是第一次做,内心非常忐忑,很怕。我没做过,写不出来怎么办,所以刚开始不太积极。其实整个过程都感觉有些煎熬(嗯,这个我周一需要寻求一下经验),尽管之前已经深入的想过了,但是还有一些点没想好,只能是做的时候,遇见再解决。还是要勇敢一些。
ps: 还有点要说的
- docker里面使用的路径不要以根路径开头,要以
/home/用户名
开头,不会担心有什么权限问题yu - 前几天遇到表被锁的问题,导致后续所有读表全部pending,DBA小姐姐教了一招kill连接的操作
然后把结果复制,执行!select concat('kill ',id,';') from information_schema.processlist where db = '数据库名' and command <> 'Sleep';
- 在服务器上执行
rm -rf xxx
,被服务器拒绝后,找运维小哥,得到的回复:咋,想删库跑路?😂