疏漏总结(四)——微服务

  1. ribbon和feign的区别?

ribbon和feign都是客户端的负载均衡工具,feign的底层就是ribbon去实现的,feign进行了更进一步的封装。但是Ribbon是基于HttpClient和RestTemplate去实现http请求的模拟,而feign是通过接口加注解,将需要调用的Service变成抽象方法,不需要自己构建http请求,使得编写客户端非常容易。

  1. Eureka主要是干啥的?

Eureka里面又分为Eureka Client和Eureka Server,每一个服务我们都可以讲其标记为Eureka Client,然后Eureka Client会将这些组件的信息如ip port,报备到Eureka Server,并且保留一个本地缓存。

这个本地缓存是一个二级缓存,一级缓存是ReadOnly操作,二级缓存是ReadWrite操作,客户端会从一级缓存中读到服务器的信息,而它自己本身如果数据进行了更新,才会写入到二级缓存中。

设置二级缓存最大的好处就在于优化了并发读写的冲突

此外,Eureka还具备心跳和故障检测,如果出现问题,就会删除掉注册表信息,然后同步到二级缓存。

  1. Feign的作用?

我们都知道Feign是专门做服务之间的远程调用的,但是单纯去调服务,我们都得发一个http请求,请求得到相应之后,我们才能建立远程通信,这就要写很多代码,而Feign就进行了封装。

但是我们可以在接口上标记一个FeignClient来标记作为将使用远程调用的接口。

里面有一个知识点,这个远程调用本质上还是使用动态代理(我猜这里应该是走的jvm的反射,因为实现的是一个InventoryService接口)去实现的。

Feign底层的使用的HTTP 通信框架 HttpClient ,先会使用 Ribbon 从本地的 Eureka 注册表的缓存里面取出要调用服务的机器列表出来,然后根据负载均衡算法,选择一台机器出来,然后针对选择出来的机器发送 Http 请求过去。
4. Ribbon

主要用来做负载均衡,默认轮询,和Eureka配合操作。

在这里插入图片描述

  1. Hystrix

当我们多个微服务之间具有一定的依赖关系的时候,其中一个服务因为某种原因挂了,其他的依赖的服务就会因此而阻塞,当请求阻塞到一定程度的时候,就会导致连锁的去挂掉服务,这就需要Hystrix来救场。

Hystrix主要的作用是熔断,降级和隔离。

当一个服务出现问题的时候,Hystrix会直接熔断这个服务,降级就是虽然出现了错误,但是还是给一个出现错误的返回值,回头手动将错误改一下。

Hystrix使用舱壁模式实现线程池的隔离,它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务。
在这里插入图片描述

  1. Zuul

其实大多数网关都是一个意思,用来转发请求,做统一的降级,熔断,安全认证。

请求到网关,他就直接查找到匹配的服务,然后就直接把请求转发给那个服务的某台机器, Ribbon 从 Eureka 本地缓存列表里面获取一台机器,然后通过负载均衡算法选择一台,把请求直接用 http 通信框架发送到指定的机器上面去。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章