⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 小姐姐味道 「小姐姐养的狗」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

起因

我对Linux非常的精通,尤其是脚本语言比如sed、awk、python等,用起来更是炉火纯青。我把它作为自己一个非常特立独行的技能,一个和其他普通程序员区别开来的技能。所以在我写脚本的时候,我都会自豪的抬高我的头,鼻孔朝天冥思精悍的code。

比如,看到别人一遍遍的翻文档安装elasticsearch这个软件,xjjdog就浑身难受,就写了脚本来加快这个过程。

mkdir /data
useradd es -d /data/es
chown -R es:es /data
cat > /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft noproc 65536
* hard noproc 65536
es soft memlock unlimited
es hard memlock unlimited
EOF
cat > /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.max_map_count = 262144
EOF
sysctl -p
chown -R es:es /opt/elasticsearch

这种脚本能够让我快速知晓软件安装的要点,不需要再读那些冗长的文档。像这样的事情,我总是在做,久而久之,搞的自己好像很闲一样。

这几天看到小王一直在那里捣鼓excel,这些数据他已经处理了好几天时间了。客户需要从其他平台迁移到我们的平台,导出了一堆烂七八糟的数据,大概有三四十MB的样子。不知道怎么回事,清洗数据这个活儿,就落在了小王身上。

文件很大,公司的电脑很烂。小王打开之后,电脑的风扇就呼呼直转。他每次都需要使用ctrl+f找到不太正常的数据,然后把它么拷贝到另外一个文件中。数据多工期紧,昨天晚上,小王就加班干到23点多,直到夜的尽头。

总监对此专门进行了表扬。

我坐在小王的旁边,自然不能对此坐视不理。常年养成的习惯,让我对低效的事情无法忍受,就如同一只常年奔跑的兔子忍受不了缓慢爬行的蜗牛。

只扫了一眼小王的需求,我就判定这个工期三天的任务,使用脚本只需要2个小时就能完成。我并不是乐于助人,实在是我非常的喜欢写这种脚本,还有脚本带来的这种速度差异的快感。

一个小时之后,我把调试好的python脚本交给小王。shell里一运行,正确的文件就出来了。好爽的感觉。

小王自然对我拜服,逢人便吹xjjdog如何牛x。

被总监知道了

这个事情不知怎么就被总监给知道了,我被叫进了宽大的办公室。看到总监一脸阴沉的脸,我知道事情不妙,但并不知道症结所在。我刚入职这家公司,应该没有在不经意间触碰了不该逾越的底线,我的心中充满了迷茫。

“听说你帮小王解决了个问题“ 。总监说, “以后少写这样的东西“。

“为什么?“ 我仿佛不太相信自己的耳朵, “脚本能显著的增加工作效率“。

“就知道你会有这样的疑问。“ 总监严肃的脸缓和了下来,和我讲了一个架构师的故事。

一个架构师的故事

小宋曾经是这家公司的架构师。有很多三脚猫的架构师并不写代码,所以小宋成为了能码字的稀缺架构师。他的一个绝活就是写脚本,就像我现在干的事情一样。

脚本能增加效率,这是我多年的经验。但效率这两个字本身,就根本无法衡量。所以效率这两个字,无法被量化。即使你把工期从3天缩减到2个小时,那也不见得你的效率高,因为这只是零散的琐事中的一个小插曲,你省下的时间还是去摸鱼。你的这些效率,打破了正常的研发周期,也断送了想要拼搏的同学的梦想。所以, 增加效率 ,这种有实际功效的做法并不能登上大雅之堂,只能在小圈子里乐呵一下,最后只会变成一个口号。

小宋的脚本第一次是用在一个线上事故的处理上。当时,程序有一个BUG,数据库和缓存中一部分数据错乱,产生了不一致的情况。由于缓存分布在20多台机器上,就不能使用把所有缓存给清掉的方式。

业务经理很着急,经过讨论之后,决定开发定时任务,扫描所有的缓存和数据库中所有的记录,然后修正数据。数据量很大,程序也需要验证,估计修复时间至少需要两天。

小宋说,没那么麻烦。你只需要把问题发生期间,所有的业务日志给我就可以了。

接下来的三个小时,小宋从日志里过滤出了问题发生过程中所有被更新过的key。略一思索,就使用脚本完成了对这一批key的缓存删除操作,非常完美的解决了问题。

这件事之后,小宋就经常被请去写一些脚本来帮助处理疑难问题。他来者不拒,乐此不疲。

一切像是向着良性的方向发展,直到一次线上的故障。

公司的几百台机器,都是在aws平台上的ec2服务。使用ec2提供的api,可以做很多事情。但ec2的命令实在是太难以理解,所以小宋做了封装。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html

使用这个脚本,可以对部分、或者所有的机器,进行批量管理(比如加个分组,开个权限等),就不用登陆到后台做一些管理工作。每当小宋看到黑屏幕上流淌的字符,他就想,这就是效率的魅力。

脚本非常好用,于是得到了分发。有一个运维拿到了这个脚本,鬼使神差的想要在线上验证一把。

他向所有的机器发送了关闭命令。

公司立马就炸了锅,扯皮的事是难免的。但最后的矛头指向了小宋。

脚本是他写的,但他首先是一个架构师。一个架构师,可以不写代码,可以不出成绩,但必须要有风险意识。

可这些命令,并不是我提供的。这是aws平台提供的东西,我对此什么都没有做。去测试这些命令,和用不用这个脚本没有关系。小宋争辩。

但命令确实是通过这个脚本发送出去的,也确实造成了后果。背后那些千回百转的曲折关系,没人会去研究,也没人会关心。那些平常享受小宋脚本的同学,此时也是默不作声,因为这种责任问题,如同效率问题一样,都是虚张声势,并没有明确的结果。

这种事情,小宋也是体验过的。比如提供了redis脚本,有人就喜欢运行FLUSHALL命令;提供了docker命令,有人就喜欢调用docker purge去做清理。这根本控制不住。

他认为,这是使用者的水平问题,而不是他的脚本问题。与总监吵了几架之后,小宋最后一气之下,愤而离职。

他直接删掉了这家公司所有人的好友,消失了。

总监的告诫

“所以,我是对你好,才会和你提这样的要求。比起风险来,这点效率带来的提升,真的是微不足道。 讲到这里,总监意味深长的看着我。”我现在就是及时的制止你的行为,免的步小宋的后尘“。

我点点头,这个道理我懂。之前有家公司,就因为觉得Linux的学习成本大,命令危险,就选择了Window系统做服务器。宁可难受、付钱买授权、当2B,也不敢越雷池一步。拿着风险两个字挂在嘴边,这些道理都是一样的。

我突然觉得,这么多年我的信仰就要崩溃了。花了那么大的力气,把命令行学精,到最后落到个学无所用,真是悲哀。

“总监,不好了。 ,正在我想要表达些什么的时候,有个小伙子闯了进来, “线上有人使用ansible练手,把根目录的权限全部改成000了!“。

我的脑子里立马出现了这样的命令,这次锅是linus torvalds的了。

chmod -R 000 /

谁知道总监笑了。“你刚来,不了解这里的情况。这个月已经发生好几次这样的事了。是时候换安全可靠的Windows了,我认识采购的人。”

我微笑着点头,不置可否,但虚心受教。

最后

我灰溜溜回到自己的工位,长叹一声,删光了公司所有的人。

今天就提交辞呈吧,毕竟,公司是找不到linus torvalds的,但能找到我。毕竟,ansible这个工具,是我前几天刚给推荐的。

所以,如果架构师是你,你会留下什么脚本呢?

文章目录
  1. 1. 起因
  2. 2. 被总监知道了
  3. 3. 一个架构师的故事
  4. 4. 总监的告诫
  5. 5. 最后