Skip to content

微服务架构课程计划

课程概述

本课程分为 8 节课,每节课 20-40 分钟,总时长约 120-150 分钟。通过理论讲解和实践操作,深入理解微服务架构的设计和实现。

第 1 课:课程介绍与环境准备(5 分钟)

学习目标

  • 了解课程内容和目标
  • 搭建开发环境
  • 项目初始化

课程内容

  1. 课程介绍

    • 微服务架构的特点
    • 微服务的应用场景
    • 课程结构安排
  2. 环境准备

    • 安装依赖
    • 配置开发环境
    • 初始化项目

实践操作

bash
# 安装依赖
npm install express axios

# 初始化项目
npm init -y

预期输出

✅ 依赖安装成功
✅ 项目初始化完成

第 2 课:服务拆分(15 分钟)

学习目标

  • 理解服务拆分原则
  • 掌握领域驱动设计
  • 学习服务边界划分

课程内容

  1. 服务拆分原则

    • 单一职责
    • 高内聚低耦合
    • 数据自治
  2. 领域驱动设计

    • 领域模型
    • 限界上下文
    • 聚合根
  3. 服务边界

    • 业务能力拆分
    • 数据边界划分
    • 接口设计

实践操作

javascript
// 用户服务
class UserService {
  async register(userData) {
    // 用户注册逻辑
  }

  async login(email, password) {
    // 用户登录逻辑
  }
}

// 商品服务
class ProductService {
  async createProduct(productData) {
    // 商品创建逻辑
  }

  async getProduct(productId) {
    // 商品查询逻辑
  }
}

测试验证

bash
node test/services.test.js

预期输出

✅ Service splitting tests passed

第 3 课:服务注册与发现(15 分钟)

学习目标

  • 理解服务注册机制
  • 实现服务注册中心
  • 学习服务发现

课程内容

  1. 服务注册

    • 服务注册流程
    • 健康检查
    • 服务注销
  2. 服务发现

    • 客户端发现
    • 服务端发现
    • 负载均衡
  3. 注册中心

    • 注册中心实现
    • 高可用设计
    • 数据一致性

实践操作

javascript
class ServiceRegistry {
  constructor() {
    this.services = new Map();
  }

  register(service) {
    const { name, url } = service;
    if (!this.services.has(name)) {
      this.services.set(name, []);
    }
    this.services.get(name).push({ url, registeredAt: Date.now() });
  }

  discover(name) {
    return this.services.get(name) || [];
  }
}

测试验证

bash
node test/registry.test.js

预期输出

✅ Service registry tests passed

第 4 课:服务通信(15 分钟)

学习目标

  • 理解服务通信方式
  • 实现同步通信
  • 学习异步通信

课程内容

  1. 同步通信

    • HTTP/REST
    • gRPC
    • 错误处理
  2. 异步通信

    • 消息队列
    • 事件总线
    • 消息可靠性
  3. 通信模式

    • 请求-响应
    • 发布-订阅
    • 广播

实践操作

javascript
class HttpClient {
  async request(serviceName, options) {
    const instances = await this.discover(serviceName);
    const instance = this.selectInstance(instances);
    
    const response = await fetch(`${instance.url}${options.path}`, {
      method: options.method,
      body: options.body ? JSON.stringify(options.body) : undefined
    });
    
    return response.json();
  }
}

测试验证

bash
node test/communication.test.js

预期输出

✅ Service communication tests passed

第 5 课:配置管理(20 分钟)

学习目标

  • 理解配置管理需求
  • 实现配置中心
  • 学习配置推送

课程内容

  1. 配置管理

    • 配置集中化
    • 配置版本管理
    • 配置环境隔离
  2. 配置中心

    • 配置存储
    • 配置推送
    • 配置热更新
  3. 配置安全

    • 敏感信息加密
    • 访问控制
    • 审计日志

实践操作

javascript
class ConfigCenter {
  constructor() {
    this.configs = new Map();
    this.listeners = new Map();
  }

  async getConfig(serviceName, version = 'latest') {
    return this.configs.get(`${serviceName}:${version}`);
  }

  async setConfig(serviceName, config, version) {
    const key = `${serviceName}:${version}`;
    this.configs.set(key, config);
    this.notifyListeners(serviceName, config, version);
  }

  subscribe(serviceName, callback) {
    if (!this.listeners.has(serviceName)) {
      this.listeners.set(serviceName, []);
    }
    this.listeners.get(serviceName).push(callback);
  }
}

测试验证

bash
npm test

预期输出

✅ Config management tests passed

第 6 课:API 网关(15 分钟)

学习目标

  • 理解 API 网关作用
  • 实现路由和认证
  • 学习限流和熔断

课程内容

  1. API 网关

    • 路由转发
    • 协议转换
    • 聚合响应
  2. 认证授权

    • JWT 验证
    • OAuth 2.0
    • 权限控制
  3. 流量控制

    • 限流
    • 熔断
    • 降级

实践操作

javascript
class ApiGateway {
  constructor(serviceDiscovery) {
    this.serviceDiscovery = serviceDiscovery;
    this.routes = new Map();
  }

  addRoute(path, serviceName) {
    this.routes.set(path, serviceName);
  }

  async handleRequest(req, res) {
    const serviceName = this.routes.get(req.path);
    if (!serviceName) {
      return res.status(404).json({ error: 'Not found' });
    }

    const instance = await this.serviceDiscovery.selectInstance(serviceName);
    const response = await fetch(`${instance.url}${req.path}`);
    const data = await response.json();
    
    res.json(data);
  }
}

测试验证

bash
node test/gateway.test.js

预期输出

✅ API gateway tests passed

第 7 课:监控和日志(20 分钟)

学习目标

  • 理解监控和日志需求
  • 实现指标收集
  • 学习链路追踪

课程内容

  1. 监控系统

    • 指标收集
    • 健康检查
    • 告警通知
  2. 日志系统

    • 日志收集
    • 日志存储
    • 日志查询
  3. 链路追踪

    • 分布式追踪
    • 性能分析
    • 问题定位

实践操作

javascript
class MetricsCollector {
  constructor() {
    this.metrics = new Map();
  }

  increment(name, value = 1) {
    if (!this.metrics.has(name)) {
      this.metrics.set(name, 0);
    }
    this.metrics.set(name, this.metrics.get(name) + value);
  }

  timing(name, duration) {
    if (!this.metrics.has(name)) {
      this.metrics.set(name, []);
    }
    this.metrics.get(name).push(duration);
  }

  getMetrics() {
    return Object.fromEntries(this.metrics);
  }
}

测试验证

bash
node test/monitoring.test.js

预期输出

✅ Monitoring and logging tests passed

第 8 课:总结与扩展(15 分钟)

学习目标

  • 回顾课程内容
  • 总结核心概念
  • 探索扩展方向

课程内容

  1. 课程回顾

    • 服务拆分
    • 服务注册与发现
    • 服务通信
    • 配置管理
    • API 网关
    • 监控和日志
  2. 核心概念总结

    • 微服务架构
    • 分布式系统
    • 服务治理
    • 可扩展性
  3. 扩展方向

    • 服务网关
    • 分布式事务
    • 服务熔断
    • 链路追踪
    • 服务治理

实践操作

bash
# 运行所有测试
npm test

# 思考如何扩展功能
# 实现服务网关、分布式事务等功能

预期输出

✅ 所有测试通过

学习成果

完成本课程后,你将能够:

  1. ✅ 理解微服务架构的核心概念
  2. ✅ 实现服务注册与发现
  3. ✅ 实现服务通信和配置管理
  4. ✅ 实现 API 网关
  5. ✅ 实现监控和日志

参考资源

下一步

完成本课程后,你可以继续学习:

  • 容器化部署(Docker)
  • CI/CD 持续集成

所有教学材料已保存。准备录制。


架构师AI杜公众号二维码

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态