初识 Nacos(上) 学习《Spring Cloud 服务发现新选择》

本文来自于个人我的主页: 初识 Nacos(上) 学习《Spring Cloud 服务发现新选择》,转载请保留连接 ;)

最近在从零接触Alibaba 开源项目Nacos,学习的是小马哥(mercyblitz)的技术周报,以前看了后忘记总结,致使也没有什么印象。因此如今决定学习一章,写一篇学习感悟,而且持续更新下去。首先这一章节主要讲得是服务发现(Service Discovery),做为 Spring Cloud 最核心功能特性之一,受到业界的普遍关注。
文章主题html

Spring Cloud 总体架构

在现行的 Spring Cloud 服务发现技术体系中,以 Spring Cloud Eureka 为典型表明,它做为官方推荐解决方案,被业 界普遍运用,然而其设计缺陷也很是之明显。还有Spring Cloud Zookeeper和Spring Cloud Consul。那么先介绍这三种的特色吧。
总体架构java

Spring Cloud Eureka 特色

优势:

  • Spring Cloud 背书 - 推荐服务发现方案
  • CAP 理论 - AP模型,数据最终一致
  • 简单易用 - 开箱即用,控制台管理

缺点:

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

Spring Cloud Zookeeper 特色

优势:

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

缺点:

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

Spring Cloud Consul 特色

优势:

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

缺点:

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

综上所述,让我得出了Spring Cloud服务发现方案对比结果:
方案对比结果git

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

  • 首先都是服务器启动 - 启动注册中心
  • 而后增长客户端依赖 - 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 服务发现的使用上,开发人员将不会心存任何的违和感。spring

Alibaba Nacos 生态介绍

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

下载注册中心

  1. 首先须要获取 Nacos Server,支持直接下载和源码构建两种方式。服务器

    1. 直接下载:Nacos Server 下载页
    2. 源码构建:进入 Nacos Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档推荐使用源码构建方式以获取最新版本

启动注册中心

  1. 启动 Server,进入解压后文件夹或编译打包好的文件夹,找到以下相对文件夹 nacos/bin,并对照操做系统实际状况之下以下命令。网络

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

增长第三方依赖

  1. 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

外部化配置

  1. 在应用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

激活服务发现

  1. 使用 @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;
                }
            }
        }

应用启动

  1. 增长配置,在 nacos-discovery-provider-example 项目的 /src/main/resources/application.properties 中添加基本配置信息
spring.application.name=service-provider
        server.port=18082
  1. 启动应用,支持 IDE 直接启动和编译打包后启动。架构

    1. IDE直接启动:找到 nacos-discovery-provider-example 项目的主类 ProviderApplication,执行 main 方法启动应用。
    2. 打包编译后启动:在 nacos-discovery-provider-example 项目中执行 mvn clean package 将工程编译打包,而后执行 java -jar nacos-discovery-provider-example.jar启动应用。

验证

检验服务发现

在浏览器输入此地址http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=service-provider 并点击跳转,能够看到服务节点已经成功注册到 Nacos Server。

查询服务

相关文章
相关标签/搜索