Nacos 服务发现

1. Nacos简介

1.1 服务发现产品对比

目前用的比较多的服务发现中心有:Nacos、Eureka、Consul 、Zookeeper

Nacos 服务发现_第1张图片 Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案

nacos官网地址:https://nacos.io

1.2 Nacos特性

Nacos主要提供以下四大功能

(1)服务发现和服务健康监测

Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求

(2)动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

(3)动态 DNS 服务

Nacos提供基于DNS协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在Nacos上的服务以域名的方式暴露端点,让三方应用方便的查阅级发现

(4)服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略

2. 安装Nacos Server

2.1 预备环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置。
  3. Maven 3.2.x+;下载 & 配置。

2.2 下载源码或者安装包

你可以通过源码和发行包两种方式来获取 Nacos。

从 Github 上下载源码方式

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

下载编译后压缩包方式

您可以从 最新稳定版本 下载 nacos-server-$version.zip 包。

  unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

2.3 启动服务器

nacos的默认端口号是8848,需要保证8848默认端口号没有被其他进程占用。

进入安装程序的bin目录:

Linux/Unix/Mac启动方式:

启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:

bash startup.sh -m standalone

Windows

启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

或者双击startup.cmd运行文件。

启动成功,可以通过浏览器访问http://126.0.0.1:8848/nacos,进入nacos登录页面

使用默认用户名:nacos,默认密码:nacos 登录即可打开主页面

2.4 外部mysql数据库支持

1.安装数据库,版本要求:5.6.5+ ,mysql 8以下

2.初始化mysql数据库,新建数据库nacos_config,数据库初始化文件:${nacoshome}/conf/nacos-mysql.sql

3.修改${nacoshome}/conf/application.properties文件,增加支持mysql数据源配置,添加mysql数据源url,用户名和密码

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

db.user= #换成自己的数据库用户名

db.password = #换成自己的数据库密码

3 RESTful服务发现

3.1 服务注册

在服务提供工程中配置nacos服务发现相关配置

服务提供:

spring:

  application:

    name: nacos-restful-provider

  cloud:

    nacos:

      discovery:

        server-addr: 127.0.0.1:8848

启动nacos

启动服务提供

观察nacos服务列表,nacos-restful-provider注册成功

3.2 服务发现

在服务消费工程中配置nacos服务发现相关的配置:

服务消费:

spring:

  application:

    name: nacos-restful-consumer

  cloud:

    nacos:

      discovery:

        server-addr: 127.0.0.1:8848

修改Controller中远程调用的代码

//服务id即注册中心中的服务名

private String serviceId = "nacos-restful-provider";

//通过负载均衡发现地址,流程是从服务中心拿到nacos-restful-provider服务列表,通过负载均衡算法获取一个地址

@Autowired

LoadBalancerClient loadBalancerClient;

@GetMapping(value = "/service")

public String service(){

     // 远程调用

      RestTemplate restTemplate = new RestTemplate();

     //发现一个地址

      ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);

      //获取一个http://开头的地址,包括ip和端口

      URI uri = serviceInstance.getUri();

      //调用服务

      String result= restTemplate.getForObject(uri+"/service",String.class);

      return "consumer invode | "+result;

}

3.3 负载均衡

在RESTful服务发现的流程中,ServiceA通过负载均衡调用ServiceB

负载均衡就是将用户的请求通过一定的策略,分摊在多个服务实例上执行,它是处理高并发、缓解网络压力和进行服务端扩容的重要手段之一。它分为服务端负载均衡客户端负载均衡

服务器端负载均衡

 在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡服务器按照某种配置好的规则(负载均衡算法)从可用服务实例清单中选取其一去处理客户端的请求。这就是服务端负载均衡。

客户端负载均衡

 LoadBalancerClient就是一个客户端负载均衡器,具体使用的是Ribbon客户端负载均衡器。

Ribbon在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这就是客服端负载均衡,即在客户端进行负载均衡的分配。

    Ribbon是一个客户端负载均衡器,它的责任是从一组实例列表中挑选合适的实例,如何挑选?取决于负载均衡策略

Ribbon核心组件IRule是负载均衡策略接口,如下实现

  1. RoundRobinRule(默认):轮询策略,即按一定的顺序轮换获取实例的地址。
  2. RandomRule:随机策略,即以随机的方式获取实例的地址
  3. AvailabilityFilteringRule:可用过滤策略,会先过滤掉由于多次访问故障而处于短路跳闸状态的服务,以及并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
  4. WeightedResponseTimeRule:响应时间加权策略,根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的几率越高;刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换             到 WeightedResponseTimeRule
  5.  RetryRule:重试策略,先按照RoundRobinRule策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务
  6.  BestAvailableRule:最低并发策略,会先过滤掉由于多次访问故障而处于短路跳闸状态的服务,然后选择一个并发量最小的服务
  7.  ZoneAvoidanceRule:区域权衡策略,默认规则,复合判断server所在区域的可能性和server的可用性选择服务器

3.5 小结

服务注册与发现流程:

1、服务提供方将自己注册到服务注册中心

2、服务消费方从服务注册中心获取服务地址

3、通过客户端负载均衡器进行远程调用

你可能感兴趣的:(java,服务发现,java)