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

↓ 向下滚动

用 Docker 搭建鉴权体系的完整流程

用 Docker 搭建鉴权体系的完整流程 家里服务器上跑的自托管服务越来越多,Gitea、Vaultwarden、qBittorrent,之前每个都是各管各的账号密码,有两个甚至直接裸奔在公网上,每次想起这事心里都有点发毛。本来想图省事,在每个应用前面套一层 Nginx Basic Auth,用了一阵发现体验稀碎,qb 的本地客户端压根不认这套东西。后来研究了一圈,决定上 Authelia 配合 ...

阅读更多

PostgreSQL 索引与 缓存一致性 的正确姿势

PostgreSQL 索引与 缓存一致性 的正确姿势 前段时间接手了一个老接口,列表页查询要三四秒,用户天天催。打开看了一眼,表里才几十万行数据,按理说不该这么慢。EXPLAIN 一下,好家伙,Seq Scan,一条索引都没有,当初建表的人估计压根没想过这张表会长大。 索引不是加了就完事 先老老实实加索引: 注意一定要带 CONCURRENTLY,不然建索引期间表是锁着的,线上直接给你报一堆超时。...

阅读更多

PostgreSQL 索引与 服务发现 的正确姿势

PostgreSQL 索引与 服务发现 的正确姿势 前阵子要给内部系统搞个服务发现,同事劝我直接上 Consul,但我看了一眼要注册的服务,满打满算十来个实例,为了这点东西再维护一套 Consul 集群,属实有点杀鸡用牛刀了。项目本身就在 PostgreSQL 上跑,那干脆注册信息也塞 PG 里算了,一张表加两个接口的事儿。 然后就开始写表结构、写接口,测试一切正常,上线。结果跑了大概两周,发现服...

阅读更多

用 Docker 搭建分布式锁的完整流程

用 Docker 搭建分布式锁的完整流程 最近有个跑在两台机器上的定时任务出事了:两边同一时刻各执行了一遍,数据库里同一批订单被写了两份,日志一对时间戳,分毫不差。以前单机跑的时候,靠数据库唯一索引就能糊弄过去,现在上到两台就不行了,得正经上分布式锁。方案里 Redis 算最省事的,但我不想为了一把锁在服务器上装个 Redis,就用 Docker 起容器。动手前一搜,全是讲 Redlock 理论的...

阅读更多

Kubernetes 熔断 配置避坑指南

Kubernetes 熔断 配置避坑指南 前阵子我们一个订单服务半夜炸了,排查下来是下游库存服务的数据库慢查询,接口从 50ms 拖到 8 秒,订单服务的线程池被一点点堆满,最后整条链路陪着一起挂。事后复盘,大家一致觉得该上个熔断。Kubernetes 环境嘛,最顺手的方案就是 Istio 的 DestinationRule,配置看起来也就十几行,我寻思十分钟收工。 结果这十几行的配置前前后后折腾...

阅读更多

蓝绿部署:写给初学者的通俗解释

蓝绿部署:写给初学者的通俗解释 前两天帮朋友更新一个小网站,用的还是最原始的套路:ssh 上去,停服务,换新包,再启动,中间一分多钟用户全是 502。朋友问我有没有优雅点的办法,我说那你得了解一下蓝绿部署。这玩意儿概念简单到离谱,但真到用的时候,坑也不少…… 什么是蓝绿部署 说白了就一句话:准备两套一模一样的环境,一套叫蓝,一套叫绿。同一时刻只有一套对外服务,另一套闲着。要发新版本的时候,你把新代...

阅读更多

用 Docker 搭建熔断的完整流程

用 Docker 搭建熔断的完整流程 起因 前阵子家里服务器上的一个小组件莫名卡死,结果把上游服务的线程全占满了,连带整个站都刷不出来,排查半天才定位到是下游接口拖累的。这种一颗老鼠屎坏一锅粥的事情,理论上早就该有熔断来兜底,只是一直懒得折腾。这次趁着重搭环境,干脆用 Docker 把整套东西完整跑了一遍,顺便记录下来。 熔断的原理一句话就能说清:上游调下游的时候,如果一段时间内失败的比例太高,就...

阅读更多

Redis 缓存穿透、雪崩与 限流

Redis 缓存穿透、雪崩与 限流 前几天线上服务半夜报了一波警,爬起来看监控,发现数据库连接数直接被打满了,慢查询一大堆。奇怪的是 Redis 明明就架在那儿,怎么请求还全跑到数据库去了?翻了半天日志才搞明白,是有个接口被爬虫盯上了,拿一堆不存在的 id 在那儿疯狂请求,这就是典型的缓存穿透。趁着记忆还热乎,把这次踩的坑一起整理一下。 缓存穿透:查的数据根本不存在 正常流程大家都会写,先查缓存,...

阅读更多

链路追踪 的十种打开方式:工程实践笔记

链路追踪 的十种打开方式:工程实践笔记 前阵子线上一个下单接口偶发超时,用户把报错截图甩过来,我翻了半个多小时日志,订单服务一段、库存服务一段、支付服务一段,各写各的,中间是怎么串起来的全靠猜。最后定位到是库存服务里一条慢 SQL,但它跟下单接口隔了两层调用,日志里死活看不出关系。痛定思痛,花了一个多星期把 OpenTelemetry 接上了,顺手把踩过的坑记下来,凑成十种打开方式,权当工程笔记....

阅读更多

Rust 所有权模型与 链路追踪 的思考

Rust 所有权模型与 链路追踪 的思考 最近在给一个 Rust 写的后端服务加链路追踪,选型没什么好纠结的,tracing + opentelemetry 这一套基本就是标配。本来以为照着文档抄抄配置半天就能完事,结果被 span 的各种"不生效"折腾了两天。折腾完回头看,突然发现这事儿跟 Rust 的所有权模型其实是一回事,想明白这一点之后,之前那些别扭的地方就都顺了,记一下。 一切都要从那个...

阅读更多
未在播放