总结一下做性能平台的过程

Author Avatar
Peipei Wong 5月 10, 2020
  • 在其它设备中阅读本文章

受康师傅委托,为大家写一个性能平台,上个Q一些基本的功能做好了,这个Q的目标是写一个api,将上一个Q写的基本功能自动化😂,称之为“调度”。

过程

  1. 有连接数据库的需求了,于是开始学习sequelizes,但是它太大了,比较着急,所以直接抓了一个现有的项目的数据库配置,模仿着写。虽然能够解决燃眉之急,但是最后下来还是稀里糊涂的,用的时候还是有很多迷惑点。所以一定要做好技术储备!
  2. 开始写查询了,真的好难🤯。没技术储备的缺点暴漏出来,本来写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,
  });

看上去似乎还可以

  1. 和康师傅讨论过,为什么现在硬件做的很好,但是软件却落后了,原因之一就是模块化。我门在processon上共同配合,我将自己的想的画出来,结果看上去只是很简单,似乎是只是其中的一小部分。康师傅更新了一下,我一看,吆,差别果然很大。能很明显的看出来,他将一个流程划分成几个模块,模块之间相互协作。我想在里面增加新功能,只需要改动模块内部即可。真的非常好!接下来,开始动手就比较明确了。
  2. 对于模块,我决定定义几个class,这样看起来似乎一一对应。写函数式编程写多了,oop只是一个外皮,内里还是函数式。函数式也没啥问题,就是函数多传参。将功能大致实现之后,所有的class都new一个挂到了global上。还是发现了一个别扭的地方。每一个执行任务对应一个监视器,这个时候,我不能全局只有一个监视器,而是一个任务一个监视器,很oop。
  3. 最后还是心理方面,这个工作是第一次做,内心非常忐忑,很怕。我没做过,写不出来怎么办,所以刚开始不太积极。其实整个过程都感觉有些煎熬(嗯,这个我周一需要寻求一下经验),尽管之前已经深入的想过了,但是还有一些点没想好,只能是做的时候,遇见再解决。还是要勇敢一些。

ps: 还有点要说的

  1. docker里面使用的路径不要以根路径开头,要以/home/用户名开头,不会担心有什么权限问题yu
  2. 前几天遇到表被锁的问题,导致后续所有读表全部pending,DBA小姐姐教了一招kill连接的操作
    select concat('kill ',id,';') from information_schema.processlist where db = '数据库名' and command <> 'Sleep';
    
    然后把结果复制,执行!
  3. 在服务器上执行rm -rf xxx,被服务器拒绝后,找运维小哥,得到的回复:咋,想删库跑路?😂