Eureka
- 服务注册发现中心。
- 比如一个微服务架构的电商系统,分为会员、订单、促销、积分、库存等服务系统。那么会员支付的流程如下:调用订单服务,修改订单状态,调用会员积分服务等增减积分,调用库存服务加减库存等等。
- 那么这些服务都部在不同的机器上,服务间是怎么调用的呢?
- 这时Eureka就登场了,上述每个服务都有一个Eureka Client组件,这个组件负责把该服务的信息注册到Eureka Server上。大概就是告诉Eureka Server自己的服务的IP、端口号等信息。
- 比如当订单服务需要调用积分服务时,Eureka Client就会向Eureka Server询问一下积分的地址、端口号等信息,然后可以把注册表缓存到本地。这样获取到接口的具体信息,就可以直接通过接口方法调用服务了。
Feign
- 传统项目调用其他接口时需要HTTPClient构造各种请求报文、网络请求等等,但是SpringCloud Feign为我们提供了更为优雅的解决方案。
- 没有底层建立连接、解析等等一系列冗杂的代码,只需要使用注解定义一个FeignClient接口,然后直接调用那个接口就可以了。就像使用@Service注解,然后调用服务层方法时只需要将服务注入,然后就可以直接调用service方法。
Ribbon
- 主要负责负载均衡。
- Ribbon使用轮询算法,均匀的把请求分发到各个服务器节点。比如如果服务部署在5台服务器,那么第一次请求第一台服务器,接下来就会请求第二台,依次第三台…接着循环请求各个服务器。
Hystrix
- Hystrix是熔断、降级的一个架构。
- 比如一个电商系统,订单接收到100个下单请求,但是下单完成调用积分服务时积分服务挂掉了,那么每次下单都要在积分这块卡住一段时间,直到积分连接超时异常。当订单积累很多的服务待处理,然后其他调用订单的服务也会为此连接超时,导致服务雪崩。
- 此时就轮到Hystrix工作了,Hystrix会为每个请求服务做一个小线程池,比如订单请求积分服务是一个线程池,请求促销服务也是一个线程池,当积分服务挂了后不会影响其他服务工作。所以当积分挂了后,不必每次都卡住一段时间,不走网络请求直接将其熔断。当然,熔断也不是什么都不干,每次调用积分,可以在数据库加一条记录,记录本次加减积分,订单情况等。
Zuul
- 微服务网关。
- 如果前端、移动端要调用后台服务,统一从Zuul网关进入,由网关转发请求到指定的服务。这样即使后台几百个服务,前端也不必记住所有的服务名。
参考 拜托!面试请不要再问我Spring Cloud底层原理