小Cの已经记不起来的博客

↓ 向下滚动

数据脱敏 的十种打开方式:工程实践笔记

数据脱敏 的十种打开方式:工程实践笔记 最近给一个数据导出工具改需求,原本只是把 MySQL 导 CSV 给运营看,后来安全来了一句“手机号身份证不能明文”,测试又说“日志里别打出 token”,产品再说“字段长度、格式不能变,不然我 Excel 一列全废”。结果改到最后,我发现数据脱敏根本不是写个 replace("") 就能交差。 下面是十种我在工程里实际碰到或者用过的打开方式。有些做法很糙,...

阅读更多

微服务架构下 任务调度 的设计与权衡

微服务架构下 任务调度 的设计与权衡 上周把订单服务里的几个定时任务从单体拆出来,什么超时关闭、账单生成、状态同步,全挪到微服务里。一开始我以为就是把 @Scheduled 复制过去,再给每个任务加个分布式锁就完事了。结果测试环境没复现,生产一上来就两个实例,账单任务被重复执行了三次,下游对账直接炸了。 下面是我后来实测比较稳的设计,不一定适合所有人,但如果你是那种小团队、微服务刚拆完、又不想为了...

阅读更多

Redis 缓存穿透、雪崩与 热更新

Redis 缓存穿透、雪崩与 热更新 最近线上一个商品详情接口又被值班电话吵醒,结果看了一眼监控,Redis 命中率掉到 60%。一开始以为是缓存雪崩,后来发现请求里混着一堆 goodsid=-1、goodsid=88888888 这种数据库里根本不存在的东西。Redis 没命中,应用老老实实去查 MySQL,查完还写不进去,因为压根没这行数据。然后 QPS 一高,DB 连接池先顶不住了。这类问题...

阅读更多

Git 工作流中的 蓝绿部署 最佳实践

Git 工作流中的 蓝绿部署 最佳实践 我一开始也以为,蓝绿部署是不是就在 Git 里搞两个分支,一个叫 blue,一个叫 green,然后切分支上线。结果真上手之后发现,这样特别容易把自己玩死。尤其是团队里有人随手合并、有人忘了打 tag、有人拿开发环境分支去发生产,那场面基本就是事故现场。 下面是我后来比较推荐的一种做法:Git 负责版本和构建入口,蓝绿负责运行期切换,二者别搅在一起。 先说清...

阅读更多

微服务架构下 服务发现 的设计与权衡

微服务架构下 服务发现 的设计与权衡 之前给一个老项目做单体拆微服务,一开始真没把“服务发现”当回事。不就是服务启动以后去注册中心登记一下,调用方查一下地址,然后发 HTTP / RPC 吗?结果线上第一次灰度就给了我一巴掌:某个服务刚启动,JVM 还没预热,依赖的缓存连接池也没建立,注册中心那边已经显示实例健康了,网关啪就把流量打过去,成功率一度难看得要命。 后来慢慢才明白,服务发现这件事,难点...

阅读更多

从零实现一个简易的限流

从零实现一个简易的限流 先吐槽一下为什么又要自己写 前几天线上服务被一个不知道哪里来的脚本疯狂刷接口,一开始想着简单点,直接 Nginx 上 limitreq 就完事了。结果配置一贴上去,发现它对单 IP 突发流量的控制还是有点粗暴,而且我们业务里真正想限的其实是 userid,不是 IP。IP 这东西吧,前面套了 CDN、代理、网关之后,很容易一锅端,误伤自己人。 那就只能自己搞个简易的限流了。...

阅读更多

机器学习入门:蓝绿部署 数据预处理

机器学习入门:蓝绿部署 数据预处理 最近想把一个 notebook 里的小分类模型搬到线上,结果本地验证集 AUC 都挺正常,服务一跑起来,准确率直接掉到个位数。第一眼还以为是模型文件有问题,后来抓了几条线上请求,发现是数据预处理这玩意儿根本没法和训练时保持一致。再后来服务越来越多,改一版预处理就得停一次服务,所以顺手把蓝绿部署也加上了。下面是我踩完坑之后比较顺的一套做法,可能不算标准答案,但至少...

阅读更多

正则表达式进阶:优雅停机 匹配技巧

正则表达式进阶:优雅停机 匹配技巧 最近在给一个 Python 服务补优雅停机逻辑,发现 SIGTERM 收进来以后,旧 worker 还在处理任务,日志里一堆 state=RUNNING,关起来特别不干净。先想用 if "RUNNING" in line 凑合一下,结果误杀了几条历史日志,然后就开始用正则匹配任务状态,发现这玩意儿是真的难搞啊,随便一个 task.RUNNING 就能匹配一大片,...

阅读更多

深入理解 Linux 分库分表 的工作机制

深入理解 Linux 分库分表 的工作机制 最近在 Linux 服务器上折腾订单表,单表快 8000 万行,查询开始变得有点肉,就顺着“分库分表”去查资料。查完之后发现一个挺尴尬的事实:Linux 本身根本不知道什么是库、什么是表。它只认识进程、文件描述符、TCP 连接、磁盘块、CPU 调度和网络栈。所谓 Linux 分库分表,其实是你在 Linux 上跑 MySQL、跑 Proxy、写应用代码,...

阅读更多

服务发现 的十种打开方式:工程实践笔记

服务发现 的十种打开方式:工程实践笔记 上周线上调用 502,排查到最后发现实例早就被缩掉了,调用方本地缓存还拿着旧地址往死胡同里打。看了一眼我们那个所谓的“服务注册中心”,其实就是一张 Redis 表,心跳超时之后也没有真正踢掉死实例。这玩意儿是真的坑,一开始都觉得有注册中心就万事大吉,结果网络分区、容器重启、发布缩容、健康检查误判,全都能把它打回原形。 下面这些是我实际用过、或者在故障里被迫读...

阅读更多
未在播放