Spring Cloud 核心组件

本贴最后更新于 1989 天前,其中的信息可能已经天翻地覆

Eureka(注册中心)

每个微服务都有一个 Eureka Client 组件,专门负责将这个服务的信息注册到 Eureka Server 中,也就是告诉 Eureka Server,自己在哪台机器上,监听着哪个端口。而 Eureka Server 是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。

Feign(REST 客户端)

Feign 是一个声明式 REST 客户端,主要是为了简便服务调用,更快捷、优雅地调用 HTTP API。主要是实现原理是用动态代理,你要是调用哪个接口,本质就是调用 Feign 创建的动态代理。

Ribbon(负载均衡)

Ribbon 的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上,默认使用的最经典的 Round Robin 轮询算法(如果发起 10 次请求,那就先让你请求第 1 台机器、然后是第 2 台机器、第 3 台机器,接着再来—个循环,第 1 台机器、第 2 台机器。。。以此类推)

Hystrix(熔断器)

微服务框架是许多服务互相调用的,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务也挂。Hystrix 是隔离、熔断以及降级的一个框架。如果调用某服务报错(或者挂了),就对该服务熔断,在 5 分钟内请求此服务直接就返回一个默认值,不需要每次都卡几秒,这个过程,就是所谓的熔断。但是熔断了之后就会少调用一个服务,此时需要做下标记,标记本来需要做什么业务,但是因为服务挂了,暂时没有做,等该服务恢复了,就可以手工处理这些业务。这个过程,就是所谓的降级。

Zuul(服务网关)

Zuul,也就是微服务网关。这个组件是负责网络路由的。假设你后台部署了几百个服务,现在有个前端兄弟要来调用这些服务,难不成你让他把所有服务的名称和地址全部记住,这是不现实的,所以一般微服务架构中都必然会设计一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。

总结

  1. 第一步:服务注册
  2. 第二步:服务发现
  3. 第三步:负载均衡
  4. 第四步:服务调用
  5. 第五步:隔离、熔断与降级
  6. 第六步:网关路由

各个服务启动时,Eureka Client 都会将服务注册到 Eureka Server,并且 Eureka Client 还可以反过来从 Eureka Server 拉取注册表,从而知道其他服务在哪里。服务间发起请求的时候,基于 Ribbon 做负载均衡,从一个服务的多台机器中选择一台。基于 Feign 的动态代理机制,根据注解和选择的机器,拼接请求 URL 地址,发起请求。发起请求是通过 Hystrix 的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。如果前端、移动端要调用后端系统,统一从 Zuul 网关进入,由 Zuul 网关转发请求给对应的服务。

  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...