Spring Cloud Alibaba Nacos_配置中心与服务发现(六)–综合架构实战(5)

一、 Nacos 服务发现-Spring Cloud Alibaba 综合架构实战(五) -实现 gateway 网关。

1、什么是网关?

原来的单体架构,所有的服务都是本地的,UI 可以直接调用,现在按功能拆分成独立的服务,

跑在独立的一般都在独立的虚拟机上的 java 进程了。

客户端 UI 如何访问?
他的后台有 N 个服务,前台就需要记住管理 N 个服务,一个服务下线/更新/升级,

前台就要重新部署,这明显不符合拆分的理念,特别是当前台是移动应用的时候,
通常业务变化的节奏更快。另外,N 个小服务的调用也是一个不小的网络开销。

有了网关作为服务统一入口,就可以避免上述问题,不仅如此,服务网关是在微服务前面设置一道屏障,

请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。有了服务网关可以提高微服务的安全性,
网关请求的合法性,请求不合法将被拦截,拒绝访问。

网关提供统一服务入口,让微服务对前台透明。
网关聚合后台的服务,节省流量,提升性能。
网关提供安全、过滤、流控等 API 管理功能。

2、什么是 Zuul ?

Spring Cloud Zuul 是整合 Netflix 公司的 Zuul 开源项目实现的微服务网关(API Gateway)。

它实现了请求路由、负载均衡、校验过滤等功能。

Zuul 官网:https://github.com/Netflix/zuul 

  nacos-server-31.png

3、Zuul 与 Nginx 在实际项目中,需要配合使用,Nginx 的作用是反向代理、负载均衡, Zuul 的作用是保障微服务的安全访问,拦截微服务请求,校验合法性及负载均衡。

  nacos-server-32.png

4、在 api-gateway 子模块的 pom.xml 配置文件中,引入 所需 依赖项。


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>nacos-micro-service</artifactId>
        <groupId>djh.it</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>api-gateway</artifactId>

    <dependencies>

        <!-- 引入 service-1-api 二级子模块依赖 -->
        <dependency>
            <groupId>djh.it</groupId>
            <artifactId>service-1-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入 service-2-api 二级子模块依赖 -->
        <dependency>
            <groupId>djh.it</groupId>
            <artifactId>service-2-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- 引入 nacos 配置管理 依赖项 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- 引入 nacos 服务发现 依赖项 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 引入 zuul 依赖项 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

        <!-- 引入 feign 依赖项 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

    </dependencies>

</project>

<!-- C:\java-test\idea2019\nacos_discovery\nacos-micro-service\api-gateway\pom.xml -->

5、在 api-gateway 子模块中,创建 配置文件 bootstrap.yml


##C:\java-test\idea2019\nacos_discovery\nacos-micro-service\api-gateway\src\main\resources\bootstrap.yml

server:
  port: 56010  # 启动端口 命令行注入。
#port: ${port:56010}  # 启动端口设置为动态传参,如果未传参数,默认端口为 56010
#servlet:
#context-path: /application1

spring:
  application:
    name: api-gateway  #spring应用名, # 注意 FeignClient 不支持名字带下划线
  main:
    allow-bean-definition-overriding: true # SpringBoot2.1 需要设定。
  cloud:
    nacos:
      discovery:  # 表示服务发现
        server-addr: 127.0.0.1:8848  # nacos 服务器地址
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)
        cluster-name: DEFAULT
      config:  # 表示配置管理
        server-addr: 127.0.0.1:8848  # 配置 nacos 中心地址
        file-extension: yaml  # 配置文件后缀名。
        namespace: b75c342f-8aeb-4f5a-a1d3-21f0738d7960  # dev开发环境(nacos-1.1.3)。
        group: NACOS_MICROSERVICE_GROUP  # xx业务组。



6、浏览器地址栏输入:http://127.0.0.1:8848/nacos 登录 nacos 服务,在配置列表的,dev 开发环境,创建新配置。


Data ID : api-gateway.yaml
Group : NACOS_MICROSERVICE_GROUP
配置格式 :YAML 
配置内容 :
zuul:
  routes:
    application1:
      stripPrefix: false
      path: /application1/**
	  

   nacos-server-33.png

   nacos-server-34.png

7、在 api-gateway 子模块中,创建 网关 启动类 ApiGatewayBootstrap.java


/**
*   C:\java-test\idea2019\nacos_discovery\nacos-micro-service\api-gateway\src\main\java\djh\it\microservice\gateway\ApiGatewayBootstrap.java
*
*   2024-4-13  在 api-gateway 子模块中,创建 网关 启动类 ApiGatewayBootstrap.java
*/

package djh.it.microservice.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ApiGatewayBootstrap {
   public static void main(String[] args) {
       SpringApplication.run(ApiGatewayBootstrap.class, args);
   }
}


8、运行 网关 启动类 ApiGatewayBootstrap.java 进行测试,

再次 在浏览器地址栏输入:http://localhost:56010/application1/service
输出结果变为:test | Consumer invoke | Provider invoke

  nacos-server-35.png

   nacos-server-36.png

二、Nacos服务发现-课程总结

1、什么是微服务?

微服务:是一种软件架构方法,它将应用程序分解为一系列小型、独立的服务。

每个服务都负责特定的业务功能,并且可以独立开发、部署和扩展。
这种架构强调服务之间的松散耦合,使得系统更加灵活、可扩展,并且易于维护。

2、什么是服务发现?

服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,
以便其他服务能够快速的找到这些已注册的服务。

目前市面上用的比较多的服务发现中心有:Nacos, Eureka, Consul, Zookeeper。

3、Nacos 简介。

nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。

Nacos 支持基于 DNS 和基于 RPC 的服务发现。
服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent注册 Service 后,
服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

4、nacos 服务发现快速入门。

1)spring cloud 常见的集成方式是:

使用 Feign + Ribbon 技术来完成服务间远程调用及负载均衡的。

2)负载均衡:

就是将用户请求(流量)通过一定的策略,分摊到多个服务实例上执行,
它是系统处理高并发、缓解网络压力和进行服务端扩容的重要手段之一。

1)服务端负载均衡:Nginx 
2)客户端负载均衡:Ribbon

3)Feign 介绍:

Feign 是 Netflix 开发的声明式、模板化的 HTTP 客户端,Feign 可以帮助我们更快捷、优雅地调用 HTTP API.

Feign 的英文表意为“假装、伪装、变形”,可以理解为将 HTTP 报文请求方式伪装为简单的 java 接口调用方式。

5、nacos 服务的分级存储模型。

1)服务–集群–实例(多个实例组合集群)三层模型。
2)多个集群 共用一个服务。
3)通过命名空间隔离每个服务。

7、spring cloud 是一个较为全面的微服务框架集。

spring cloud 集成了如服务注册发现、配置中心、消息总线、负载均衡、断路器、API 网关等功能实现。

8、阿里巴巴的 Dubbo 只是服务治理与 RPC 实现方案。

9、传统的 spring cloud 应用,使用 Ribbon 或 Feign 在微服务之间协作。

Feign 是基于 Http Restful 的调用,在高并发下的性能不够理想。

10、spring cloud alibaba 集成 Nacos 与 spring cloud 应用,

它的组件说明:

1)API 网关:系统统一入口,屏蔽架构内部结构,统一安全拦截,采用 Zuul 实现。
2)application-1 :应用1,模拟应用,提供 http 接口服务。
3)service-1 :微服务1,模拟微服务,提供 dubbo 接口服务。
4)service-2 :微服务2,模拟微服务,提供 dubbo 接口服务。

11、spring cloud alibaba 调用流程:

所有访问系统的请求,都要经过网关,网关转发 Http 请求至 application-1
application-1 使用 dubbo 调用 service-1 完成自身业务,而后 service-1 调用 service-2 完成自身业务。
至此,完成所有组件贯穿。

12、什么是网关?

原来的单体架构,所有的服务都是本地的,UI 可以直接调用,现在按功能拆分成独立的服务,

跑在独立的一般都在独立的虚拟机上的 java 进程了。

客户端 UI 如何访问?
他的后台有 N 个服务,前台就需要记住管理 N 个服务,一个服务下线/更新/升级,

前台就要重新部署,这明显不符合拆分的理念,特别是当前台是移动应用的时候,
通常业务变化的节奏更快。另外,N 个小服务的调用也是一个不小的网络开销。

有了网关作为服务统一入口,就可以避免上述问题,不仅如此,服务网关是在微服务前面设置一道屏障,

请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。有了服务网关可以提高微服务的安全性,
网关请求的合法性,请求不合法将被拦截,拒绝访问。

网关提供统一服务入口,让微服务对前台透明。
网关聚合后台的服务,节省流量,提升性能。
网关提供安全、过滤、流控等 API 管理功能。

13、什么是 Zuul ?

Spring Cloud Zuul 是整合 Netflix 公司的 Zuul 开源项目实现的微服务网关(API Gateway)。

它实现了请求路由、负载均衡、校验过滤等功能。

Zuul 官网:https://github.com/Netflix/zuul 

14、Zuul 与 Nginx 在实际项目中,需要配合使用,Nginx 的作用是反向代理、负载均衡,

Zuul 的作用是保障微服务的安全访问,拦截微服务请求,校验合法性及负载均衡。

15、Spring Cloud Alibaba 综合集成架构演示。

1)API 网关(Zuul):接入层。

2)Application-1 :应用层。

应用层可以适合于用户的变化,对外提供 http 接口,

3)Service-1, Service-2 : 服务层。

服务层更加稳定来支撑应用层的变化,可以持久化,对外提供 dubbo 协议的接口,
dubbo 协议是基于

4)nacos :将服务发现与配置管理集于一身。

上一节相关代码请点击:
# Spring Cloud Alibaba Nacos_配置中心与服务发现(六)–综合架构实战(5)

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐