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

↓ 向下滚动

Nginx 反向代理 灰度发布 配置详解

Nginx 反向代理 灰度发布 配置详解 最近公司项目要上灰度发布,本来想着找个现成的网关方案,什么 K8s + Istio 之类的,结果一算成本和复杂度,算了,咱们这小体量,Nginx 自己配一下就够了。折腾了两天,踩了几个坑,把实测可用的方案记录一下,免得下次又忘了。 什么是灰度发布 简单说就是新版本代码部署上去之后,不是一刀切把所有流量都切过去,而是先放一小部分用户(比如 5%)到新版本上,...

阅读更多

从零实现一个简易的优雅停机

从零实现一个简易的优雅停机 前段时间部署服务的时候遇到一个很烦的问题:每次发新版,kill 掉旧进程的瞬间,正在处理的请求直接被掐断了,客户端那边时不时收到连接被重置的报错。一开始还以为是网络问题,排查了半天才发现,就是停机的时候太粗暴了。所以这次干脆花点时间,自己动手实现一个简易的优雅停机,顺便把过程记录下来。 什么是优雅停机 简单说就是:进程收到退出信号后,不再接收新的请求,但是把手头正在处理...

阅读更多

React 项目中 日志采集 的设计取舍

React 项目中 日志采集 的设计取舍 起因是上个月线上出了个事儿,有个用户反馈说点提交按钮没反应,我让他打开控制台截图发过来,好家伙,一排红色的 Unhandled Rejection。可我自己这边怎么都复现不了,翻了半天代码才反应过来,那块逻辑在 try/catch 里把错误吞了,只打了个 console.error,而生产环境的 console 早就被构建脚本干掉了... 那一刻我才意识到...

阅读更多

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 理论的...

阅读更多
未在播放