弄浪的鱼

记得一年前 Spring Cloud、Docker + k8s 才刚才火起来呀,当时公司的系统刚转成 Docker 部署,使用的分布式框架任然是 Dubbo。

现在也就相隔一年半, JD 上 Spring Cloud 已经成标配了,份额看着比 Dubbo 还大。Docker + k8s 也已经是一个加分项被写在 JD 上了。

为了知识体系的完整性,今天撸了一个 Spring Cloud 的 Demo。

Demo 用到了 Spring Cloud 最核心的几个功能,上图来说明系统架构。

Spring Cloud Demo 架构

  • 服务注册中心 Eureka:用于服务的注册与发现,服务注册中心保存每一个系统服务名称、IP 地址和端口等信息。服务调用的时候根据服务名称到注册中心找注册信息,就可以实现远程服务的调用。
  • 负载均衡 Ribbon:Ribbon 是 Netflix 发布的负载均衡器。Ribbon 和 Eureka 配合使用,Ribbon 从 EurekaServer 获取一份注册表,再使用负责均衡算法选择调用哪个服务。比如说这里的订单系统要调用库存系统,库存系统在 Eureka 注册了两个服务,Ribbon 就会帮我们选择调用哪一个库存服务。
  • 接口调用 Fegin:微服务之间通过 Rest 接口通讯,Spring Cloud 中使用 Feign 来调用 Rest 接口。
  • 微服务网关 Zuul:由于我们使用的是微服务,可能有成百上千的接口,不可能让前端记住这么多接口然后来调用。而且这么多接口暴露出来也存在很大的安全分线。所以使用 Zuul 来做转发服务、安全认证的事情。

以上,一套 Spring Cloud 的核心架构就齐活了,当然还有服务熔断、配置管理的功能没有加上,作为一个 Demo 是够了。