Rust 所有权模型与 链路追踪 的思考
Rust 所有权模型与 链路追踪 的思考 最近在给一个 Rust 写的后端服务加链路追踪,选型没什么好纠结的,tracing + opentelemetry 这一套基本就是标配。本来以为照着文档抄抄配置半天就能完事,结果被 span 的各种"不生效"折腾了两天。折腾完回头看,突然发现这事儿跟 Rust 的所有权模型其实是一回事,想明白这一点之后,之前那些别扭的地方就都顺了,记一下。 一切都要从那个...
阅读更多Rust 所有权模型与 链路追踪 的思考 最近在给一个 Rust 写的后端服务加链路追踪,选型没什么好纠结的,tracing + opentelemetry 这一套基本就是标配。本来以为照着文档抄抄配置半天就能完事,结果被 span 的各种"不生效"折腾了两天。折腾完回头看,突然发现这事儿跟 Rust 的所有权模型其实是一回事,想明白这一点之后,之前那些别扭的地方就都顺了,记一下。 一切都要从那个...
阅读更多Git 工作流中的 分布式锁 最佳实践
阅读更多从零实现一个简易的蓝绿部署 前几天半夜给服务发新版本,systemctl restart 敲下去的瞬间,监控上直接一条 502,紧接着群里就有人问“网站是不是挂了”。其实就断了十来秒,但这种事发生一次就够糟心的了。之前一直觉得蓝绿部署是 K8s 那些大厂玩具,跟我这台 2核4G 的小机器没什么关系,后来查了一下才发现,这玩意儿的核心思路简单得离谱:跑两套一模一样的环境,一套对外服务,另一套用来发新...
阅读更多深入理解 Linux 文件上传 的工作机制 前几天同事跟我吐槽,说往测试服务器传个 800 多 MB 的日志包,传到一半就断了,页面报 413。我第一反应是去改 PHP 的 uploadmaxfilesize,改完没效果,又去翻 nginx 的配置,才发现 clientmaxbodysize 压根没设,这玩意儿默认只有 1M,白折腾了快一个钟头。趁着这次排查,干脆把一个文件从浏览器走到磁盘的完整链...
阅读更多Go 语言 服务发现 实战:从原理到落地 问题是怎么来的 前段时间把一个 Go 单体服务拆成了三四个小服务,拆的时候觉得挺爽,结果一部署就遇到个尴尬事:订单服务要调用用户服务,地址写啥?写死在配置文件里,实例只有一个的时候还行,后来用户服务扩到了三个实例,机器还时不时迁移,每次变动都得去改一遍配置再重启,烦得要命。 一开始想偷懒用 nginx upstream 转一下,但加减节点还是要手动改配置 ...
阅读更多Git 工作流中的 熔断 最佳实践 上周五下午四点多,一个 merge 把主干的单测干红了,但因为走的是 merge queue 排队合并,等发现的时候后面已经叠了七八个 PR,谁也说不清是从哪一单开始坏的。最后俩人对着 CI 日志倒着翻了快一个小时才定位到,回滚完各回各家。事后复盘我就一直在想,服务治理里有熔断这玩意儿,Git 工作流里凭什么只能靠人吼?主干一旦确认坏了,应该先把合入通道掐了,止...
阅读更多正则表达式进阶:文件上传 匹配技巧
阅读更多配置中心:写给初学者的通俗
阅读更多用 Docker 搭建消息队列的完整流程 起因 前阵子手头有个小项目,A 服务生成任务,B 服务慢慢消化。一开始图省事直接 HTTP 互调,结果 B 那边一卡,A 跟着超时,重试逻辑写了一坨还是不痛快。索性上消息队列。本来打算直接在机器上装个 RabbitMQ,结果看了一眼安装文档,还得先装 Erlang,就这依赖关系,算了,还是别折腾宿主机了。 下面是实测可用的搭建方式,需要借助 docker,...
阅读更多从零实现一个简易的熔断
阅读更多