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

↓ 向下滚动

Rust 所有权模型与 连接池 的思考

Rust 所有权模型与 连接池 的思考 最近在用 Rust 重写一个老项目,里面有个场景是要频繁读写数据库,自然就绕不开连接池这个东西。用的时候突然意识到,连接池这个概念在 Rust 里面变得特别有意思,跟我在 Go 或者 Java 里用连接池的心路历程完全不一样,索性写篇文章记录一下。 先说说所有权模型这件事 Rust 的所有权模型,说白了就三条规则:每个值都有一个所有者,同一时刻只能有一个所有...

阅读更多

Kubernetes 限流 配置避坑指南

Kubernetes 限流 配置避坑指南 起因:本来想防刷,结果把自己刷趴了 前阵子有个对外的接口被人拿脚本刷,半夜告警响个没完,寻思着在 Ingress 上配个 nginx.ingress.kubernetes.io/limit-rps 就完事了,阈值还特意设得挺宽裕。结果上线十来分钟,服务大面积 503,pod 接连重启,用户骂声一片。限流明明是用来保护服务的,怎么先把自家服务干趴了? 排查下...

阅读更多

深入理解 Linux 服务发现 的工作机制

深入理解 Linux 服务发现 的工作机制 前几天把家里一台吃灰的旧笔记本装了 Debian,打算当个小服务器用。装完系统配好 ssh,我在另一台机器上随手敲了个 ssh user@debian.local,居然直接就连上了。当时有点懵,因为我压根没配 DNS,/etc/hosts 里也没加过东西,这名字是哪来的?后来顺着查了一圈资料才发现,背后是 mDNS 和 DNS-SD 这两套协议在撑着,也...

阅读更多

用 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 把整套东西完整跑了一遍,顺便记录下来。 熔断的原理一句话就能说清:上游调下游的时候,如果一段时间内失败的比例太高,就...

阅读更多
未在播放