888e1e56f5ee516e15607ca9c1b80e23b48e2e10
micro_servers
一套 DIY 的轻量级微服务架构(UniServe Framework),由 C++ 与 Python 混合实现。
core 作为进程托管服务负责拉起并守护各业务子进程,gateway 作为应用层网关统一鉴权与反向代理,static 与 dnfs 作为两个独立的业务服务对外提供能力。
架构总览
┌──────────────────────────────────────────────┐
│ core (PMC / Nidus) │
│ 进程托管服务 · 监听 :5200 (HTTP 管理接口) │
│ 读取 init.txt 拉起并守护下列子进程 │
└───────────────┬──────────────────────────────┘
│ 启动 / 守护
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ gateway │ │ static │ │ dnfs │
│ 应用层网关 │ │ 前端托管服务 │ │ 树状菜单服务 │
│ :9201 (入口) │ │ :9200 │ │ :8006 │
│ 鉴权 + 反代 │ │ 静态/媒体文件 │ │ 节点树 CRUD │
└────────┬───────┘ └────────────────┘ └────────────────┘
│ 反向代理
┌────────┴────────┐
▼ ▼
static:9200 dnfs:8006
请求链路
- 客户端所有请求统一打到
gateway:9201。 gateway对/login、/register做账号鉴权(SQLite + SHA256 + RSA 签名 Token)。- 其余请求携带 Token,经
gateway校验后反向代理到Proxy.opened中放开的内部服务(static:9200/dnfs:8006)。 static提供前端页面与媒体流播放,dnfs提供树状节点的增删改查。
各服务说明
| 服务 | 语言 | 端口 | 职责 |
|---|---|---|---|
| core | C++20 | 5200 | 进程托管服务(PMC),创建/列举/杀死/执行子进程,读取自启动列表守护业务进程,提供 HTTP 管理接口 |
| gateway | C++20 | 9201 | 应用层网关(入口),用户注册/登录鉴权、Token 签发与校验、反向代理到内部服务 |
| static | Python(Flask) | 9200 | 前端托管服务,静态页面与文件浏览、视频/音频流媒体播放、路径遍历防护 |
| dnfs | Python(Flask) | 8006 | 树状网络文件系统(Dendrachy Network File-System),基于父子 pid 的节点树增删改查 |
core(核心模块 · 进程托管服务)
- 可执行文件
nidus.out,作为 systemd 服务(Nidus.service)常驻运行。 - 支持两种工作模式:命令行子系统调用(
--send/--exec/--list/--kill)与 HTTP 伺服器模式(--serve <port>)。 - 通过命名管道(Pipe)与消息队列(Mq)实现进程间通信。
- 读取
init.txt自启动列表,按行拉起各业务服务(static / dnfs / gateway)。
gateway(应用层网关)
- 唯一对外入口,承载 HTTPS(
full_chain.crt/server.key)。 - 用户表
Users(email + SHA256 密码哈希),登录成功后用 RSA 私钥签发Base64(payload)_signature形式的 Token。 - 反向代理时校验 Token 签名与过期时间,仅放行
Proxy.opened中配置的内部地址。 - 配置示例见 gateway/example.ini。
static(前端托管服务)
- 托管
public/下的前端页面(login.html/register.html/dnfs.html等)。 - 支持文件浏览、视频/音频在线播放(HTTP Range 分段请求)、一键下载。
- 路径遍历防护,仅允许访问
directory.root之内。 - 配置见 static/config.ini。
dnfs(树状菜单服务)
- 基于
pid(父节点 id)组织的树状节点,节点含title与content。 - 提供
/get_notes、/add_note、/delete_note、/update_note四个接口。 - 数据持久化于
notes.db(SQLite + SQLAlchemy)。
共享基础库
| 库 | 说明 |
|---|---|
| libth | 线程库:Thread、Cv_wait(条件变量等待)、Fsm、ITask 任务接口 |
| libhttp | HTTP/WebSocket 库:HttpServer、HttpClient、WebSocketServer/Client(基于 Boost.Beast) |
| libcrypt | 加密库:AES_CBC、MyRSA、SHA256、Base64、Crypto_Basic |
| libsqlite3 | SQLite3 C++ 封装 |
依赖
- 系统级:
g++(C++20)、make、libboost-all-dev、libcurl4-gnutls-dev、libssl-dev、libsqlite3-dev、python3、python3-venv、patchelf - Python:Flask、Flask-CORS、Flask-SQLAlchemy、waitress(详见各服务
requirements.txt)
安装
根目录提供一键安装脚本,按依赖顺序依次构建并安装各模块(库先行,core 最后):
# 1. 安装系统依赖
bash _setup.sh
# 2. 依次安装各模块(libth -> libhttp -> libcrypt -> gateway -> static -> dnfs -> core)
bash _inst.sh
单独安装某一服务时,进入对应目录执行:
bash _set.sh # 构建 + 安装
bash _run.sh # 运行
部署路径约定为 /opt/micro_servers/,core 的 init.txt 即从该路径拉起其余服务。
运行
由 core 守护的子进程通过 init.txt 自启动:
bash /opt/micro_servers/static/_run.sh
bash /opt/micro_servers/dnfs/_run.sh
bash /opt/micro_servers/gateway/_run.sh
启动 core(需 root 或 systemd):
systemctl start Nidus # 或 bash core/_run.sh
对外访问入口:https://<host>:9201。
关于架构定位
本项目具备微服务架构的核心特征,是一种进程托管式轻量微服务:
- 服务按业务能力拆分:网关、前端托管、节点树各自独立、独立端口、独立数据存储。
- API 网关模式:
gateway统一入口,承担鉴权与反向代理。 - 进程编排/守护:
core作为服务管理器拉起并守护子进程,类似简易版 supervisor。 - 多语言异构:C++(core / gateway)与 Python(static / dnfs)混合,通过 HTTP 通信。
与云原生微服务的差异:未引入服务注册发现、容器编排、消息总线,服务地址在 gateway/example.ini 中静态配置。对于个人/中小规模的 DIY 场景,这种取舍在简洁性与可控性上是合理的。
许可证
各模块均采用 MIT License,详见各目录下的 LICENSE。
Languages
C++
44.4%
Python
31.1%
HTML
8.2%
JavaScript
7.3%
C
2.1%
Other
6.8%