一年过去了,更新一篇作为年终总结。
背景是前几天的一次 P0 事故,我们当做数据库用的 redis 满了,触发了配置的 LRU 逐出策略,逐出了 20min 的 key,导致大概有 2w 用户当天的学习数据丢失,在处理过程中有很多值得总结的点,于是写下这篇博客。
从 hexo 迁移到了 hugo,从安装到部署,记录一下使用流程。
之前粗略的看过flask的文档,知道了它是线程安全的,大概是通过维护了一个以线程ID (在 Greenlet 可用的情况下优先使用 Greenlet 的 ID,因此协程也是一样的)为键的字典,里面放了分配给这个线程的资源来做到线程隔离,以此实现线程安全的目的。
写这篇博客是因为之前有个同事问我他写了个全局变量,在flask里是线程安全的吗? 当时没过脑子,直接回答了是,现在想想…应该是把他坑了
为了彻底弄明白这个问题,我搜了很多知乎,stackoverflow,reddit的问答,还有一些博客,也看了一遍相关的源码,最后写下这篇博客,做个记录。
之前在公司倒腾过基于Gitlab的CI/CD,现在重新记录一遍流程,做个备忘。
一个典型的流程是这样的:
提交代码触发CI pipeline -> 安装依赖、编译、自动化测试 -> fix bug -> 回到上一步 -> Review代码 -> 合并到发布分支 -> 触发CD -> 部署代码、发布
基本上更复杂一些的流程都是在这个基础上增改了,下面来走一遍这个流程。
之前写了一篇 Dockerfile编写指南,不过没有涉及到部署项目这种相对复杂的操作,最近写毕设需要把项目打包成docker镜像,部署在服务器上,因此写下这篇博客,对上面那篇做一个补充引申。
一个将Python项目打包成docker镜像的基本流程如下:
编写好Dockerfile上传至Github/Gitlab -> git拉取代码到服务器 -> build镜像 -> docker run配置端口映射 -> 设置服务器安全组