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,也就是微服务网关。这个组件是负责网络路由的。假设你后台部署了几百个服务,现在有个前端兄弟要来调用这些服务,难不成你让他把所有服务的名称和地址全部记住,这是不现实的,所以一般微服务架构中都必然会设计一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。
总结
- 第一步:服务注册
- 第二步:服务发现
- 第三步:负载均衡
- 第四步:服务调用
- 第五步:隔离、熔断与降级
- 第六步:网关路由
各个服务启动时,Eureka Client 都会将服务注册到 Eureka Server,并且 Eureka Client 还可以反过来从 Eureka Server 拉取注册表,从而知道其他服务在哪里。服务间发起请求的时候,基于 Ribbon 做负载均衡,从一个服务的多台机器中选择一台。基于 Feign 的动态代理机制,根据注解和选择的机器,拼接请求 URL 地址,发起请求。发起请求是通过 Hystrix 的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。如果前端、移动端要调用后端系统,统一从 Zuul 网关进入,由 Zuul 网关转发请求给对应的服务。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于