
后端
Similar_Fair
鹅厂全栈咸鱼一条
展开
-
Gunicorn高并发下最开始几秒的所有请求处理时间过长
背景线上服务采用的是Django + Gunicorn+K8s组成的服务。最近查看日志的时候,发现在发版时,有部分请求会在Pod开始提供服务的时候超时(超过三秒)但线下测试时又没有超过三秒的问题。怀疑过LB、K8s Nodeport,但都被一一排除。最终发现是Gunicorn Lazy-App导致的问题。什么是Lazy-App其实很简单,就是只有在第一个请求到达时,Worker才会对WSGI App进行初始化。因为Django框架很复杂,耗时也会相对多一些为什么Lazy-App方式会导致超时原创 2020-07-19 14:59:57 · 2088 阅读 · 0 评论 -
Gunicorn(gevent)+ Django HTTP请求处理过程全分析 —— Gunicorn篇【一】
背景前段时间排查了个内存泄露的故障,花了几天时间把Gunicorn + Django 从头到尾看了下。在排查问题时,网上普遍都是零碎的分析文章,需要自己多处拼接与查证,才可以勉强窥见全貌。于是萌生了写一篇按照实际流程来梳理的博客,为这次排查画上句号。由于涉及的东西较多,如Gunicorn、wsgi、Django、元类等都可单独成文,所以将以系列文章的方式来做记录。框架&依赖版本如下。Django 2.1.15Gunicorn 20.0.4Python3.x从启动命令开始大部分文章都原创 2020-06-06 23:07:25 · 1561 阅读 · 0 评论 -
Django2.1 2.2共用Response对象导致内存泄露问题
背景一个月前在线上发生了内存泄露。但很奇怪的是,那次发布只涉及几行代码,且都不涉及内存的主动分配。我们都知道,如果发生了内存泄露,那么一定会有内存分配这个动作。但当前的业务代码里并没有“内存分配”这个操作,所以问题八成是出在框架内部。所修改的代码如下:from django.urls import pathfrom django.http.response import HttpResponseALIVE_ECHO = HttpResponse('Alive')urlpatterns =原创 2020-05-17 02:51:21 · 523 阅读 · 0 评论 -
我为什么使用JWT
背景前段时间做数据平台的鉴权,想了很多种方案,但最后还是选择了JWT来进行身份验证与权限控制。期间考虑过传统的user/passwd -> session_id,也考虑了随机生成Token,后端再来维护一套权限控制逻辑,甚至打算使用类似kebos这种来实现安全通信,但对于数据平台这种业务,感觉权限控制这里这些方案都有点重量级了。内网环境相对是安全的,对内网进行混杂模式抓包会被安全的人抓...原创 2020-04-06 00:29:07 · 2643 阅读 · 5 评论 -
Django 无法从 request.POST 中获取URL传进来的参数
背景上周做项目的时候,有个Post Webhook回调不仅在Body里传了数据,同时URL里也传了参数。request.POST这个QueryDict打印出来的值为{},无法获取URL中的参数。原因分析这种问题,首先就是看代码。大概扫了下Request的代码,问题出在如下的位置: def _load_post_and_files(self): """Populate...原创 2020-03-22 19:09:57 · 2767 阅读 · 2 评论 -
记一次MySQL遇到的奇怪问题
背景新装MySQL 5.7, Ubuntu1804。数据库 root 账户已经设置了密码。使用本地root账户可免密码登录,即使指定-p也免密码;本地非root账户无法登录。Datagrip登录报The specified database user/password combination is rejected。排查过程首先以为是没配置user.Host字段,改成%后外部仍然无...原创 2020-03-21 01:29:14 · 3153 阅读 · 1 评论 -
Kafka For Python Producer.send() 会超时的原因分析
昨天在做方案调研,用python-kafka往 Kafka 里塞数据时发现了个很奇怪的问题:有的请求会阻塞60s后报错。但我们都知道python-kafka是可以完全异步的,他自己用local-thread实现了异步的发送功能。并且看官方Producer API返回的是一个Future,理应不会卡住,但Block却实实在在的发生了,让人很费解。排查问题胡乱百度因为我们用的是gunicorn...原创 2020-02-28 01:44:56 · 6859 阅读 · 0 评论 -
tar: Cannot utime: Operation not permitted
前几天看了下CICD的详情,发现详情里有个报错,虽然也能将代码部署到环境,但这个报错看着还是不太爽。查了查对应的资料,发现这个问题的根源就是,文件夹的Owner不是进行tar操作的用户。虽然chmod 777后你可以对文件进行操作,但对于utime这类函数,需要文件夹的用户为进行操作的人才可以进行操作。具体来源:https://superuser.com/questions/1219214...原创 2019-08-25 16:31:06 · 12975 阅读 · 0 评论 -
Docker容器内服务自启动
https://codeday.me/bug/20170630/36124.html只是启动,这篇文章就可以完美的解决问题了,但我现在需要run之后进入bash,就需要对他进行一些小小的修改。CMD /root/start.sh && bash改成这个就好了~...原创 2019-03-04 17:02:51 · 2689 阅读 · 1 评论 -
记录一下Laravel Storage::append的坑
我不太清楚其他版本laravel append的情况,但在laravel5.1 版本下Storage::append这个函数会往已经存在的文件里添加0X0A,也就是\n换行符。但如果这个文件不存在,则不会添加\n换行符。这给大文件分片上传合并带来了一些困扰,所以使用php自带的 file_put_contents 解决这个问题。这几天内会总结一下最近遇到的坑……没办法,工作量很饱和啊(...原创 2018-10-07 20:58:05 · 2213 阅读 · 1 评论 -
Laravel Homestead 使用npm run watch无法实现动态更新
想做个简单博客拿来练手,但发现在homestead中使用npm watch无法动态更新生成的文件,每次都得重新运行npm run watch才可以编译出最新更改后的文件。 以前在Linux下使用npm run watch没有这问题,所以推断是homestead的问题。 查看package.json,发现他不仅提供了watch,还提供了watch-poll。 从名字上看,poll就是通过轮询的...原创 2018-06-19 16:51:45 · 3355 阅读 · 0 评论 -
Laravel5.6 Homestead安装
好吧,我又开始折腾了。 其实这个也不能全怪我,我也是今天才知道鹅厂Linux不能入域,只能想办法在Windows下搭建开发环境了。 Homestead性能虽然有损失(我觉得损失不小,但在固态里也就无所谓了),但好歹能在Win下欢乐的运行 其实安装挺简单的,没什么难度,就是下载实在是慢…… 安装建议参考官网的教程: http://laravelacademy.org/post/867...原创 2018-06-18 16:05:57 · 307 阅读 · 0 评论 -
Laravel5.6 安装&Demo运行
照例的废话 诶,每次想学点新东西的时候总会有一堆事情来找你麻烦。在即将去鹅厂实习(半个月多一点)的这个时间点,实验室老师竟然又让我做嵌入式项目【吐血】 前几天交大作业,老师让用React写Web游戏,于是用了几个小时做了俩小游戏来应付差事(一份自己,一份给舍友),井字棋&点灯游戏 https://github.com/769484623/xo-game https://g...原创 2018-06-12 16:25:58 · 1410 阅读 · 0 评论