课程总体设计

课程名称:基于 Swoole+Hyperf 的微服务架构实战(三个月进阶)
前置要求:PHP 基础扎实、熟悉 Composer、了解基本网络协议
学习时长:12 周,每周 5 天学习(建议每天 4-6 小时实战)
核心目标:从协程原理到微服务治理,完成 3 个综合实践项目,具备高并发微服务系统设计与落地能力


在这里插入图片描述

第一阶段:基石——协程与框架核心(第 1-2 周)

第 1 周:Swoole 网络编程与协程入门
天次学习任务 / 知识点实战要求测试 / 检验方法
周一Docker 环境搭建;安装 Swoole 5.x;编写纯 TCP 服务器;理解事件循环(Reactor 模型)实现一个 TCP ECHO 服务,用 telnet 交互端口连通性测试,并发 telnet 连接
周二HTTP 服务器创建、Request/Response 处理;静态资源托管;go() 协程创建,协程调度初探创建 HTTP 服务,返回 JSON;在请求内启动协程写日志通过 ab 工具并发请求,观察协程并发执行
周三协程容器、Channel 通信、WaitGroup、协程上下文(Context);defer 机制用 Channel 实现生产者-消费者;使用 Context 传递请求 ID编写单元测试,验证并发下数据一致性
周四Hyperf 框架安装(Composer 建项);骨架目录解读;生命周期(Request→Middleware→Controller)搭建 Hyperf 项目,运行 php bin/hyperf.php start浏览器访问默认路由,确认启动正常
周五依赖注入(DI)与简单路由;控制器、路由注解;Hyperf 数据库连接(hyperf/database编写第一个 CRUD 接口(User 表),数据来自 MySQLPostman 测试接口,检查数据库读写

周测试
使用 wrk 对 Swoole HTTP 服务器进行 1000 并发压测,输出 QPS 与错误率报告。编写一个 Hyperf 接口,通过依赖注入获取 Redis 并实现缓存读取。


第 2 周:Hyperf 注解、AOP、中间件与单服务实战
天次学习任务 / 知识点实战要求测试 / 检验方法
周一注解原理、自定义注解;AOP 切面编程,AroundBeforeAfter 切面实现方法耗时统计注解,应用于控制器方法访问接口时日志打印执行时间,验证 AOP 生效
周二中间件(全局、路由级、注解级);跨域处理、参数加密解密中间件编写 Token 校验中间件,保护 /api/* 路由无 Token 请求返回 401,正确 Token 通过
周三请求验证器(hyperf/validation)、异常处理器(App\Exception\Handler为注册接口添加参数校验,统一异常 JSON 返回提交不合规数据,检验返回格式是否统一
周四Redis 缓存(连接池)、Model 缓存;事件机制(Psr\EventDispatcher用户登录后将信息缓存,监听登录事件记录日志通过 Redis 监控命令查看缓存,事件日志文件确认
周五单服务实战:搭建 RESTful 文章系统(含分类、标签),集成缓存、校验、分页完成一套文章 CRUD API,接口遵循 RESTful 规范使用 Postman 跑全部接口,代码评审路由设计

周测试
基于文章系统,增加 @Cacheable 注解(自定义)实现文章详情缓存,并用 Redis 检查命中率。完成一套 PHPUnit 协程测试用例,覆盖文章创建和缓存逻辑。


第二阶段:微服务通信与治理(第 3-6 周)

第 3 周:RPC 与服务拆分
天次学习任务 / 知识点实战要求测试 / 检验方法
周一微服务拆分原则(DDD 入门)、接口边界定义、Proto/Json 契约将前面文章系统拆分为用户服务、文章服务,规划接口提交服务拆分文档及 Protobuf/Json 契约文件
周二Hyperf JSON-RPC 服务端搭建(hyperf/json-rpc),发布服务到注册中心创建用户服务,暴露 getUserById 方法通过 RPC 客户端调用验证返回值
周三RPC 客户端自动生成、@RpcClient 注解使用;自定义负载均衡策略文章服务调用用户服务,获取作者信息记录每次 RPC 调用节点,验证负载算法
周四RPC 超时、重试、连接池配置;服务熔断初探(hyperf/circuit-breaker模拟用户服务宕机,实现降级返回默认值关闭用户服务,文章服务调用返回降级数据
周五统一 RPC 异常处理、跨服务验证 Token 传递将 Token 通过 RPC 上下文传递,用户服务鉴权无 Token 时 RPC 拒绝,客户端收到 403

周测试
压力测试 RPC 调用,观察连接池复用情况。编写集成测试,模拟某服务崩溃时熔断器自动打开,并在半开状态恢复正常。


第 4 周:服务注册发现与配置中心
天次学习任务 / 知识点实战要求测试 / 检验方法
周一Consul 部署(Docker);服务注册与健康检查(hyperf/service-governance将用户、文章服务注册到 Consul,健康检查心跳Consul UI 查看服务状态,停止后自动剔除
周二服务发现与负载均衡;hyperf/load-balancer;加权随机算法文章服务调用用户服务时,基于 Consul 发现多节点启动 2 个用户服务实例,RPC 请求分布均匀
周三配置中心(Nacos/Apollo)集成,hyperf/config-center 动态配置下发将限流阈值、数据库连接等放入 Nacos,服务监听变更修改配置后服务无需重启即生效
周四多环境配置管理、配置加密实现测试/生产环境分离,数据库密码加密存储切换环境变量,服务自动加载对应配置
周五实战:将文章系统和用户服务全量接入 Consul+Nacos,实现无感扩容启动/停止实例,模拟动态伸缩,保证调用正常伸缩过程中持续发送请求,错误率 < 0.1%

周测试
修改 Nacos 配置,观察服务日志中的配置更新事件。中断 Consul Agent,验证服务调用是否降级(文件缓存)。


第 5 周:API 网关、限流与熔断
天次学习任务 / 知识点实战要求测试 / 检验方法
周一API 网关模式讲解;Hyperf 搭建网关服务,动态路由转发(hyperf/http-server 路由)创建网关项目,将请求路由到对应微服务通过网关访问用户服务、文章服务接口
周二全局鉴权:JWT 签发与验证;网关层统一鉴权,向下透传用户信息用户登录获取 JWT,网关校验并将 X-User-Id 传递后端无 JWT 返回 401,服务获取 Header 识别用户
周三限流算法(令牌桶、漏桶);hyperf/rate-limit 注解使用为文章列表接口添加限流(100/s),超出返回 429使用 wrk 压测,超过阈值触发限流
周四熔断降级深入:hyperf/circuit-breaker,配合注解实现服务级别熔断;自定义降级逻辑模拟文章服务超时,网关熔断后返回缓存数据延时注入,观察网关自动熔断及半开恢复
周五网关聚合:批次请求合并、响应裁剪网关提供 /feed 接口,聚合文章列表+作者信息一次请求返回聚合数据,减少客户端调用

周测试
压测网关 + 后端集群,监控限流、熔断指标。完成网关灰度发布策略:根据 Header 将流量分流到不同版本服务。


第 6 周:可观测性——链路追踪与监控
天次学习任务 / 知识点实战要求测试 / 检验方法
周一OpenTracing 规范;Jaeger 部署;Hyperf 集成 hyperf/tracer微服务调用链上报,网关→文章→用户全链路跟踪Jaeger UI 查看完整调用链及耗时
周二自定义 Span、Tag 注入业务信息;链路日志关联为关键业务打点(登录、下单),在 Span 中添加用户 ID搜索用户维度 Trace,定位慢请求
周三日志规范:hyperf/logger 集成 ELK(Filebeat → ES → Kibana)将所有服务日志集中到 ES,结构化 JSON 日志Kibana 按 TraceID 查询日志流
周四Prometheus + Grafana 监控;hyperf/metric 暴露指标收集 QPS、延迟、错误率、协程数,Grafana 仪表盘压测时仪表盘实时刷新,设置 QPS 告警规则
周五服务告警:基于 Prometheus AlertManager 配置邮件/钉钉告警设定延迟 >500ms 告警,触发测试构造慢接口,验证告警消息接收

周测试
完整压测微服务集群,从 Grafana 输出系统瓶颈分析报告。进行故障演练(杀掉某服务实例),观测熔断、监控、告警联动情况。


第三阶段:异步消息与分布式事务(第 7-8 周)

第 7 周:消息队列与事件驱动
天次学习任务 / 知识点实战要求测试 / 检验方法
周一RabbitMQ 基础;hyperf/amqp 生产者、消费者实现;交换机/队列绑定创建订单服务生产者,发送订单创建消息RabbitMQ 管理界面查看消息堆积情况
周二消息可靠性:手动确认、死信队列、幂等消费消费者处理失败时进入死信,保证幂等(基于消息ID去重)重复发送相同消息,数据库只产生一条记录
周三Kafka 与高吞吐场景;hyperf/kafka 使用实现日志收集生产者,发送至 Kafka topicKafka 控制台查看消息写入速率
周四事件总线与内部解耦;Hyperf 异步事件(hyperf/event)与队列事件订单创建后异步触发短信、邮件服务观察消费者并发处理,日志无丢失
周五综合:构建订单通知链,包含重试、延迟消息(死信+TTL)下单 30 分钟未支付发送提醒,取消订单恢复库存时间轮验证延迟消息是否准时触发

周测试
模拟消息队列宕机后重启,验证消息持久化不丢失。压测消费者并发处理能力,调整 maxConsumption 参数优化吞吐。


第 8 周:分布式事务与分布式锁
天次学习任务 / 知识点实战要求测试 / 检验方法
周一分布式事务理论:CAP、BASE;Saga 模式设计设计下单流程的 Saga 步骤:预扣库存→创建订单→扣款绘制 Saga 状态图,定义补偿操作
周二Hyperf 实现 Saga 协调器,基于消息队列驱动步骤编码 Saga 逻辑,订单服务作为协调者正常流程全部执行,查看数据库数据一致性
周三Saga 失败补偿:模拟扣款失败,触发补偿(取消订单、释放库存)人为让扣款服务返回失败,验证补偿链执行库存和订单状态恢复,无脏数据
周四分布式锁:Redis 红锁、hyperf/redis-lock 防止库存超卖秒杀场景,加分布式锁扣减库存高并发下库存扣减数量 = 订单数
周五分布式 Session 与跨服务认证优化;集成 JWT 无状态 + 分布式 Session 兜底网关支持两种方式,用户状态共享多服务实例下,用户登录状态一致

周测试
运行全套 Saga 单元测试,覆盖正向、补偿路径。使用 Jmeter 并发模拟秒杀,检查库存一致性及死锁情况。


第四阶段:综合实战项目(第 9-12 周)

项目一(第 9-10 周):微服务电商核心系统

项目描述:构建用户、商品、库存、订单、网关五大服务,接入 Consul、Nacos、Jaeger,实现全链路压测与限流熔断。模拟“秒杀活动”场景,有趣且具有挑战。

周次天次学习任务 / 知识点实战要求测试 / 检验方法
第 9 周周一项目骨架搭建,定义服务边界、Proto 契约;Docker Compose 开发环境一键启动所有服务及中间件检查所有服务注册到 Consul
周二用户服务:注册、登录、JWT 签发;商品服务:CRUD + 分页缓存独立开发完成,接口自测Postman 调用,缓存命中率检查
周三库存服务:扣减、回补;订单服务:创建订单,RPC 调用库存、商品下单流程整合,使用 RPC 调用下单后库存减少,订单生成
周四网关聚合下单接口,集成限流(下单接口 50/s),JWT 全局鉴权所有客户端请求通过网关压测下单,触发限流
周五集成分布式事务 Saga(下单、扣库存、扣款);延迟队列取消未支付订单完成支付补偿与取消逻辑模拟支付失败,检查库存回补
第 10 周周一秒杀功能:商品打上秒杀标签,独立秒杀接口,预热缓存秒杀接口直接操作 Redis 库存,异步落库Redis 原子扣减,无超卖
周二网关层秒杀限流(令牌桶 500/s)+ 服务层分布式锁双重防护,保证高并发安全Jmeter 5000 并发秒杀测试
周三全链路压测与调优:开启链路追踪,Swoole 协程化 MySQL/Redis 配置找到瓶颈点并优化(索引、连接池)输出压测报告,QPS 达到预期
周四完善监控:Prometheus 采集秒杀指标,Grafana 实时大屏实现秒杀活动监控面板大屏实时刷新
周五项目复盘,代码评审,文档编写输出架构图、压测结果、改进建议PPT 演示,导师评审

测试方法:功能测试(下单全流程)、性能测试(秒杀并发 5000+ 无错误)、故障演练(随机停止服务验证降级与告警)、代码质量评审。


项目二(第 11 周):异步日志采集与实时分析系统

项目描述:构建日志收集服务(HTTP/RSocket 接收),投递 Kafka,消费者解析聚合,存储 ClickHouse/ES,提供统计看板。用于“站点流量监控与异常检测”,实用且有趣。

天次学习任务 / 知识点实战要求测试 / 检验方法
周一系统设计;采集服务:Hyperf 接收日志,异步投递 Kafka(hyperf/kafka实现日志接收接口,批量异步发送wrk 发送海量日志,Kafka 不丢数据
周二消费者:拉取日志,解析 User-Agent、IP 归属地等;富化日志消费者组并发处理,存入 ESKibana 查看结构化日志
周三实时统计:使用 Redis HyperLogLog 统计 UV,滑动窗口统计 PV接口返回实时 UV/PV验证去重与时间窗口精确度
周四异常检测:简单阈值告警,或基于规则发现流量骤增;异步告警通知每分钟 PV 超过阈值触发钉钉告警模拟突发流量,告警触发
周五看板服务:提供图表 API,前端 Echarts 展示;全链路压测优化部署完整系统,压测采集接口 20000 QPS看板数据实时刷新,系统稳定

测试方法:日志完整传输验证(无丢失、乱序),UV/PV 统计算法准确率测试,异常告警延迟 <10s,全链路压力测试采集部分维持 2w QPS 以上。


项目三(第 12 周):高性能 API 网关与流量治理平台

项目描述:自研 API 网关,支持动态路由、插件链、多维度限流、熔断、安全防护,提供可视化后台。这是一款“可商用的微服务网关”雏形,极具深度和实用价值。

天次学习任务 / 知识点实战要求测试 / 检验方法
周一网关架构设计:核心路由匹配(前缀、正则)、动态配置加载路由配置存于 Nacos,网关热更新修改路由配置,网关即时生效
周二插件机制:利用 Hyperf 事件与 AOP 设计插件接口;内置日志、CORS 插件实现请求日志插件(记录请求耗时、状态码)访问任何接口,日志输出
周三高级限流:分布式令牌桶(Redis + Lua),支持按用户、IP、接口限流配置不同维度的限流规则,组合生效测试同一 IP 超额返回 429,其他 IP 正常
周四安全模块:IP 黑白名单、SQL 注入/XSS 检测插件、请求体大小限制配置黑名单 IP,请求被拦截模拟攻击,网关直接返回 403
周五可视化后台(简易):管理路由、插件、限流规则;容器化部署 K8s CronJob网关及后台服务打包成 Docker,编写 K8s 部署文件最终演示:动态修改规则,查看实时流量图,总结三个月学习成果

测试方法:网关稳定性压测(自身 QPS 不低于 5 万),插件热加载验证,恶意请求拦截测试,并通过 K8s 进行滚动更新零中断部署。


整体考核与认证建议

  • 每日:提交当天代码到 Git 仓库,通过自动化 PHPUnit 测试。
  • 每周:完成周测试要求,撰写学习笔记(遇到的坑与优化点)。
  • 每阶段:阶段实战项目代码评审 + 输出架构图及性能报告。
  • 结业:三个综合项目必须全部通过验收,完成至少一次完整压测与故障演练。将最终项目部署至云服务器并演示,由导师打分。

该课程覆盖了从协程原理到生产级微服务治理的全链路技能,通过“理论+每日任务+综合项目”驱动,确保学完即可在实际工作中构建高性能 PHP 微服务体系。

更多推荐