SpringCLoud个人总结
2022-09-22 22:47:18

最近学习了how2j.cn的SpringCloud的教程,加上自己之前零零散散读的一些博客文章。想着做一个总结,来输出一下自己对SpringCLoud的理解。也是自己对SpringCLoud的知识的一个梳理和系统化的过程。由于自己也是在学习的过程,可能某些不是十分准确。
以下是自己目前阶段对于SpringCloud的总体理解,随着深入的学习可能会在写一些具体应用的文章

传统的分布式:

主要将项目工程,数据库服务,缓存等服务部署在不同的机器上来达到高可用的状态。比如:同样的整个项目工程部署了3份到3个不同的机器,Mysql服务部署到了第4台机器。

目前主流的微服务

  • 将原来的整个项目拆分成不同的模块。比如:电商项目可以拆分成支付模块、订单模块、库存模块等。这些模块可以作为一个小项目来进行独立的开发、运维和技术选型。在部署时将这些模块作为一个个小项目独立的部署到多台机器上,比如订单模块和支付模块部署5份,库存模块部署3份等。这里可以称做这些小模块为:一个个的微服务
  • 这些微服务由SpringCLoud的Eureka注册中心来进行统一的管理,包括微服务的注册,发现。比如订单模块有5份实例可以使用,则可以用Ribbon或者Feign来进行负载均衡,比如当有1万个请求过来时,就可以将请求尽量均匀地打到这5个服务,可能A服务接受处理2300个请求,B服务处理了2000个请求等等。这时可能出现这样的情况,比如A服务挂掉了(比如A服务的机器突然关机、内存不足等情况),那么A服务就无法在继续处理发来的请求,或者B服务调用A服务的请求,这时如不进行处理就会出现服务阻塞或者页面报错的情况。这就引出了SpringCloud的另一个组件Hystrix,它就是用来解决上述问题的。上面描述的服务部署到了许多太机器,那么这些机器可能会有不同ip和端口,这时就需要网关Zuul或者GateWay来统一ip和端口访问。同时不同的服务会都会有配置文件,如果这些相同的配置,每改动一个地方都要一个一个配置文件的去改,显然太麻烦了。这个可以交由configServer来统一完成。

    上面对于微服务描述了一大段。目的就是引出SpringCLoud的主要功能和实现功能的五大组件:

  1. Eureka(服务发现框架)
    Eureka主要包含两个部分:
  • Eureka Server 注册中心
  • Eureka Client 服务提供者和消费者

Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,包括主机与端口号、服务版本号、通讯协议等。这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka服务端支持集群模式部署,首尾相连形成一个闭环即可,集群中的的不同服务注册中心通过异步模式互相复制各自的状态,这也意味着在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。
应用时需要在启动类上加上@EnableEurekaServer声明一个注册中心

Eureka Client:主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。
应用时需要在启动类上加上@EnableDiscoveryClient或者@EnableEurekaClient表明这是一个Eureka客户端

服务调用:服务消费者在获取服务清单后,通过服务名可以获取具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询(默认的负载均衡策略)的方式进行调用,从而实现客户端的负载均衡。


未完待续 …

Prev
2022-09-22 22:47:18
Next