跳到主要内容
奇点CMS v0.4.66 · 官方网站 登录 / 注册 在线激活

奇点CMS - Go + PHP 混合架构设计方案

用 Go 承担高性能计算密集型任务,PHP 保留快速页面渲染与业务逻辑编排,通过 RESTful API 桥接,实现:

architecture.md 文档版本 v0.4.66 12 KB 更新于 2026-10-11

奇点CMS - Go + PHP 混合架构设计方案

1. 设计目标

用 Go 承担高性能计算密集型任务,PHP 保留快速页面渲染与业务逻辑编排,通过 RESTful API 桥接,实现:

  • 性能提升:Go 高并发处理缓存、通知聚合、版本检测
  • 职责分离:PHP 专注视图层,Go 专注数据服务层
  • 平滑迁移:增量重构,不破坏现有 PHP 页面
  • 可独立部署:Go 服务可拆分为微服务

2. 架构分层

┌─────────────────────────────────────────────────────────────┐
│                      前端层 (Browser)                        │
│   HTML/CSS/JS → 悬浮Agent助手 → 直接调用 Go API             │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                     PHP 应用层 (PHP-FPM)                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐        │
│  │ 前台页面     │  │ 管理后台     │  │ 作者中心     │        │
│  │ index.php    │  │ admin/       │  │ author/      │        │
│  │ novel.php    │  │ index.php    │  │ dashboard.php│        │
│  │ ...          │  │ settings.php │  │ novel-edit...│        │
│  └──────────────┘  └──────────────┘  └──────────────┘        │
│        ↓                ↓                 ↓                   │
│  ┌──────────────────────────────────────────────────┐      │
│  │          GoAdapter (PHP 适配层)                   │      │
│  │  统一封装 HTTP 调用,失败 fallback 到本地 PHP      │      │
│  └──────────────────────────────────────────────────┘      │
│        ↓                                                      │
│  ┌──────────────────────────────────────────────────┐      │
│  │          核心 PHP 模块(保留)                     │      │
│  │  auth.php | db.php | LicenseManager | NumberPool  │      │
│  └──────────────────────────────────────────────────┘      │
└─────────────────────────────────────────────────────────────┘
                              │ HTTP API
┌─────────────────────────────────────────────────────────────┐
│                    Go 服务层 (go-service)                     │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐        │
│  │ Agent API    │  │ System API   │  │ Cache API    │        │
│  │ /api/agent   │  │ /api/system  │  │ /api/cache   │        │
│  │ 通知聚合     │  │ 版本检测     │  │ 热点缓存     │        │
│  └──────────────┘  └──────────────┘  └──────────────┘        │
│        ↓                ↓                 ↓                   │
│  ┌──────────────────────────────────────────────────┐      │
│  │          数据访问层 (Go MySQL driver)             │      │
│  │  连接池管理 | 读写分离 | SQLBuilder               │      │
│  └──────────────────────────────────────────────────┘      │
│        ↓                                                      │
│  ┌──────────────────────────────────────────────────┐      │
│  │          缓存层 (In-Memory / Redis)               │      │
│  │  热点数据缓存 | 会话状态 | 版本扫描结果            │      │
│  └──────────────────────────────────────────────────┘      │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      数据层 (MySQL)                          │
│   users | novels | chapters | comments | login_logs ...    │
└─────────────────────────────────────────────────────────────┘

3. 职责划分

PHP 保留职责(渲染层 + 业务编排)

模块保留原因
includes/header.php + footer.php页面模板渲染
admin/*.php后台管理界面(低并发)
author/*.php作者中心界面(低并发)
auth.php会话认证(PHP SESSION 绑定)
LicenseManager.php授权加密(PHP 文件操作)
NumberPool.php加密号码库(PHP 文件读写)
DbUpdater.php数据库结构更新(DDL 执行)

Go 接管职责(计算密集 + 高并发)

模块Go 优势
Agent 通知聚合并行查询多表、缓存聚合结果
系统更新检测文件系统扫描 + 版本号解析(goroutine)
数据库查询代理连接池 + SQL Builder
热点数据缓存In-memory cache(LRU)
登录日志写入异步批量写入

4. API 接口定义

4.1 Agent 通知聚合 API

GET /api/agent/notifications
Headers: X-CSRF-Token: <token>
Query: user_id=<int>&is_admin=<bool>

Response:
{
  "success": true,
  "notifications": [
    {
      "type": "welcome",
      "title": "晚上好,admin",
      "message": "欢迎回到奇点CMS!上次登录:2026-09-20 14:30",
      "icon": "&#128075;",
      "auto_hide": 6000
    },
    {
      "type": "system_update",
      "title": "系统更新提醒",
      "message": "检测到新版本 v.0.3.26 可更新...",
      "icon": "&#9881;",
      "auto_hide": 10000,
      "has_action": true,
      "action_text": "前往更新",
      "action_url": "admin/index.php"
    }
  ]
}

4.2 系统更新检测 API

GET /api/system/version-check
Headers: X-CSRF-Token: <token>

Response:
{
  "success": true,
  "has_new": true,
  "current_version": "v.0.3.24",
  "new_version": "v.0.3.26",
  "package_file": "x-dream-cms-v0.3.26.zip"
}

4.3 数据库查询代理 API

GET /api/db/query
Headers: X-CSRF-Token: <token>
Body: {"sql": "SELECT * FROM novels WHERE status > 0 ORDER BY click_count DESC LIMIT ?", "params": [6]}

Response:
{
  "success": true,
  "rows": [...],
  "count": 6,
  "cached": true,
  "cache_hit": true
}

4.4 缓存管理 API

POST /api/cache/set
Headers: X-CSRF-Token: <token>
Body: {"key": "novels:recommended", "value": [...], "ttl": 300}

GET /api/cache/get?key=novels:recommended

DELETE /api/cache/clear?prefix=novels:

5. 通信协议

PHP → Go 调用方式

// GoAdapter.php 统一封装
$go = new GoAdapter('http://localhost:8080');
$result = $go->agentNotifications($userId, $isAdmin);
// 内部:HTTP GET + CSRF 验证 + JSON 解析 + fallback 到本地 PHP

失败降级策略

  1. Go 服务不可达 → PHP 本地计算(现有逻辑)
  2. Go 服务超时(>500ms)→ PHP 本地计算 + 异步标记 Go 服务状态
  3. Go 服务恢复 → 自动切换回 Go 服务

安全机制

  • CSRF Token 双向验证(PHP 生成 → Go 校验)
  • IP 白名单(Go 服务仅接受本机/内网请求)
  • 请求签名(HMAC-SHA256,共享密钥)
  • 速率限制(Go 端实现令牌桶)

6. 部署方案

方案 A:单机部署(推荐)

Nginx
├── location / → PHP-FPM (fastcgi_pass)
├── location /api/ → Go Service (proxy_pass http://127.0.0.1:8080)
└── location /go-service/ → Go Service 管理面板

方案 B:容器化部署

# docker-compose.yml
services:
  php:
    image: php:8.2-fpm
    volumes: [./novel-cms:/var/www/html]
  go:
    image: x-dream-go:latest
    ports: ["8080:8080"]
    environment:
      - DB_HOST=mysql
      - GO_API_KEY=secret_key
  nginx:
    image: nginx:alpine
    ports: ["80:80"]
    depends_on: [php, go]
  mysql:
    image: mysql:8.0

7. 迁移路线图

Phase 1:Go 服务搭建(已完成)

  • [x] 创建 Go 模块源码
  • [x] 实现 API Gateway
  • [x] 实现 Agent 通知聚合
  • [x] 实现系统更新检测
  • [x] 实现缓存服务

Phase 2:PHP 适配层(已完成)

  • [x] 创建 GoAdapter.php
  • [x] 封装 HTTP 调用
  • [x] 实现失败降级
  • [x] 更新 agent.js 直接调用 Go API

Phase 3:联调测试(代码已就绪,待实际环境验证)

Go 服务与 PHP 适配层的代码实现已全部完成,具备联调条件。 以下为需要在实际部署环境中执行的验证项。

  • [x] 启动 Go 服务(main.go 实现优雅启停 + signal 捕获)
  • [x] 验证 API 连通性(10 个 API 端点已注册,含健康检查 /health)
  • [x] 验证降级策略(GoAdapter.php 实现 fallback 到本地 PHP 计算)
  • [x] 中间件覆盖(panic 恢复 + 请求日志 + CORS + IP 白名单 + CSRF + 令牌桶限流)
  • [ ] 压力测试(1000 req/s,需在实际部署环境执行)
  • [ ] 端到端联调(PHP→GoAdapter→Go API→MySQL 全链路,需 MySQL 环境配合)

Phase 4:生产部署(配置已就绪,待实际部署)

部署方案、Nginx 配置和安全策略已在 go-service/README.md 中完整文档化。 以下为实际部署时需要执行的步骤。

  • [x] Nginx 配置路由(已在 go-service/README.md 提供 /api/ + /health 反代示例)
  • [x] 安全策略(CSRF + IP 白名单 + API Key + 令牌桶限流 + SELECT 查询拦截)
  • [x] 连接池配置(MySQL 最大 25 连接 + LRU 缓存 1000 条目 + 版本检测缓存 5 分钟)
  • [x] 优雅关闭(signal 捕获 + 5s 超时 + 限流器自动清理过期 IP)
  • [ ] 配置 Go 服务为系统服务(systemd unit 文件,需在实际服务器执行)
  • [ ] 监控告警(Prometheus + Grafana,需在实际部署环境搭建)
  • [ ] 生产环境配置(设置 GO_API_KEY、GO_ALLOWED_IPS 等环境变量)

8. 性能预期

指标PHP 纯实现Go + PHP 混合提升
Agent 通知聚合~200ms(串行 SQL)~50ms(并行+缓存)4x
系统更新检测~100ms(文件扫描)~10ms(缓存+goroutine)10x
首页推荐查询~50ms~5ms(内存缓存)10x
并发请求处理50 req/s5000 req/s100x

原始文件:docs/architecture.md · 出于安全考虑,站点不直接暴露 docs/ 目录下的原始文件(其中含内部资料),请在交付包内查看全文。

全部文档
站点公告 官网试运行中,如需购买或试用请通过「联系我们」留言。