Go Channel 的边界行为
Go channel 的边界行为可以从三个状态、两种容量以及一组特殊操作来理解。三个状态是 nil、open 和 closed;两种容量是无缓冲和有缓冲。下面按生命周期、特殊行为和同步语义分层说明。 ...
Go channel 的边界行为可以从三个状态、两种容量以及一组特殊操作来理解。三个状态是 nil、open 和 closed;两种容量是无缓冲和有缓冲。下面按生命周期、特殊行为和同步语义分层说明。 ...
最近正在给公司重构一套独立的用户管理和认证鉴权组件。AuthX 启动时会做幂等初始化(bootstrap):表结构迁移、创建默认管理员、创建预配置的服务账号。单实例下这套逻辑没有问题,但生产是多副本形态——K8s 滚动发布或 HPA 扩容时,多个副本可能同时执行这段代码。本文记录这个并发问题的处理过程:悲观锁、乐观锁、upsert 三种方案的取舍,以及 MySQL 唯一索引中 NULL 值带来的一个问题。 ...
手头有一台 PVE(Proxmox VE)宿主机,希望在其上创建 3 台 Ubuntu 虚拟机,搭建一个 1 控制面 + 2 工作节点的 Kubernetes 集群,用于学习和测试。 国内环境的主要障碍是网络:k8s 官方 apt 源(pkgs.k8s.io)、镜像仓库(registry.k8s.io、quay.io、docker.io)以及 GitHub raw 均无法直接稳定访问,需要全程替换为国内镜像。本文使用的替代方案: ...
在前面的文章中有提到,我正在使用 AdguardHome 作为家庭环境的 DNS server。它除了基本的 DNS 功能,更重要的是它的广告过滤功能,这个功能是基于屏蔽特定域名解析实现的。 ...
Hammerspoon 是一个 macOS 程序,它将 macOS 上的一些功能封装为 lua 接口,使用 lua 进行配置,以常驻后台的形式运行,可以监听特定事件,典型的比如实现一些快捷键功能。本文介绍两个我正在使用的 Hammerspoon 应用场景。 ...
书接上回,我将一些服务经过 API gateway 统一代理之后,便可以省略端口仅使用自定义域名来访问这些服务了。但是当我使用 Chrome 打开 http://pve.home.lan/ 页面并输入账号密码之后,PVE 页面却报出 Connection error 401: No ticket。 ...
我在家中使用零刻和树莓派自托管一些服务之后,想通过自定义域名(比如pve.home.io)的方式来访问这些服务,这样就可以避免记忆哪些服务在哪些节点上(以及对应的端口是什么)。 ...