Spring Cloud Alibaba 之 Nacos


Nacos 技术讲解

一提到分布式系统就不的不提一下 CAP 原则

什么是CAP

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

CAP 的原则下 Alibaba Naos 同时支持AP和CP模式,他根据服务注册选择临时和永久来决定走AP模式还是CP模式,他这里支持CP模式对于我的理解来说,应该是为了配置中心集群,因为nacos可以同时作为注册中心和配置中心,因为他的配置中心信息是保存在nacos里面的,假如因为nacos其中一台挂掉后,还没有同步配置信息, 就可能发生配置不一致的情况., 配置中心的配置变更是服务端有监听器,配置中心发生配置变化, 然后服务端会监听到配置发生变化,从而做出改变
下面我搭建一个简单的微服务系统,针对这个系统进行讲解

(个人服务器,流量有限 ,请大家珍惜)点击项目体验地址https://ityml.com/index

系统架构图:

这个主要完成一个一个前端页面进行实时计算的功能,大家可以理解为一个简单的计算器.

  • website : 前端
  • Gateway :服务网关
  • UserCenter : 用户服务
  • MqCenter: 消息服务
  • AlogirthmCenter: 计算服务
  • ConfigCenter: 配置中心
  • ServiceDiscovery(Nacos):服务发现
  • CPP 为C 语言编写的计算流程

此项目包括用到的技术栈包括,Spring Cloud Alibaba/Spring Boot/Mysql/MQ/Linux 等

什么是Nacos

官方文档

Nacos提供「注册中心」、「配置中心」和「动态DNS服务」三大功能。
上面是Nacos 的官网大家可以自行了解下,对Nacos 做一个深入的了解,正所谓师傅领进门,修行在个人,大家还要多学习,多了解

天也不早了 ,人也不少了,闲话少说,先干正事。
** Nacos 下载地址**
选择对应版本进行解压(注意 Nacos 解压后 是一个完整的运行包,如果用的不熟练,不要动里面的配置信息)

有的同学私信我说不知道该如何选择Nacos 版本,这里补充一下Nacos 版本的选择技巧
在项目中我们会引入引入一下dependencyManagement

 

        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.SR3
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            

        
    

shift+鼠标左键 开打 spring-cloud-alibaba-dependencies 后会进入到

 
        1.6.3
        3.1.0
        0.7.1
        1.1.1
        0.8.0
        1.0.9
        1.0.1
        4.4.1
        1.0.5
        2.44.0
        2.0.2
        2.1.6
        2.7.3
        2.7.1
        2.7.1
        1.1.0
        1.1.8.6
        1.1.1
    

搜索nacos 后会发现 1.1.1 nacos 版本为 1.1.1,所以我们在下载naocs 的时候也尽量选择1.1.1 版本 作为服务端
这里的版本是跟着 spring-cloud-alibaba 的版本走的 不用的版本的 spring-cloud-alibaba 集成的Nacos 客户端的版本也是不一样的,所以在选择nacos 服务端的
时候要看好版本,防止出现不兼容的情况。

下载完成后解压后进入到 bin 目录 在终端运行命令

  • MAC
    sh startup.sh -m standalone
    (standalone代表着单机模式运行,后看会单独讲解集群模式的搭建和启动方法)
  • Windows
    cmd startup.cmd

启动成功后 默认账号密码 nacos/nacos(初始账号密码)

登录后可以看到右上角中英文切换,英语不好的同学们 可以切换到中文

  • 配置管理主要是用来做项目配置,比如配置文件等可以用nacos来管理 因为nacos不仅仅是服务中心,也是配置中心(后面有讲)
    我们开发项目的配置一般有以下几种做法:
    1. 硬编码--作为类字段的形式存在,导致:动态修改困难,没有持久化
    2. 配置文件( properties、yml 文件等)--导致:配置动态变更,可能需要重启应用,让配置生效。当然,你也可以在代码中增加一个定时任务,如每隔 10s 读取配置文件内容,让最新的配置能够及时在应用中生效,这样也就免 去了重启应用这个“较重”的运维操作。
    3. DB 配置表--导致:配置动态变更,可能需要通过暴露管理接口去解决。

Nacos 真正将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来不仅如此,Nacos提供 DNS-F功能, 可以与K8S、Spring Cloud和Dubbo等多个开源产品进行集成,实现服务的注册功能。

  • 服务发现使用来管理注册到nacos 上的微服务,可以实现服务下线等功能。
  • 命名空间是用来做服务环境区分,当项目需要开发,测试, 生产等多个不同的配置, 命名空间就可以做配置隔离。
  • 集群管理 后面会单独讲解

Nacos 服务发现领域模型

  • Namespace 命名空间,具体作用上面已经讲过了,Group 使用是服务分组,默认的是default ,Group 可以把不同的微服务,划分到统一个分组里,可以方便管理,但是在alibaba 0.9.0 里是没有用到这个
  • Service 微服务(用户微服务),Cluster 是微服务的集群,是对指定微服务的一个虚拟划分,为了容灾,微服务会同时部署多个区域多个机房,比如 beijing ,shanghai 等 Cluster
  • Instance 微服务实例
    具体使用方法会在下一节讲解
    Nacos 元数据
  • 提供描述信息
  • 让微服务调用更加灵活,比如 服务在线上会多个版本共存,用户的V1 版本调用支付的V1版本,用户的v2版本调用支付的v2版本,v1v2 不能相互调因为不兼容,这种场景显示中很多,用元数据就很好解决
    这个问题,元数据的格式为 key=value
    下一章会讲解如何在Nacos 上注册一个简单的微服务

相关