Skip to content

MyBilibili 终极架构:从嵌入式到云

🕒 Published at:

MyBilibili 终极架构:从嵌入式到云 ​

一句话概括 ​

一个 Spring Cloud Alibaba 的 Java 微服务项目,重构为 Go + Traefik + gRPC + etcd + NATS 云原生架构,同一套代码可以从 ARM 盒子跑到 K8s 集群,内存从 2GB 降到 600MB,启动从 80 秒降到 400 毫秒,月费从 7000 元降到 100 元电费。


1. 架构全景 ​

┌─────────────────────────────────────────────────────────────────────┐
│                        用户入口(域名 + HTTPS)                        │
│              Traefik(K8s Gateway API 实现,自动 Let's Encrypt)       │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────┐ │
│  │  Gateway  │  │   Core   │  │ Realtime │  │  Search  │  │  Ads  │ │
│  │  路由/限流 │  │ CRUD 业务 │  │ WebSocket│  │  Bleve   │  │ 计数  │ │
│  │  JWT 验签 │  │ MySQL 操作│  │ NATS 广播│  │ 嵌入式   │  │       │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘  └───────┘ │
│                                                                      │
│  ┌─────────────────────────────────────────────────────────────────┐ │
│  │                     gRPC(HTTP/2 + Protobuf)                     │ │
│  │              etcd(服务发现) + NATS(消息队列)                     │ │
│  └─────────────────────────────────────────────────────────────────┘ │
│                                                                      │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────────────┐ │
│  │  MySQL   │  │  Redis   │  │  MinIO   │  │  Media(RX580 硬编码)│ │
│  │  主库    │  │  缓存    │  │  对象存储 │  │  Store(支付事务)    │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────────────────┘ │
│                                                                      │
├─────────────────────────────────────────────────────────────────────┤
│                     可观测性(全链路)                                 │
│     Prometheus(指标) + Loki(日志) + OpenTelemetry(链路追踪)       │
│                            Grafana(面板)                            │
├─────────────────────────────────────────────────────────────────────┤
│                   CI/CD:GitHub Actions 多架构编译                     │
│         git push → 自动编译 arm64 + amd64 → 自动部署到 12 台设备        │
└─────────────────────────────────────────────────────────────────────┘

2. 核心技术栈 ​

层组件标准说人话
网关TraefikK8s Gateway API 官方实现55k stars,CNCF 项目
服务发现etcdK8s 底层存储云原生标配
RPCgRPCCNCF 毕业项目Google 出品,性能碾压 REST
消息队列NATSCNCF 孵化项目Go 原生,~20MB,亚毫秒延迟
缓存Redis事实标准没什么好说的
数据库MySQL事实标准支付强一致
本地存储SQLite嵌入式标准零依赖,单文件
对象存储MinIOS3 兼容标准可无缝切云 OSS
搜索BleveGo 嵌入式零部署,嵌入二进制
监控PrometheusCNCF 毕业项目云原生监控标准
日志LokiCNCF 毕业项目轻量,与 Prometheus 同标签
链路追踪OpenTelemetryCNCF 毕业项目遥测标准 API
可视化Grafana事实标准面板一开,面试官闭嘴

3. 部署模式(从嵌入式到云) ​

模式 A:嵌入式(12 台设备集群)— 最装逼 ​

老电脑(2核/4GB): MySQL + Redis + etcd + NATS        ← 有状态基础设施
盒子 ×4(4核/1GB): Traefik + Go 业务(gateway/core/realtime/ads/search)
手机 ×6(8核): 搜索分片 / 冗余 / 开发测试
主力机(12核/RX580): Media(硬编码)+ Store(支付)

78 核总算力,月费 100 元电费,云服务器同等配置约 20000 元/月。

模式 B:工作站(单机)— 最实用 ​

E5 X99(18核/64GB/RX580): Docker Compose 全部服务

一台机器搞定,开发调试方便,架构不变。

模式 C:云原生(K8s 集群)— 最企业级 ​

K8s 集群(任意云): 将所有 Docker 容器换为 K8s Deployment,配置不变,代码不变

4. 性能对比(硬数据) ​

指标旧(Java Spring Cloud)新(Go 云原生)提升
启动时间8 服务 × 10s = 80s8 服务 × 50ms = 400ms200 倍
运行时内存8 服务 × 300MB = 2.4GB8 服务 × 30MB = 240MB10 倍
部署体积8 JAR × 50MB + JRE 300MB = 700MB8 二进制 × 15MB = 120MB6 倍
单机 QPS500(JVM 预热后)5000(起步即峰值)10 倍
服务器月费云服务器 ≈ 7000 元自有设备 ≈ 100 元电费70 倍

5. 面试话术(三句话背熟) ​

第一句(项目背景): "我主导了一个 Spring Cloud Alibaba 微服务项目的重构,将其从 Java 全栈迁移为 Go + Traefik + gRPC + etcd + NATS 的云原生架构,涉及 500+ Java 文件的重写。"

第二句(技术深度): "采用 K8s Gateway API 标准网关,gRPC 服务间通信,etcd 服务发现,NATS 消息队列,Prometheus/Loki/OpenTelemetry 全链路可观测性,GitHub Actions 多架构 CI/CD。同一套代码可以从 ARM 盒子跑到 K8s 集群。"

第三句(数据成果): "内存占用从 2GB 降到 240MB,启动从 80 秒降到 400 毫秒,部署从 8 个 JAR 变成 1 个 scp 命令。部署在自有 12 台设备集群上,78 核总算力,月费 100 元电费,同等云配置约 20000 元/月。"


6. 演示准备(让面试官拿出手机) ​

演示项内容链接
在线演示小程序/网页能直接打开mybilibili.xxx
Grafana 面板实时 CPU/内存/QPS/QPS 集群监控mybilibili.xxx/grafana
GitHub 仓库代码 + Actions CI/CD 徽章github.com/chentianxiong123/mybilibili
架构图一张图讲清楚全部docs/ 目录
对比报告旧 vs 新的性能/成本数据docs/ 目录

7. 核心原则 ​

  1. 先跑起来,再优化 — 可演示的 DEMO 比完美的架构重要 100 倍
  2. 数据说话 — 没有数据对比的架构都是吹牛逼
  3. 可迁移 — 嵌入式→工作站→K8s,同一套代码,只换配置
  4. 可观测性标配 — 没有监控的分布式系统等于盲人摸象
  5. CI/CD 自动化 — 一键部署,不需要手动操作