用 Caddy 为本地开发服务自动配置 HTTPS 证书
用 Caddy 为本地开发服务自动配置 HTTPS 证书 起因 本地开发的时候,HTTP 其实大部分时候够用,但总有几个东西卡在 http://localhost 上不给面子。比如 Service Worker,比如 navigator.clipboard,比如某些需要 Secure Context 的 Web API,再比如后端设了 SameSite=None 的 Cookie,到了本地就直接被...
阅读更多用 Caddy 为本地开发服务自动配置 HTTPS 证书 起因 本地开发的时候,HTTP 其实大部分时候够用,但总有几个东西卡在 http://localhost 上不给面子。比如 Service Worker,比如 navigator.clipboard,比如某些需要 Secure Context 的 Web API,再比如后端设了 SameSite=None 的 Cookie,到了本地就直接被...
阅读更多MongoDB 分片键选择对读写分布和查询性能的影响 先把结论说在前面 分片键不是建集合时随手填的一个参数。它基本决定了三件事:写入会落到哪些分片、查询是只找一两个分片还是把整个集群扫一遍、后面 chunk 怎么分裂和迁移。选得好,集群加机器就能跟着扛;选得不好,数据是分散了,但热点、广播查询、jumbo chunk 一个都不会少。 我一开始也把分片键当成“能分就行”的东西,后来被监控图教育了。下...
阅读更多前后端分离项目中 Cookie 与 JWT 鉴权方案的差异 前几天把一个小后台从 JWT 换回了 Cookie Session,不是 JWT 不能用,而是这个项目一共就两个前端、一个后端,用户量也不大,我实在不想为了“无状态”三个字再维护一套 refresh token 和黑名单。换完之后顺手把两种方案又捋了一遍,发现网上很多对比文章写得像选边站,其实真到项目里,差别都在一些很具体的地方。 先说结...
阅读更多用 Jaeger 分析分布式系统中跨服务调用延迟 先说我遇到的情况 最近有个下单接口,P99 突然从 300ms 涨到 1.2s,日志里每个服务都说自己挺快,结果用户就是不买账。一开始只能靠猜:网关是不是慢了?订单服务是不是在等支付?支付服务是不是在等数据库?说实话,跨服务延迟这种事,光看日志真的容易吵架。后来把 Jaeger 拉起来跑了一遍,才看到时间到底耗在哪儿。 把 Jaeger 跑起来 测...
阅读更多Git 分支模型中处理长期特性分支合并冲突的实用方法 先承认一个事实:长期分支就是会冲突 只要一个特性分支活过两三周,就很难指望最后合并时干干净净。尤其是多人同时在改同一个模块,main 上还在修 bug、升依赖、改配置,特性分支这边也在动同一批文件,冲突基本是早晚的事。 我以前也试过“最后一次性合,谁冲突谁解决”,结果就是合并当天啥也干不了,光看 diff 就看到眼花。后来我自己的做法变了:不再...
阅读更多用 Feature Flag 控制后端接口灰度发布的实现方式 Feature Flag 这玩意儿听起来挺唬人,好像一上就能搞出什么高级发布体系。其实放到后端接口灰度这个场景里,核心就一句话:同一个接口,新旧两套逻辑都留着,请求进来的时候根据某个开关决定走哪套。别急着上规则引擎,先把这句话落地,后面就好办了。 先别把 Feature Flag 写成满地 if 我见过比较常见的做法是,在业务代码里到处...
阅读更多在 Linux 容器中运行 Java 应用时的内存参数设置经验 一开始我把容器限制和 JVM 堆设成了一样大 说实话,我一开始真没觉得这事儿有多复杂。容器限制 2G,Java 启动参数里加个 -Xmx2g,看起来天经地义,堆最大就是 2G,容器也是 2G,刚好对上。结果跑了一段时间,低峰期没事,一到有批量任务的时候容器就被干掉了,docker inspect 一看退出码 137,宿主机 dmesg...
阅读更多SQL 慢查询优化:从执行计划到索引覆盖的排查步骤 前几天一个后台列表接口突然变慢,前端转圈转到我以为接口挂了。结果把慢查询日志打开一看,是一条看着很普通的 select ... where userid = ? and status = ? order by createdat desc limit 20。表也不大,几十万行,但执行时间就是能跑到两秒多。后来 EXPLAIN 看了一眼,type=...
阅读更多用 gRPC 元数据实现请求链路中的租户识别 一开始想得太简单 前段时间给内部服务加多租户,入口是个 HTTP 网关,鉴权完把 X-Tenant-Id 放进 header,后面服务 A 调服务 B、B 调 C 都走 gRPC。我一开始的想法很朴素:客户端在 metadata 里塞个 x-tenant-id,服务端读出来不就完了?结果链路一长,发现事情没这么简单。A 能读到,B 读不到;单测能过,一...
阅读更多Vue 3 组合式 API 中响应式对象与 ref 的使用边界 先说结论:能用 ref 就别急着 reactive 我一开始写组合式 API 的时候,特别喜欢 reactive,原因很简单:不用到处写 .value,模板里直接 state.count,脚本里也直接 state.count++,看起来干净。后来被坑了几次才发现,这个“干净”是有代价的。 reactive 只适合对象和数组,基本类型它...
阅读更多