Spring Cloud Alibaba简介及Nacos入门

目录

前言

一、系统架构演变

二、Spring Cloud和Spring Cloud Alibaba概述

三、Nacos

1.Nacos简介

2.Nacos安装和启动

3.nacos注册中心(存放服务)

3.1、服务提供者:nacos_provider

3.2、服务消费者:nacos_consumer

3.3、为什么要使用注册中心?

4、naocs配置中心(存放配置文件)

4.1、入门案例:nacos_config

4.2、为什么要用配置中心?

4.3、隔离模型 

 5、持久化

5.1、修改nacos配置文件:/usr/local/nacos/conf/application.properties

5.2、在MySQL中建库建表 



前言

        随着互联网的不断发展,互联网应用对高并发、大流量的性能需求不断提高,为了满足这种这种不断发展的性能需求,应用系统的架构也在不断演变以满足系统的性能需求。


一、系统架构演变

  1. 单体架构 

    在网站初期,应用体量比较小的时候,所有的功能模块都集中在一个应用中,打包成一个jar包发布到服务器上,应用和数据库运行在一台服务器上。在用户量不大的时候,单体应用也撑得住,随着用户量的增多,应用的拓展和迭代会遇到很多问题,如:
    1. 代码耦合:所有的功能模块都在一个应用中,边界模糊,依赖关系不清晰,系统单点容错率低;
    2.迭代困难:每次功能迭代和bug修复都需要重新部署整个应用,随着代码的增多,构建、测试和部署需要的时间也会增加;
    3.拓展受限:单体应用只能作为一个整体进行扩展,无法针对特定的模块进行扩展;
  2. 垂直应用架构
    随着用户访问量的增大,单体应用只能通过增加节点来应对,然而并不是每个系统模块访问量都大,此时单体架构就不能满足需求了。而垂直应用架构根据功能模块对系统进行拆分,这样一来既降低了系统的耦合度,也可以针对特定的功能模块进行优化。
    优点
    1、降低了系统的耦合度,提高了单点容错率;
    2、可以针对特定的功能模块进行拆分;
    缺点
    1、各个功能模块之间相互独立,无法互相通信;
    2、各个功能模块之间相互独立,会有重复的开发任务;
  3. 分布式架构
    随着垂直应用越拆越多,重复的业务代码也越来越多,我们就考虑能不能将重复的业务代码抽出来作为独立的业务层,让表现层按需调用业务层,这就是所谓的分布式架构。
    分布式架构将系统拆分成服务层表现层两部分,服务层包含业务逻辑,表现层只负责和页面进行交互,业务逻辑通过调用服务层来实现。
    优点:抽取重复的业务代码,提供了代码的复用性;
    缺点:系统耦合度提高,调用关系复杂,难以维护;
  4. SOA架构
    在分布式架构下,服务间的调用是采用硬编码的方式,当服务越来越多,服务之间的复杂调用关系就会越来越难以维护。为了解决这个问题,我们采用注册中心(Dubbo)对服务进行调度和集中管理。
    优点:注册中心解决了服务间复杂的调用关系,实现了服务间关系的自动调节;
    缺点
    1、服务提供方和服务调用方存在依赖关系,耦合度较高;
    2、服务抽取的粒度太大;
  5. 微服务
    微服务从SOA架构进一步演化而来,将SOA进一步拆分成一个个微小服务,每个微服务独立打包、部署、升级,互不影响。服务间的通讯采用HTTP协议,restful风格的API,JSON格式的数据,采用二进制进行数据传输。
    优点:
    1、隔离性强:各个服务之间相互独立,避免出现级联问题,容错性强;
    2、面向服务:每个服务对外暴露Restful等轻量协议的接口,并通过接口调用其他服务;
    3、单一职责:服务拆分的粒度更小,每个服务都只负责单一业务,避免业务重复开发;
    4、自治:每个服务独立打包、部署、升级,降低运维成本;
    缺点
    1、服务过多,治理成本较高;
    2、系统开发的技术成本较高(容错、分布式事务等);

二、Spring Cloud和Spring Cloud Alibaba概述

        Spring Cloud是微服务系统架构的一套具体实现方案,提供了如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等功能。Spring Cloud没有重复造轮子,而是将市面上一些成熟的框架组件(主要由Netflix公司提供)基于SpringBoot进行整合封装,屏蔽了复杂的配置和实现原理,使得开发者能够更轻松的开发微服务架构的程序。

        Spring Cloud Alibaba是另一套微服务架构的实现方案。由于在2020年Netflix公司停止了对Spring Cloud组件的维护,所以Spring Cloud急需一些替代品,恰好Alibaba开源了自己的微服务组件,解决了Spring Cloud的燃眉之急,Spring Cloud Alibaba就次诞生。

        总结:Spring Cloud和Spring Cloud Alibaba都是基于SpringBoot整合的微服务系统架构的具体实现方案,不同之处在于,Spring Cloud中的组件主要由Netflix公司提供,Spring Cloud Alibaba中的组件大多由Alibaba提供。

三、Nacos

1.Nacos简介

Nacos是Spring Cloud Alibaba中的一个组件,主要充当两个角色:服务管理中心和配置管理中心,功能是服务注册和发现以及服务的配置文件的集中管理和动态更新。

2.Nacos安装和启动

下载地址:Tags · alibaba/nacos · GitHub

解压到指定目录:

[root@localhost ~]# cd /usr/upload
[root@localhost upload]# tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local

启动:

[root@localhost local]# cd nacos/bin/
[root@localhost bin]# ./startup.sh -m standalone #非集群模式启动
... ...
nacos is starting with standalone
nacos is starting,you can check the /usr/java/nacos/logs/start.out

关闭:

[root@localhost bin]# ./shutdown.sh
The nacosServer(3543) is running...
Send shutdown request to nacosServer(3543) OK

测试:

        浏览器访问:http://具体IP:8848/nacos,默认用户名/密码为: nacos/nacos

3.nacos注册中心(存放服务)

3.1、服务提供者:nacos_provider

pom文件:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

  application.yml:

server:
  port: 9090
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.52.131 #nacos服务的地址
  application:
    name: nacos-provider #向注册中心注册的名字

启动类:

@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ProviderApp {

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

3.2、服务消费者:nacos_consumer

pom文件:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

application.yml:

server:
  port: 8080
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.52.131 #nacos服务的地址
  application:
    name: nacos-consumer #向注册中心注册的名字

启动类:

@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ConsumerApp {

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

3.3、为什么要使用注册中心?

  1. 解决微服务服务调用地址硬编码问题;
  2. 解决微服务不能负载均衡的问题;

4、naocs配置中心(存放配置文件)

4.1、入门案例:nacos_config

pom文件:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

bootstrap.yml:

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.52.131
        file-extension: yaml #后缀名,只支持 properties 和 yaml 类型
        prefix: nacos-config #文件名,如果没有配置则默认为 ${spring.appliction.name}
        group: NACOS_GROUP

启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApp {

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

4.2、为什么要用配置中心?

微服务架构下配置文件存在的问题:

1、配置文件相对分散。微服务架构下,配置文件分散在各个微服务中,随着服务越来越多,管理困难。

2、无法区分环境。微服务项目可能会有多个环境,如开发、测试、生产等,每个环境的配置文件可能都不同,如果需要修改,会很困难。

3、无法实时更新:每次修改配置文件后,都需要重启服务才能生效,这对于一个正在运行的项目来说很不友好。

配置中心的作用总的来说就是:

  1. 集中管理配置文件;
  2. 动态更新配置文件;

4.3、隔离模型 

        Namespace  -------------------------- 环境:dev、test、prod

        Group           -------------------------- 项目名:health、jd

        Data Id         -------------------------- 工程名:nacos-config.yaml   health-provider.yaml

 5、持久化

Nacos中的数据默认保存在自带的数据库Derby中,搭建集群的时候,会出现集群中各个节点的数据不统一的问题。要想数据互通,就要采用一个第三方共用数据库(MySQL)进行数据持久化,每个节点都将数据存储到一个相同的第三方数据库,从而实现数据统一。

5.1、修改nacos配置文件:/usr/local/nacos/conf/application.properties

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.52.128:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1111

5.2、在MySQL中建库建表 

执行Nacos压缩包里自带的sql脚本

 

测试:

  1. 重启nacos;
  2. 新建配置;
  3. 观察是否持久化到MySQL中; 

 


 总结

本文仅仅简单介绍了Spring Cloud以及Nacos的安装和使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值