本视频介绍SpringCloud基础知识,包括:注册中心、配置中心、网关、服务远程调用、负载均衡、断路器。
几分钟就能掌握SpringCloud的核心功能。
SpringCloud项目调用流程:
注册中心
注册中心持有所有微服务实例信息,比如:ip、服务名字。实例在启动后,会自动向注册中心注册。
为什么需要注册中心呢?
服务调用是需要知道ip等信息的。如果没有注册中心,A、B两个服务如何知道对方IP呢,如果IP变动了如何更新呢?答案是:只能手动修改本服务持有的其他服务的IP等信息。
手动修改太麻烦了,注册中心就解决了这个问题:A服务启动时,将自己的IP等信息告诉注册中心,并从注册中心获取其他服务IP信息(此时没有其他IP信息);B启动时也将自己的IP告诉注册中心,并从注册中心获取其他服务IP信息(此时获取到了A服务的IP信息)。注意,注册中心在收到B服务的注册后,会立即告诉其他服务(A服务)。这样就能自动维护ip信息啦!
配置中心
配置中心很简单,就是将原来application.yml里边的配置放到管理页面中去。
这样有以下好处:
- 修改配置时不用提交代码
- 可以做到动态更新配置
- 动态更新的含义:修改配置后不重启服务就能生效。
- 动态更新要用特定的方式才能生效。见:这里
网关
微服务的请求流程是:请求先到达网关,然后网关转发到特定的微服务应用实例。
为什么微服务要有网关呢?
问得好,这也是一道面试题。答案见:这里
服务远程调用
如果方法是在本项目里边,直接调用就行。微服务跨项目了,怎样远程调用呢?
SpringCloud的微服务远程调用有两种方法:
- feign
- RestTemplate
feign是主流方式,本教程采用feign这种方式。
feign调用的原理:简单来说,feign将方法调用转换成http请求,将方法的入参转为http请求参数,去调用目的服务的Controller(接口),目的服务响应后,本服务将响应数据转换成返回值对应的对象。
负载均衡
负载均衡的含义:应用有多个实例,在调用应用接口时将请求合理地分发到实例上。
比如:订单项目起了两个实例,在feign调用和gateway调用时,通过负载均衡策略来决定调用哪个实例。
负载均衡策略有:
- 轮询:依次选用实例去调用。比如:这次调用了A1,下次就调用A2。
- 随机:随机选择一个实例。
- 响应时间:响应时间越短,权重越高,被选中的可能性越大。
- 并发量:选择一个最小的并发请求的实例。
- 重试:对选定的负载均衡策略加上重试机制,在一个配置时间段内若选择实例不成功,则尝试使用备用策略选择一个可用的实例。
- 其他
断路器
微服务架构的问题:远程调用时,可能因为网络、被调用的服务出现延迟导致调用方对外服务也延迟。若此时调用方的请求不断增加,会因为等待被调用方而积压,导致自身服务的瘫痪。
示例:电商网站中,系统拆分成用户、订单、库存。用户创建订单时,调用订单服务的创建订单接口,创建订单接口调用库存服务扣减库存。若库存服务响应缓慢,会导致创建订单服务的线程被挂起,等待库存服务的响应,用户会因为扣减库存失败得到创建订单失败的结果。如果请求持续增加,挂起的线程在等待库存服务的响应而未能释放,后续创建订单的请求被阻塞,最终导致订单服务也不可用。
断路器本身是一种开关装置,用在电路上保护线路过载,线路中有电器发生短路时,“断路器”能及时切断电路,防止发生过载、导致起火等严重后果。
断路器在微服务中的作用是类似的:某个实例发生故障后,断路器的故障监控会向调用方返回错误响应,而不是长时间等待。这样就避免了线程调用故障服务被长时间占用,避免了故障在分布式系统中的蔓延。
相关书籍
《SpringCloud微服务实战.pdf》 下载地址:这里
请先
!