莘羽科技资讯网
首页 > 行业资讯 > 程序员探案之Python和Redis的第三者

程序员探案之Python和Redis的第三者

程序员探案之Python和Redis的第三者

作者 周小毛

责编 郭芮

在《程序员探案之被吃掉的数据》一文中,本探长英明神武地解决了嵌入式开发过程中串口数据“走丢”的问题。这不,最近探长又破了个棘手的案子。咳咳,探长要开始还原案件始终了,请耐心看下文。

直击案发现场

现场图片可见,在放入Redis数据时停顿了近25秒。这是什么情况?正常情况应该是下面这样的才对。

仔细理理现场

这是用Python和Redis实现的一个简单消息队列,通过Redis-PY的驱动用Rpush和Lpop命令来实现消息的入队和出队。还有一个特征是,这是一个新的嵌入式开发平台。

案情分析

一号疑犯Redis-Server

Redis-Server作为主要的服务提供商,自然嫌疑最大。

但排查完Redis-Server的各项配置,发现连接数、阻塞数等等指标也一切正常,没有任何直接证据指向它。

另外,同样的代码在另一个开发平台上远程连接案发现场平台的Redis-Server也很正常,这也旁证Redis-Server是清白的,暂时解除嫌疑。

二号疑犯Redis-py

Redis-py作为服务的中间商,承上启下,嫌疑也不小。Redis-py作为第三方库,查看版本,安装路径,都正常。检索Github的Issue和相关案例,也未发现类似“犯罪记录”。另外,它也有旁证:相同代码在其他环境一切正常,案发环境连接远程的Redis-Server也正常。

这样,Redis-py的嫌疑也解除了。

重大嫌疑人陆续被排除嫌疑,顿时又变得扑朔迷离,再次陷于僵局。

摸底排查,揪出元凶

静一静,重新捋一捋手头的所有线索,功夫不负有心人,我又发现了些蛛丝马迹。在Redis-py源码中,创建Socket连接时,发现Getaddrinfo调用。

打点定位,发现就是在这里阻塞耗时。这下,真凶水落石出。

但疑团还没有消散,为什么其他环境正常呢?这个是Socket内置模块,正常不会有这么明显的漏洞,那就是说......还有幕后大佬。

先了解一下Getaddrinfo的作用和机制:

Getaddrinfo 的作用是将主机名和服务名转化为套接字地址结构的,通常情况下会优化读取/etc/hosts中的内容,再通过DNS域名服务进行通信。

再通过一个简单的测试,具体看看:

到此,“元凶”现身,/etc/hosts文件内容缺失。

结案总结

案件成功告破当然少不了程序员探长的英明神武,不过也暴露出程序员的一些问题,自己的坑还得自己填。

记录几点,以供参考:

对于新开发环境,特别是嵌入式环境,系统镜像里一定要保证好相关配置文件的完整性(这里就是缺少/etc/hosts)。

/etc/nsswitch这个文件也会影响域名的解析,默认配置 hosts: files dns,这样会先读取/etc/hosts中的数据。

对于本地服务的能不用localhost就不用,用127.0.0.1更快。

声明:本文为作者投稿,版权归作者个人所有。





标签:

上一篇 目录 下一章

猜你喜欢

科技行业资讯 新闻摄影技巧全...
新闻摄影技巧全解析:捕捉时刻的艺术与技术 了解基本原则 新闻摄影作为一种特殊的艺术形式,其核心在于快速、准确地记录下新闻事件。因此,首要任务是掌握基本的摄...
科技行业资讯 展开儿时记忆家...
在一个温馨的下午,阳光透过窗户洒在了古老的厨房里,空气中弥漫着油脂和甜蜜的香气。这个时候,一种传统的小吃正在被重新唤醒,它就是那熟悉又亲切的糖水片。 家乡...
科技行业资讯 中国摄影大师中...
中国十大著名摄影师:他们的故事和作品 谁是中国最有影响力的摄影师? 在众多优秀的中国摄影师中,必定会有人留下深刻的印象。这些人不仅仅是技术高超的技艺家,更...
科技行业资讯 摄影协会-镜头...
镜头下的艺术:探索摄影协会的创作世界 在一个宁静的下午,阳光透过树梢斑驳地洒落在摄影协会的一角。这里,是一群热爱摄影、追求艺术的成员们共同聚集的地方。他们...

强力推荐