独立开发中·📚18 篇日记·📝最近更新:2026年07月12日
🏗️

一人公司技术架构:如何用一套代码支撑50个平台

从数据库到前端,从部署到监控,拆解我支撑50个平台的技术架构,包含完整的代码示例。

水哥
2026-07-0812 分钟阅读

核心原则:一套基础,N个变体

支撑50个平台的技术架构,核心只有一个词:复用

让我从底层到上层,逐层拆解。

1. 数据库层

多租户设计

-- 每个平台一个 schema,共享同一个 PostgreSQL 实例
CREATE SCHEMA IF NOT EXISTS platform_mishimao;
CREATE SCHEMA IF NOT EXISTS platform_zhaofangtong;

-- 公共表(用户、支付、日志)放在 public schema
CREATE TABLE public.users (
    id BIGSERIAL PRIMARY KEY,
    phone VARCHAR(20) UNIQUE,
    email VARCHAR(255),
    password_hash VARCHAR(255),
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 每个平台的业务表放在各自 schema
CREATE TABLE platform_mishimao.restaurants (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT REFERENCES public.users(id),
    name VARCHAR(255),
    address TEXT,
    rating NUMERIC(2,1),
    created_at TIMESTAMPTZ DEFAULT NOW()
);

为什么不用 SaaS 多租户?

因为每个平台的业务模型差异太大。多租户适合同质化业务,微平台需要的是异构隔离。

2. 后端服务层

统一网关 + 微服务

                    ┌─────────────┐
                    │   Nginx     │
                    │  (反向代理)  │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │  API Gateway │
                    │ (路由分发)   │
                    └──────┬──────┘
                           │
           ┌───────────────┼───────────────┐
           │               │               │
    ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
    │  基础服务    │ │  业务服务    │ │  运营服务    │
    │ (用户/支付)  │ │ (各平台独立) │ │ (统计/监控)  │
    └─────────────┘ └─────────────┘ └─────────────┘

基础服务(全平台复用)

// auth.service.ts - 统一认证
export class AuthService {
  // 所有平台共享同一套用户系统
  // 通过 platform_id 区分来源
  async login(phone: string, code: string, platformId: string) {
    const user = await this.userRepo.findByPhone(phone);
    if (!user) throw new NotFoundError('用户不存在');

    const token = this.jwt.sign({
      userId: user.id,
      platformId
    });

    return { token, user };
  }
}

// payment.service.ts - 统一支付
export class PaymentService {
  // 对接微信/支付宝,所有平台复用
  // 通过 platformId 路由到不同的商户号
  async createOrder(params: {
    platformId: string;
    userId: number;
    amount: number;
    subject: string;
  }) {
    const merchant = this.merchantConfig[params.platformId];
    return this.wechatPay.createOrder({
      ...params,
      mchId: merchant.mchId,
    });
  }
}

业务服务(每平台独立)

每个平台的业务服务继承自同一个基类:

// base.service.ts
export abstract class BaseService<T> {
  constructor(
    protected repo: BaseRepository<T>,
    protected platformId: string,
  ) {}

  async list(query: QueryDTO): Promise<PageResult<T>> {
    return this.repo.list({ ...query, platformId: this.platformId });
  }

  async create(data: Partial<T>): Promise<T> {
    return this.repo.create({ ...data, platformId: this.platformId } as any);
  }

  // 子类可以覆写
  async afterCreate(entity: T): Promise<void> {}
}

// restaurant.service.ts (觅食猫)
export class RestaurantService extends BaseService<Restaurant> {
  async searchNearby(lat: number, lng: number, radius: number) {
    // 觅食猫特有逻辑
    return this.repo.query(
      'SELECT * FROM restaurants WHERE ST_DWithin(location, ST_MakePoint($1,$2)::geography, $3)',
      [lng, lat, radius]
    );
  }
}

3. 前端架构

模板化 + 配置化

// platform.config.ts - 每个平台一份配置
export const platformConfig = {
  mishimao: {
    name: '觅食猫',
    theme: { primary: '#FF6B35', secondary: '#FFA500' },
    modules: ['list', 'detail', 'map', 'review', 'coupon'],
    apiBase: '/api/mishimao',
    domain: 'mishimao.com',
  },
  zhaofangtong: {
    name: '找房通',
    theme: { primary: '#2563EB', secondary: '#3B82F6' },
    modules: ['list', 'detail', 'map', 'filter', 'agent'],
    apiBase: '/api/zhaofangtong',
    domain: 'zhaofangtong.com',
  },
};

// App.tsx - 所有平台共用同一套前端
function App() {
  const config = getPlatformConfig(); // 根据域名自动识别
  return (
    <ThemeProvider theme={config.theme}>
      <ModuleRouter modules={config.modules} />
    </ThemeProvider>
  );
}

4. 部署与运维

Docker Compose 一键部署

# docker-compose.yml
version: '3.8'
services:
  gateway:
    build: ./gateway
    ports: ['80:80', '443:443']
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d

  postgres:
    image: postgres:16
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}

  redis:
    image: redis:7-alpine

  # 基础服务
  auth-service:
    build: ./services/auth
    environment:
      - DATABASE_URL=postgresql://postgres:${DB_PASSWORD}@postgres:5432/platform

  # 业务服务按需启动
  mishimao-service:
    build: ./services/mishimao
    profiles: ['mishimao']

  zhaofangtong-service:
    build: ./services/zhaofangtong
    profiles: ['zhaofangtong']

监控看板

我自己搭了一个 Grafana + Prometheus 的监控体系:

  • 每个平台的 QPS、响应时间、错误率
  • 数据库慢查询监控
  • Redis 内存使用
  • 服务器资源利用率

5. 成本控制

服务器:2台 4核8G 云主机(¥400/月)
数据库:RDS PostgreSQL 基础版(¥200/月)
Redis:自建(¥0)
CDN:CloudFlare 免费版
域名:50个 × ¥55/年(¥229/月)
SSL:Let's Encrypt 免费
─────────────────────
总成本:约 ¥829/月

50个平台,月成本不到1000元。 这就是微平台的魅力。

总结

层级复用率说明
基础设施100%数据库、缓存、队列
基础服务100%认证、支付、通知
前端框架95%模板+配置化
业务逻辑20%每平台独立
运维监控100%统一面板

一个人做50个平台,不是做50倍的工作量,而是把1份工作做到能复用50次。

这才是独立开发者的核心竞争力。

相关文章