nacos搭建springcloud服务发现与注册

1.先来看看springcloud主流的三大服务与注册框架

Spring Cloud Eureka 特点
优点:

  • Spring Cloud - 推荐服务发现方案
  • CAP 理论 - AP模型,数据最终一致
  • 简单易用 - 开箱即用,控制台管理
注:CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的。
P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(partition),也就是由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的。
因为P是必须的,那么我们需要选择的就是A和C。
大家知道,在分布式环境下,为了保证系统可用性,通常都采取了复制的方式,避免一个节点损坏,导致系统不可用。那么就出现了每个节点上的数据出现了很多个副本的情况,而数据从一个节点复制到另外的节点时需要时间和要求网络畅通的,所以,当P发生时,也就是无法向某个节点复制数据时,这时候你有两个选择:
选择可用性 A(Availability),此时,那个失去联系的节点依然可以向系统提供服务,不过它的数据就不能保证是同步的了(失去了C属性)。
选择一致性C(Consistency),为了保证数据库的一致性,我们必须等待失去联系的节点恢复过来,在这个过程中,那个节点是不允许对外提供服务的,这时候系统处于不可用状态(失去了A属性)。
最常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其它节点,其它节点提供读取的服务,当两个节点出现通信问题时,你就面临着选择A(继续提供服务,但是数据不保证准确),C(用户处于等待状态,一直等到数据同步完成)。

缺点:

  • 内存限制 - 客户端上报完整注册信息,造成服务端内存浪费
  • 单一调度更新 - 客户端简单轮训更新,增加服务器压力
  • 集群伸缩性限制 - 广播式复制模型,增加服务器压力

Spring Cloud Zookeeper 特点
优点:

  • 成熟协调系统 - Dubbo、Spring Cloud等适配方案
  • CAP理论 - CP模型,ZAB算法,强数据一致性

缺点:

  • 维护成本 - 客户端、Session状态、网络故障
  • 伸缩性限制 - 内存、GC、连接

Spring Cloud Consul 特点
优点:

  • 通用方案 - 适用于 Service Mesh、 Java 生态
  • CAP理论 - AP 模型,Raft+Gossip 算法,数据最终一致

缺点:

  • 可靠性无法保证 - 未经过大规模验证
  • 非 Java 生态 - 维护和问题排查困难

综上所述,让我得出了Spring Cloud服务发现方案对比结果:
nacos搭建springcloud服务发现与注册_第1张图片

那么这三种服务发现的基本模式是怎样的呢?现在来谈谈Spring cloud 服务器发现模式。

  • 首先都是服务器启动 - 启动注册中心
  • 然后增加客户端依赖 - sping-cloud-start-*
  • 最后就是客户端注册 -
    记得在XXApplication.java文件中添加@EnableDiscoveryClient,注解开启服务注册与发现功能。

以下我以Eureka发现模式为例:

  • 首先去Spring
    Initializr快速创建Eureka服务端和客户端应用程序,然后导入自己的IDE。当然你如果嫌麻烦,也可以直接导入已经写好的工程。
  • 然后在resources-application.properties中分别配置好两者的端口号,像客户端这块还需要写好应用名称、以及Eureka
    服务器地址。
  • 最后我们就直接可以runXXApplication.java了,像我的服务端端口是12345,就访问localhost:12345。页面跳转如下图所示,恭喜你的Eureka服务已经起来了。
  • Eureka-client亦如此,成功run起来后,在之前的服务端页面,也就是localhost:12345,刷新下会在Instances
    currently registered with Eureka出现EUREKA-CLIENT的状态信息。

spring-cloud-alibaba-nacos-discovery 作为 Spring Cloud Alibaba 服务发现的核心模块,其架构基础与 Spring Cloud 现行方案相同,均构建在 Spring Cloud Commons 抽象。因此,它在 Spring Cloud 服务发现的使用上,开发人员将不会心存任何的违和感。

Alibaba Nacos 生态介绍

从功能特性而言,spring-cloud-alibaba-nacos-discovery 仅是 Nacos 在 Spring Cloud 服务发现的解决方案,Nacos 在 Spring Cloud 中还支持分布式配置的特性。与开源产品不同的是,Nacos 曾经历过中国特色的超大流量考验,以及巨型规模的集群实施,无论从经验积累还是技术沉淀,现行 Spring Cloud 解决方案 都是无法比拟的。然而这并非说明它完美无缺,在内部的评估和讨论中,也发现其中差距和文化差异。为了解决这些问题,讨论将从整体架构和设计思考两个方面,介绍 Nacos 与 Spring 技术栈整合情况,以及与其他开源方案的适配思考,整体上,降低 Nacos 使用门槛,使迁移成本接近为零,达到“一次开发,到处运行”的目的。
那么接下来我们通过Github上,Spring Cloud Alibaba项目中官方给出的指导文档来配置启动 Nacos吧。

下载注册中心

Nacos 的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务,带管理界面,支持丰富的配置维度。
  • 动态 DNS 服务
  • 服务及其元数据管理

Nacos下载

Nacos依赖于Java环境,所以必须安装Java环境。然后从官网下载Nacos的解压包,安装稳定版的,下载地址:https://github.com/alibaba/nacos/releases

本次案例下载的版本为1.0.0 ,下载完成后,解压,在解压后的文件的/bin目录下,windows系统点击startup.cmd就可以启动nacos。linux或mac执行以下命令启动nacos。

sh startup.sh -m standalone

启动时会在控制台,打印相关的日志。nacos的启动端口为8848,在启动时要保证端口不被占用。珠穆拉马峰的高度是8844,nacos的端口是8848,有点巧合。

启动成功,在浏览器上访问:http://localhost:8848/nacos,会跳转到登陆界面,默认的登陆用户名为nacos,密码也为nacos。
nacos搭建springcloud服务发现与注册_第2张图片

启动注册中心

启动 Server,进入解压后文件夹或编译打包好的文件夹,找到如下相对文件夹 nacos/bin,并对照操作系统实际情况之下如下命令。

  • Linux/Unix/Mac 操作系统,执行命令 sh startup.sh -m standalone
  • Windows 操作系统,执行命令 cmd startup.cmd

增加第三方依赖

首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

配置

在bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件)文件配置以下内容:

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        prefix: nacos-provider
  profiles:
    active: dev

在上面的配置中,配置了nacos config server的地址,配置的扩展名是ymal(目前仅支持ymal和properties)。注意是没有配置server.port的,sever.port的属性在nacos中配置。上面的配置是和Nacos中的dataId 的格式是对应的,nacos的完整格式如下

${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项
    spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当
    spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成
    p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项
    spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml
    类型。

激活服务发现

使用 @EnableDiscoveryClient 注解开启服务注册与发现功能(SpringApplication.run)

        @SpringBootApplication
        @EnableDiscoveryClient
        public class ProviderApplication {

            public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
            }

            @RestController
            class EchoController {
                @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
                public String echo(@PathVariable String string) {
                        return string;
                }
            }
        }

应用启动

启动应用,支持 IDE 直接启动和编译打包后启动。

IDE直接启动:找到 nacos-discovery-provider-example 项目的主类 ProviderApplication,执行 main 方法启动应用。
打包编译后启动:在 nacos-discovery-provider-example 项目中执行 mvn clean package 将工程编译打包,然后执行 java -jar nacos-discovery-provider-example.jar启动应用。
启动nacos,登陆localhost:8848/nacos,创建一个data id ,完整的配置如图所示:
nacos搭建springcloud服务发现与注册_第3张图片

你可能感兴趣的:(springcloud)