最近在 GitHub 上翻东西,撞见一个 289 星的小仓库:Aks Store Demo。这名字乍看平平无奇,但真把它跑起来之后,我只想说一句——在新奇有趣类的云原生示例项目里,它基本是天花板了。这个项目不是堆文档的玩具,它把一套能真下单、真支付、真出库的模拟电商系统完整塞进 Kubernetes,买家前台、管理后台、商品服务、订单服务、消息队列、数据库,甚至连 AI 推荐服务都有,覆盖的技术栈跨度极大。程序员学 Kubernetes、微服务、DevOps,单看文档不过瘾,拿它当沙盘折腾最合适。接下来我会从它的整体设计思路讲起,把怎么跑、怎么玩、遇到问题怎么排查,全部摊开聊一遍。
1. 项目整体设计与思路拆解
1.1 它到底演示了什么
Aks Store Demo 是一套跑在 Kubernetes 集群里的“网上商店”。用户打开浏览器,能看到商品列表、加购物车、下单;管理员打开另一个界面,能看到订单状态、商品库存和流水信息。表面看就是个 Demo,背后却是十几二十个 K8s 资源在协同工作。
选择“电商购物”作为演示场景,我觉得非常聪明。购物链路足够复杂,能覆盖微服务落地时的大部分经典问题:服务发现怎么做、配置怎么管理、异步消息怎么解耦、状态数据存哪里、流量突增怎么扛、故障怎么观测。同时它又足够贴近日常,哪怕是没接触过分布式系统的新人,也知道“下单”这件事应该发生什么,不至于对着抽象的技术名词一头雾水。
我第一次跑通的感受是:其他 Demo 教你怎么写一个 hello world,这个项目教你怎么理解一家“公司”的系统是怎么转起来的。
1.2 为什么说它是“新奇有趣类天花板”
GitHub 上示例项目很多,但大部分分成两类:一类是纯 README,贴几个 YAML 让你自己拼,跑不起来;另一类是过度封装,上来就是一大套云平台定制服务,本地根本玩不了。Aks Store Demo 刚好卡在中间,既保留了完整的业务逻辑,又做了足够多的简化,让普通开发者在本地集群里也能还原一条真实业务链路。
它新奇在哪?首先是“看得见”:你点点鼠标下单,RabbitMQ 交换机里的消息条数会跳,后端日志会滚,数据库里会多一条记录,整个链路是活生生的。其次是“玩得开”:你可以随便删一个 Pod、停一个服务、给某个服务加压力,看系统怎么自愈、怎么变慢、怎么报错,这些都能作为故障演练素材。
在“有趣”这个维度上,它确实到了天花板级别。
1.3 核心组件和它们的分工
我拉下仓库后列了一下服务清单,用一张表能看得很清楚:
| 组件名称 | 技术栈 | 核心职责 |
|---|---|---|
| store-front | ASP.NET Core / Vue | 买家前台,展示商品、购物车、下单入口 |
| store-admin | Vue.js | 管理员后台,查看订单、商品、健康状态 |
| product-service | Python Flask | 商品列表与详情查询 |
| order-service | Node.js | 创建订单、写订单数据 |
| makeline-service | Node.js | 监听消息队列,处理“生产装配”订单 |
| rabbitmq | Erlang / RabbitMQ | 订单异步消息队列 |
| mongodb | NoSQL | 商品、订单等数据存储 |
| ai-service | Python | 个性化推荐接口,可按需开关 |
整体调用链大概是:买家在前台把商品加进购物车,结算时请求打到 order-service,订单服务把消息丢进 RabbitMQ,同时订单落库;makeline-service 从队列里拿到消息,模拟生产线把订单状态改成“已处理”;管理员在后台查订单时,看到的就是这一串状态变化。product-service 负责给前后台供商品数据,ai-service 再基于订单记录给用户推荐相关商品。
这种拆分方式很典型,每个服务的边界清楚,职责单一,很适合拿来分析“微服务到底怎么切分”。
2. 核心细节解析与实操要点
2.1 中间件选型:为什么是 RabbitMQ 加 MongoDB
不少人会问:都 2025 年了,为什么这个 Demo 还用 RabbitMQ,不用 Kafka?换掉 MongoDB,用 PostgreSQL 不行吗?
我觉得这是它刻意保持“入门友好”的结果。RabbitMQ 有现成的管理控制台,打开浏览器就能看到队列深度、消费者数量、消息流速,对学习者来说,理解“生产者—队列—消费者”这套模型几乎没有门槛。Kafka 虽然现在很流行,但部署和概念复杂度都高出不少,不适合作为一个演示项目的主力队