Online Boutique 完整拆解:11 个微服务如何撑起一个云原生电商 Demo
【免费下载链接】microservices-demoSample cloud-first application with 10 microservices showcasing Kubernetes, Istio, and gRPC.项目地址: https://gitcode.com/GitHub_Trending/mi/microservices-demo
想搭一套能演示"浏览、加购、下单"完整流程的微服务电商 Demo,但又不想从零写一堆服务?还希望它真实一点:服务之间真的跨语言、跨进程调用,购物车真的落在 Redis 里,而不是一个 mock 出来的单体应用?这就是 Online Boutique 存在的原因。
它是什么:Google Cloud 出品的微服务样板间
Online Boutique 是 Google Cloud Platform 官方维护的一个 cloud-first 电商演示应用:用户在网页上浏览商品、加入购物车、完成支付,背后由 11 个用不同语言编写的微服务协作完成。它最大的卖点在于"真实且开放"——所有服务围绕 gRPC 和 Protocol Buffers 通信,不依赖任何特定云,任何 Kubernetes 集群(GKE、Minikube、Kind 都行)都能跑起来。
架构拆解:11 个服务,一次下单数据怎么走
把整个系统想象成一家百货商场,每个服务都有自己的角色分工:
- frontend是门店接待员:唯一对浏览器开 HTTP 端口的服务,自动为访客生成会话 ID,其他页面元素都靠它从后场"调货"。
- productcatalogservice是货架:商品数据来自
products.json,支持列表、搜索和单品查询,最轻量的服务之一。 - cartservice是购物车柜台:读写都走 Redis,用户加购了什么、结账前购物车还剩什么,都由它管。
- checkoutservice是收银台主管:下单时它先取购物车,再串联支付、运费估算和邮件通知,是整条链的编排者。
- paymentservice、shippingservice、emailservice分别扮演(模拟)收银员、快递站和客服:扣款、估价发货、发确认邮件,全是 mock 但接口是真实的。
- currencyservice是汇率窗口:对接欧洲央行真实汇率做币种换算,也是全系统 QPS 最高的服务。
- adservice和recommendationservice是门口的广告牌和导购:前者按关键词给文字广告,后者根据购物车内容推荐其他商品。
- loadgenerator则是一群"虚拟顾客":用 Locust 持续发起真实的购物请求,让你随时能看到流量下的服务表现。
数据流向一目了然:loadgenerator打到frontend,frontend再扇出调用目录、购物车、广告、推荐等服务;一旦下单,frontend转交checkout,由它回调支付、物流、邮件和汇率服务,购物车状态则始终落在 Redis 上。想看完整拓扑,看上面的架构图即可。
技术栈速览:为什么故意用这么多语言
| 语言 | 服务 | 搭配理由 |
|---|---|---|
| Go | frontend / productcatalog / checkout / shipping | 高并发场景的首选,前端与编排服务都压得住 |
| C# | cartservice | 演示 .NET 在容器环境下的完整落地,还内置了 Redis/Spanner/AlloyDB 多存储实现 |
| Node.js | payment / currency | 轻量无状态服务,起步成本最低 |
| Python | email / recommendation / loadgenerator | 胶水型、任务型逻辑,写起来最快 |
| Java | adservice | 证明 JVM 服务与其余服务同样能无缝融入 gRPC 生态 |
这种"语言混搭"不是炫技,而是刻意的教学点:微服务落地的真实世界里,团队必然是异构的,gRPC + Protocol Buffers(定义集中在 protos/ 目录)就是让 5 种语言互相通话的契约。
上手路径:从 clone 到访问首页 3 步走
前置条件很简单:kubectl,外加一条 Kubernetes 集群(GKE 或本地 Minikube / Kind 均可)。
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/mi/microservices-demo - 选部署路径:
- 最快路线(GKE):仓库里的
release/kubernetes-manifests.yaml已把所有服务打包好,一条kubectl apply -f ./release/kubernetes-manifests.yaml即可; - 本地开发路线:装好 skaffold,在 Minikube 或 Kind 上执行
skaffold run,它会一次性构建并推送 11 个服务的镜像; - 变体路线:Istio 服务网格、网络策略、Cloud Spanner、Memorystore 等可选模块都在 kustomize/components/ 下,按需叠加。
- 最快路线(GKE):仓库里的
kubectl get pods看到全部Running后,从frontend-externalservice 拿外部 IP 用浏览器访问,一个能逛能买的店面就开张了。
能学到什么:这份代码库的含金量
- 你能读懂一次完整下单的全部环节:从
frontend发起,到checkout编排支付、物流、邮件,跟着调用链走一遍,比看十篇理论文章直观。 - 你能掌握 gRPC 的落地方式:
genproto.sh展示各语言如何从同一份.proto生成桩代码,改一个接口定义、看它如何影响所有客户端。 - 你能学会用 Kustomize 组装部署:基础清单放在 kustomize/base/,每个组件是一份"补丁",这基本就是生产环境 GitOps 的缩影。
- 你能看到存储演进的活例子:
cartservice同时提供 Redis、Spanner、AlloyDB 三种购物车实现(见 src/cartservice/src/cartstore/),"换数据库"在微服务里到底意味着什么,这里写得明明白白。
动手,从你的第一个集群开始
别再收藏了——挑一台机器把 Minikube 拉起来,skaffold run跑通 Online Boutique,然后打开checkoutservice的源码,沿着一次下单把 11 个服务串起来。你会发现,云原生的第一课不在文档里,而在你kubectl get pods的那一刻。
【免费下载链接】microservices-demoSample cloud-first application with 10 microservices showcasing Kubernetes, Istio, and gRPC.项目地址: https://gitcode.com/GitHub_Trending/mi/microservices-demo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考