热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我这几年踩过的十个坑,每一条都是血泪教训

“阅读本文大概需要3分钟。”一、不记录程序部署在哪里“我:他妈的,这个程序明明一直在正确产生日志,可它到底运行在哪里?怎么我

阅读本文大概需要 3 分钟。

一、不记录程序部署在哪里

我:他妈的,这个程序明明一直在正确产生日志,可它到底运行在哪里?怎么我把所有服务器都翻遍了还是找不到他?

我维护了 60 多台服务器,理论上,我把他们分成了多个组,每个组部署不同功能的程序。可是有一天,当我要找某个程序的时候,我发现它不在它应该在的那个组中的任何一台服务器上面。但是它确实每小时又都在定时跑。那么,它到底在哪里跑?

部署程序时,一定要有一个地方记录每个程序部署在哪个服务器上。无论你是用记事本来记录,还是用各种软件来自动化记录。否则时间久了,程序多了以后,你很难再找到这个程序。

二、报警消息不写明这个报警来自谁

报警:MongoDB 查询失败!

那么问题来了,这是哪个程序报的警?

如果程序需要发送报警消息,一定要在报警信息中写清楚自己是哪个程序,这条警报从哪里发出来。

三、随意给出不重要的数据库删除权限

组员:老板,我刚刚不小心把 xx 表删了。我本来想删除我电脑上的测试环境,没注意到我在操作线上环境,不小心把线上环境的这个表给删了。

我一直认为,我们组的工程师都非常有职业道德,不会做出删库跑路的事情。而且这个环境保存的数据都是可以公开的,不怕被窃取。直到有一天一个下属来跟我说他不小心删了一个保存重要配置数据的表。于是我们花了很久来还原里面的爬虫配置。

收紧权限,对于保存爬虫数据的库而言,即使里面的数据可以随意被组员查看,也不能随意给出删除权限给组员。现在我们的爬虫库只有增加、查询、更新的权限,没有删除权限。

四、用文档来约束数据

我:怎么你重构以后,这个字段不见了?

用 MongoDB 的时候,不需要限制字段的类型,这固然可以加快开发,但是后期做 ETL 的时候,读数据库并对数据进行处理,此时依然会需要依赖字段的格式。

如果只是口头跟人约定好,某某集合里面的字段名分别叫做 aa,bb,cc,格式分别是 int,str,float……也许第一次开发的时候完全满足,但是后面重构的时候,可能某个字段的格式就变了。

MySQL 虽然死板,但是用数据库的机制来约束,可以保证 ETL 程序读到的数据,字段和格式始终如一。程序比人可靠。

五、大量报警

一天收到几千封报警邮件。于是我一封都没有去看。

在设计报警规则和阈值的时候,一定要确保只有真正需要你看的消息才报警。报警功能要做好,只报需要报的内容。否则,当你被报警淹没的时候,报了也白报。

六、阻塞式等待,一睡不醒

我:明明有数据,为什么就是读不出来呢?诶,重启一下就好了。

无论是 Redis 还是 Kafka,我都遇到过在阻塞式等待时,一开始由于没有数据,阻塞等待了十几个小时;然后数据来了,但程序却死在那里了,无法正确读出数据。必须重启才能恢复。

七、Kafka 的 group_id 乱起名字

今天调试这个问题,group_id 写成:xxx_dev;明天调试那个问题,group_id 写成:xxx_dev_2……很多天以后,上次调试某某问题,我用的是哪个 group_id 来着?

在给 Kafka 的 group_id 取名字的时候,名字需要有意义,并且易于分辨。否则后期 group_id 太多以后,你都不知道哪些是做什么用的了。

八、用 IP去链接服务

运维:这个接口的宿主机出现了内存泄露,马上就要爆炸了,我们需要重启一下。

我:不能重启啊,我这边好几个线上服务都强依赖它。

无论是实体服务器还是云服务器,机器都有可能需要临时关停,此时如果使用域名,那么你完全可以重新搭建一个新的接口或者服务,切换域名到新的机器上,再关停原来的服务。这样就不会影响依赖这个域名的其他服务。

九、用文件来记录配置信息

运维:你这个代理转发服务必须迁移到另外一台机器上。

我:可是我所有的爬虫都依赖这个转发服务啊,你给我三个小时,我去把所有爬虫里面的转发服务的地址都改成新的。

有时候,某些服务必须使用 IP,或者域名无法切换,那么,当你用文件来写配置的时候(例如 Scrapy 把代理转发服务的网址写到 settings.py 文件里面)。遇到修改配置,你就不得不去修改每一个程序,然后重新部署。

如果一个配置信息被多个地方使用,那么使用 Apollo 这种配置中心是更好的选择。统一管理所有配置,需要修改配置的时候,只需要在网页上修改一次,点一下发布,所有使用这个配置的程序自动更新。

十、觉得Docker 隔离环境绝对不会互相影响

我:麻烦帮忙重启一下 xx 服务器,上面有一个容器内存泄露,把宿主机卡死了。

Docker只是逻辑隔离,如果其中一个容器占用太大内存,会撑爆宿主机,导致同一个宿主机的其他容器全部挂掉。所以在部署的时候,一定要分清楚逻辑隔离的优势和弊端。必要的时候使用物理隔离。

推荐阅读

1

Alfred 有多强悍,我写了个一键上传图片的 workflow 来告诉你

2

中国最懒城市,这里的人不想赚钱,只想躺平

3

手把手教学,如何解决 Git 冲突?

4‍‍

用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

隐形字

个人公众号:进击的Coder

长按识别二维码关注

好文和朋友一起看~


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 在线教育平台的搭建及其优势
    在线教育平台的搭建对于教育发展来说是一次重大进步。未来在线教育市场前景广阔,但许多老师不知道如何入手。本文介绍了在线教育平台的搭建方法以及与传统教育相比的优势,包括时间、地点、空间的灵活性,改善教育不公平现象以及个性化教学的特点。在线教育平台的搭建将为学生提供更好的教育资源,解决教育不公平的问题。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • PHP函数实现分页含文本分页和数字分页【PHP】
    后端开发|php教程PHP,分页后端开发-php教程最近,在项目中要用到分页。分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装。影视网源码带充值系统,vscode配置根 ... [详细]
  • Oracle 和 mysql的9点区别【MySQL】
    数据库|mysql教程oracle,Oracle,money,mysql,coun数据库-mysql教程1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在o ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • 图片添加二维码水印教程
    本博客介绍一下用jdkawt实现图片加文字水印和图片水印的方法一、图片文字水印原来图片加上文字水印后图片二、图片加图片水印原来图片:水印图片:添加水印后的图片: ... [详细]
  • ORACLE空间管理实验5:块管理之ASSM下高水位的影响
    数据库|mysql教程ORACLE,空间,管理,实验,ASSM,下高,水位,影响,数据库-mysql教程易语言黑客软件源码,vscode左侧搜索,ubuntu怎么看上一页,ecs搭 ... [详细]
author-avatar
单纯只是一2502904797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有