前言
作为一名开发者,拥有一个属于自己的技术博客几乎是标配。从最初使用 Hexo 静态博客,到如今构建起一套完整的全栈博客系统,这个过程不仅是技术能力的提升,更是对系统架构、工程化实践的深入理解。本文将分享我的博客系统从简单到复杂的演进历程,以及最终架构的技术选型思考。
一、演进历程:从静态到动态
1.1 Hexo 时代的痛点
最开始,我选择了 Hexo 这个流行的静态博客生成器。它的优势很明显:Markdown 写作、主题丰富、部署简单。但随着使用深入,痛点逐渐显现:
- 发布流程繁琐:每次写完文章都要在本地执行
hexo generate,然后提交到 GitHub,最后等待 GitHub Pages 部署 - 修改成本高:发现错别字需要重新走一遍完整流程
- 无法在线编辑:外出时想修改文章,必须有完整的开发环境
- 功能扩展受限:想加入评论、统计等动态功能都需要依赖第三方服务
这些限制让我萌生了自建博客系统的想法。
1.2 Express.js 的初次尝试
既然要做动态博客,Node.js 生态自然是首选。我用 Express.js 搭建了第一版后端系统:
- 实现了用户认证(JWT)
- 完成了文章的 CRUD 接口
- 连接 MongoDB 存储数据
功能是实现了,但新问题又来了:
- Docker 镜像体积臃肿:仅用户和文章 CRUD 打包后就已经超过 100MB (因为必须包含 Node.js 运行时),拉取和部署都很慢
- 性能不理想:单个请求响应时间经常超过 100ms
- 资源占用高:在我的小内存 VPS 上运行吃力
1.3 Go 重构带来的质变
经过调研,我决定用 Go 重写后端。这个决定带来了立竿见影的改善:
- 镜像体积骤降:从 100MB+ 降到 40 MB
- 性能大幅提升:响应时间降到个位数毫秒
- 部署极其简单:编译成单一二进制文件,无需依赖环境
- 资源占用极低:内存占用不到 Node.js 版本的 1/3
Go 的高并发特性和低资源占用,让博客系统在廉价 VPS 上也能流畅运行。这次重构让我深刻体会到:技术选型对系统性能的影响是根本性的。
1.4 当前架构:功能完善的全栈系统
在稳定的 Go 后端基础上,我逐步添加了现代博客应该有的功能:
- AI 辅助创作:集成 AI 进行翻译、生成封面图、优化标题和摘要
- 中英双语支持:完整的国际化方案,URL 路径和数据库都支持双语
- 自动化部署:基于 GitHub Actions 的 CI/CD 流程
二、系统架构详解
2.1 整体架构图
我的博客系统采用典型的前后端分离架构,但有个特别之处:使用了双前端设计。
用户请求
↓
域名解析 (DNS)
↓
┌──────────────────────┐
│ Nginx 反向代理 │
│ - SSL/TLS 终止 │
│ - 路由分发 │
└──────────────────────┘
↓
┌─────────────┴─────────────┐
↓ ↓
┌─────────────┐ ┌─────────────┐
│ Next.js │ │ React SPA │
│ 公共博客 │ │ 管理后台 │
│ (SSR/ISR) │ │ (CSR) │
└─────────────┘ └─────────────┘
↓ ↓
└─────────────┬─────────────┘
↓
┌──────────────────────┐
│ Go API 后端 │
│ - 业务逻辑 │
│ - 身份认证 │
│ - AI 网关 │
└──────────────────────┘
↓
┌─────────────┴─────────────┐
↓ ↓
┌─────────────┐ ┌─────────────┐
│ PostgreSQL │ │ 外部 AI │
│ 数据库 │ │ 服务商 │
│ - 文章内容 │ │ - 翻译 │
│ - 用户数据 │ │ - 图像生成 │
└─────────────┘ └─────────────┘
