hj24.life

一次P0事故引起的业务思考

背景是前几天的一次 P0 事故,我们当做数据库用的 redis 满了,触发了配置的 LRU 逐出策略,逐出了 20min 的 key,导致大概有 2w 用户当天的学习数据丢失,在处理过程中有很多值得总结的点,于是写下这篇博客。

Hugo使用指北

从 hexo 迁移到了 hugo,从安装到部署,记录一下使用流程。

从源码看flask是如何保证线程安全的

之前粗略的看过flask的文档,知道了它是线程安全的,大概是通过维护了一个以线程ID (在 Greenlet 可用的情况下优先使用 Greenlet 的 ID,因此协程也是一样的)为键的字典,里面放了分配给这个线程的资源来做到线程隔离,以此实现线程安全的目的。

写这篇博客是因为之前有个同事问我他写了个全局变量,在flask里是线程安全的吗? 当时没过脑子,直接回答了是,现在想想…应该是把他坑了

为了彻底弄明白这个问题,我搜了很多知乎,stackoverflow,reddit的问答,还有一些博客,也看了一遍相关的源码,最后写下这篇博客,做个记录。

Gitlab CI CD指北

之前在公司倒腾过基于Gitlab的CI/CD,现在重新记录一遍流程,做个备忘。

一个典型的流程是这样的:

提交代码触发CI pipeline -> 安装依赖、编译、自动化测试 -> fix bug -> 回到上一步 -> Review代码 -> 合并到发布分支 -> 触发CD -> 部署代码、发布

基本上更复杂一些的流程都是在这个基础上增改了,下面来走一遍这个流程。

将Python项目打包成Docker镜像

之前写了一篇 Dockerfile编写指南,不过没有涉及到部署项目这种相对复杂的操作,最近写毕设需要把项目打包成docker镜像,部署在服务器上,因此写下这篇博客,对上面那篇做一个补充引申。

一个将Python项目打包成docker镜像的基本流程如下:

编写好Dockerfile上传至Github/Gitlab -> git拉取代码到服务器 -> build镜像 -> docker run配置端口映射 -> 设置服务器安全组

Dockerfile编写指北

刚开始接触docker时大家基本都是通过`docker pull`命令来拉取镜像,在此基础上`docker exec/run`这些命令,进入容器做一些配置上的修改以此来构建一个容器,而Dockerfile就是一个一劳永益的构建镜像的方法,通过编写Dockerfile来定制自己的镜像。

说白了,就是类似于Python项目的requirements.txt文件,你可以在里面写上自己需要的依赖包,然后安装构建自己项目的依赖:

requirements.txt => Dockerfile pip install => docker build

这篇博客会以构建一个简单的Postgres镜像为例,讲一讲用Dockerfile来定制自己的镜像的过程。