Ian Wang
[@yumosx]
Hi there, I'm Ian Wang (@yumosx). Gopher · OpenTelemetry CNCF Member · Open-source Addict.
Currently making observability simpler, faster, and more fun in Go.
博客文章
-
cs193p ios 学习笔记
2026-07-01
学到和 swift一些语法, - 最后一个函数参数是 lambda 表达式且没有参数的时候的时候可以直接写成 VStack{} - some View 标识编译器自动推断,不需要手动指定类型 - @ViewBuilder 修饰的函数,返回值是 some View 类型,不需要手动指定类型 - @Vi...
-
APSchduler 库学习
2025-10-22
**在你当前的代码中使用 `AsyncIOScheduler` 时,默认情况下会等到上一个 `self.run()` 执行完毕之后,才会开启下一个 job**。 这正是 APScheduler 的 **interval trigger**(间隔触发器)的默认行为,具体由参数 `coalesce` 和...
-
redis 缓存设计方案
2025-10-02
在程序启动之前的时候把系统中高频访问的数据刷新到 redis 中去,比如商品列表信息,课程信息,当刷新完毕之后,将对外的api 端口打开 加载缓存的时候,我们可以在 go 中去嵌入 lua 脚本 对一些数据做清洗
-
Gopher Lua 编写
2025-10-02
package main
-
RBAC 权限控制系统设计
2025-10-02
role -> permission -> resource 经过这个链路去控制用户对应资源的访问权限,实现 RBAC 权限控制。 所以至少需要 5 张表:
-
GORM 高级篇
2025-10-01
type Plugin interface { Name() string Initialize(*DB) error }
-
如何给 commit sign 一下
2023-11-16
最近在参加开源项目的时候,其中 Approver 要求我去给我的 commit sign 一下,也就是给对应的 commit 加上一个签名,这种签名有两种方式 Signed-off-by(您提供的这种):是一文本记录,用于表明责任和许可同意。它很容易被任何人复制和添加。 - GPG 签名(git c...
-
Python 依赖问题
2023-11-15
在 Python 中,没有像 Go 语言中那样的内置模块依赖管理工具(如 Go Modules)。我们通常使用 uv 或 poetry 来管理项目依赖,这两个工具都基于 Python 的虚拟环境(venv)机制。所谓的 venv,实际上是在项目目录中创建一系列文件夹,用于隔离不同项目的依赖。 当你为...
-
Alembic 数据库迁移工具
2023-11-15
Alembic 是一个 Python 环境中的数据库迁移工具,类似于 Go 语言中 GORM 的数据库迁移功能。它是 SQLAlchemy 的迁移工具扩展,用于管理数据库架构变更的版本控制。 在 Alembic 中最简单的命令就是初始化项目: alembic init migrations
-
Go 代码大全
2023-11-15
在 Go 语言中,与 Java 或 Python 等语言不同,结构体(struct)无需显式声明对某个接口的实现。 例如,在 Java 中我们常会写 class Student implements Person 来明确指定接口实现,这种方式具有一定的优势。 如果采用隐式实现机制,当接口中的方法发生...
-
RabbitMQ 与 Aio-Pika
2025-9-21
整个 rabbitmq 分成了 四个部分 1. producer: 用来生成对应的消息, 将消息发送出去 2. exchange: 用来按照对应的 router 把消息转发到对应的 queue 上面去 3. queue: 负责持久化对应的消息,兔子mq 的消息持久化机制是通过 Erlang 的 分布...
-
各种数据库选型场景
2025-9-28
mysql 不适合查询场景。
-
高性能系统设计之注册中心设计
2025-9-23
type cluster struct {
-
opentelemetry go 随手记
2025-9-20
本文档记录我参与 OTEL 开源项目碰到的坑,碰到有趣的点
-
编程语言排行榜就是制造焦虑的烂玩意
2025-1-27
每隔几个月,就有各种"编程语言排行榜"刷屏——TIOBE、PYPL、Stack Overflow 开发者调查、GitHub Octoverse……它们被包装成"权威数据",被媒体转载,被培训机构引用,甚至被一些管理者用来做技术选型决策。 但真相是:**这些排行榜本质上就是制造焦虑的营销工具,对真正的...
-
PyProc 源码分析 (持续更新中)
2025-9-22
PyProc 的 frame 结构分成了两个部分, 第一个部分是对应的帧头, 第二部是对应的 数据部分, 也就是对应的数据部分,类型下面这样 [header][payload]
-
Python
2025-9-22
在 Python 中 `%` 左边是字符串的话,右边可以是一个值,表示对应的字符串格式化
-
分布式系统指标计算
2025-9-23
在日常工作中经常需要去做一些系统优化相关的容量评估,核心是用 **Little 定律** 把吞吐量、响应时间和并发数联系起来: 并发数 = 系统吞吐量 * 任务平均执行时间
-
基础设施相关
2023-9-24
1. **锁定依赖与基础镜像** - 在 Dockerfile 或 `docker-compose.yml` 中明确指定 RabbitMQ 等中间件的版本号,使用固定的镜像 digest,确保环境一致性。
-
RAG 和向量数据库
2025-9-20

-
消息队列踩坑记录
2025-9-22
在 Java 应用中,使用 spring-kafka 只需配置 `group_id` 和 `topic` 就能消费消息,但这会埋下安全隐患:消费速度过慢时触发 rebalance,消息被分配给另一个消费者,新消费者同样消费过慢,再次 rebalance,形成恶性循环。
-
微服务框架选型: gRPC 高级篇
2025-9-24
type UnaryServerInterceptor func(ctx context.Context, req any, info *UnaryServerInfo, handler UnaryHandler) (resp any, err error)
-
规则引擎设计
2025-9-26
> 规则引擎旨在提供一种替代的计算模型。与通常由条件语句和循环语句组成的命令式模型不同,规则引擎基于产生式规则系统。产生式规则系统是一组产生式规则,每条规则都包含一个条件和一个动作——简单来说,你可以把它想象成一系列“如果……那么……”语句。 > 巧妙之处在于规则可以以任意顺序编写,引擎会根据自身情...
-
Python ORM
2025-9-22
首先一句话解释一下 session 是一个数据库会话,它是一个用对象抽象过程的简单接口,用于与数据库进行交互。
-
高性能系统设计之数据库设计
2025-9-22
在高性能系统中,往往数据库的读写性能非常重要,但是数据库的性能瓶颈往往和很多东西有关, 1. 数据量有关系,数据量会影响B+ 数的高度 2. 索引建立的好不好,比如一些高频数据库查询 3. 数据迁移,往往之前的表设计的不好,需要把表的数据迁移到新的表上面 4. 分库分表,分库分表通常分为垂直拆分和水...
-
异地多活数据存储策略设计
2025-9-25
当用户量上去的时候,我们必须要考虑到数据的分离存储,比如将主要的数据放在一个机房中,  在这个方案中,数据库主库集中在一个机房,其他机房的数据库都是从库。当有数据修改请求时,核心机房的主库先完成修改,然后通过数据库主从同步把修改后的...
- Poetry build_wheel 子进程退出问题排查 2025-9-02
-
高性能系统之用户鉴权 token 设计
2025-9-20
jwt 有三个部分组成 1: 首先是 header 部分,header 部分, 2: 第二部分是 payload 部分,用来存放对应的信息 3: 第三部分是 sign 部分,表示对应的签名
-
分布式链路追踪系统设计
2025-9-23
在大型项目中往往是多个服务并行运行的,比如我曾经呆过的一家公司将一个系统就拆成了这几个服务 1. 后台服务 2. 用户中心鉴权服务 2. 客户端服务 3. 数据统计服务
-
高性能任务调度系统设计实战
2025-9-22
在我们的日常开发中经常会碰到一些长时间,异步任务的执行,比如一个执行很耗时间的任务,可以长达 20多分钟, 这些任务的执行显然不能设计成阻塞形式的,如果是阻塞形式的系统很显然是扛不住的,所以这种系统很显然需要设计成非阻塞的异步的。 设计这种系统可用大概拆分出这样几个架构: 1. 调度对应的任务,调度...
-
分布式事务入门
2025-9-27
xa数据库原生支持这种特性 - ap: 应用程序 - 事务协调者: 用来管理所有的本地事务