服务治理是微服务架构中最核心最基本的模块,用于实现各个微服务的自动化注册与发现。它是微服务架构中非常重要的一个组件,在微服务架构中起到了一个协调者的作用。

服务注册

  在服务治理框架中,都会创建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去检测清单中的服务是否可用,如果不可用,需要在服务清单中提出不可用的服务。

服务发现

  服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

微服务架构之服务治理与服务调用_spring

常见注册中心

1,Zookeeper

  zookeeper是一个分布式服务框架,是apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

2,Eureka

  Eureka是springCloud Netflix中的重要组件,主要作用就是服务注册和发现。但现在已经闭源。

3,Consul

  Consul是基于GO语言开发的工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理功能。Consul的功能很实用,其中包括:服务注册/发现、健康检查、key/value存储,多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,再执行对应的启动脚本即可。

4,Nacos

  Nacos是一个更易于构建云原生应用动态服务发现、配置管理和服务管理平台。它是Spring Cloud Alibaba组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config。

将微服务注册到Nacos

1,在pom.xml中添加nacos依赖,spring-cloud-starter-alibaba-nacos-discovery

2,在主类上添加@EnableDiscoveryClient

3,在application.yml中添加nacos服务的地址

4,启动微服务,即可实现自动注册到nacos

负载均衡

  负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。根据负载均衡发生的位置不同,一般分为服务端负载均衡和客户端负载均衡。服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡。而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。我们在微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定服务由哪个提供者执行。

微服务架构之服务治理与服务调用_客户端_02

Ribbon

   Ribbon是SpringCloud的一个组件,他可以让我们使用一个注解就能轻松的搞定负载均衡。

1,在RestTemplate的生成(Bean)方法上添加@LoadBalanced注解

2,配置负载均衡策略,yml配置文件中:服务名:ribbon:策略

  Ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule,典型策略有BestAvailableRule、AvailabilityFilteringRule、WeightedResponseTimeRule。

服务调用

  在微服务架构中,通常存在多个服务之间的远程调用请求。目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。

Feign

  Feign是SpringCloud提供的一个声明式的伪Http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了Feign,Feign默认集成了Ribbon,所以在Nacos下使用Feign默认就实现了负载均衡的效果。

 1,加入Fighn依赖

2,在主类上添加Feign注解@EnableFeignClients