希曼日记

全栈电商微服务从 0 到 1 再到 10:开篇

约 3 分钟1,054 字

这是一套关于全栈(Golang + Node.js)电商微服务的进化教程:从一台什么都没装的 Mac 开始,逐步搭到一个完整的电商系统。除了业务代码,系列还会覆盖它所依赖的基础设施、基础设施所依赖的内核参数、对硬件的最低要求,以及贯穿整个软件开发过程的工具、技术、思想、设计与权衡。

「从 0 到 1」指把环境和骨架搭起来;「再到 10」指在骨架上持续加能力、加约束、加取舍,直到接近生产可用。

「全栈」在本系列中的定义

本系列所说的全栈由三部分组成:

层技术选型职责
前端Node.js 生态,React + TypeScript面向用户的电商界面
API 网关Golang面向微服务的统一入口;内置安全能力与统一配置管理
微服务Golang按 DDD 业务能力拆分的独立服务

网关不是简单的反向代理:鉴权、限流等安全能力和各服务的配置管理都收在网关这一层,微服务只关心自己的业务边界。

阅读顺序

系列按「先把机器用顺手,再装工具链,再进入电商项目」的顺序推进。基础篇与具体业务无关,任何 Golang 或 Node.js 开发者都可以直接套用;电商篇开始才进入项目本身。

  1. 基础篇:提高物理层面开发效率 —— 开发机、显示器、输入法与 macOS 键盘快捷键。
  2. 基础篇:通过软件提高开发效率 —— 终端工具,以及 crane、kubeconform 等辅助工具。
  3. 基础设施篇:Spegel 镜像 P2P 分发 —— 在 Kubernetes 节点之间复用镜像层,减少重复拉取。
  4. 基础设施篇:Reloader 让 Secret 变更自动滚动 Pod —— 凭据后端改值后让引用 Secret 的 Pod 自动滚动,以及它管不到的配置中心那一段。
  5. 基础篇:语言安装 —— Golang、fnm 管理的 Node.js、单独安装的 pnpm。
  6. 电商篇:安装依赖 —— protoc-gen-go 与 protoc-gen-connect-go。
  7. 电商篇:客户支持——配置自定义域名邮箱 —— Cloudflare Email Routing 收信、Resend 发信,以及许可、隐私与退款规则。
  8. 电商篇:安全——基于请求方法的访问控制绕过 —— 把 POST 改成 GET 为什么能提权,拿网关与微服务代码逐层核查,落地三道门禁。
  9. 电商篇:Spec Coding——让 AI 按仓库规范干活,而不是靠猜 —— 规范放哪、三色权限落成门禁、可判定的验收标准、完成自检与反向索引。
  10. 电商篇:性能——首页迁到 SSR,PageSpeed 移动端从 61 做到 100 —— 从指标权重反推丢分点,定位到 162 KB 全是 @font-face 的阻塞 CSS,首页迁到 Next.js 静态渲染,字体子集 130 KB 到 19 KB,发布链路七个坑。

GitOps 系列

GitOps 系列按一次变更从源码进入集群的顺序展开。每个安全组件单独成篇,最终汇合成 GitHub Actions、镜像仓库、部署清单和 Argo CD 的自动化闭环。

  1. GitOps 篇 01:用 Gitleaks 阻止凭据进入 Git 历史 —— 暂存区、完整历史、GitHub Actions 与凭据泄露处置。
  2. TODO:Trivy fs/config —— 文件系统依赖与 IaC 配置扫描。
  3. TODO:zizmor —— GitHub Actions 工作流安全检查。
  4. TODO:Syft —— 为镜像生成 SPDX SBOM。
  5. TODO:Trivy image —— 按不可变 digest 扫描镜像漏洞。
  6. TODO:Cosign —— 镜像签名与供应链证明。
  7. TODO:Kyverno —— 在 Kubernetes 准入阶段验证镜像。
  8. TODO:GitOps 自动化收口 —— GitHub CI、清单更新与 Argo CD 协调。
  9. TODO:GitLab 单独篇 —— 第二远端只运行代码门禁,不重复发布。

后续篇目发布后会补充到这里,也可以通过标签 全栈电商微服务 或 GitOps 查看相关文章。

阅读前提

  • 一台 Mac。基础篇的快捷键、输入法和显示器设置都以 macOS 为准;为什么选 Mac,第一篇会说明。
  • 不要求已有 Golang 或 React 经验;语言安装从零开始。
  • 系列中的版本号以撰写当时为准,实际安装时以官方最新稳定版为准。