【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)

目录

    • 01.概述
    • 02.创建统一的依赖管理
    • 03.服务注册与发现
    • 04.创建服务提供者
    • 05.创建服务消费者
    • 06.创建服务消费者(Feign)
    • 07.使用熔断器防止服务雪崩
    • 08.使用熔断器仪表盘监控
    • 09.使用路由网关统一访问接口
    • 10.使用路由网关的全局过滤功能
    • 11.Nacos Config 服务端初始化
    • 12.Nacos Config 客户端的使用
    • 13.Nacos Config 多环境的配置
    • 14.Spring Cloud Alibaba 链路追踪

01.概述

演变:开始我们使用三层架构(架构:解耦)+MVC,但是有架构还不够,还需要另外一些框架简化开发,我们最常用的框架就是Spring(轻量级的JavaEE开源框架,主要作用是为了解决企业级开发的复杂度,即耦合度问题),其两大特性分别是IoC和AOP,其核心是提供一个统一场所,所以被称之为容器。但是Spring与Ruby、Scala等轻量级语言相比还是不方便,因为它不够开箱即用(需要大量配置),于是就有了SpringBoot(新一代JavaEE开发标准,具有开箱即用的特征)。然后提出微服务架构,能够更好的进行分布式系统开发,拆分单体应用,将一个应用拆分成多个服务,每一个服务又是可以独立运行的项目。

分布式系统开发一定会遇见的四个问题(根本原因是网络是不可靠的):

  1. 这么多服务,客户端如何访问(API网关,服务路由)
  2. 这么多服务,服务之间如何通信(HTTP、RPC,异步调用)
  3. 这么多服务,如何治理(高可用的服务注册与发现)
  4. 服务挂了,怎么办(熔断、限流、服务降级)

解决方案:Spring Cloud生态(一套生态,为了解决微服务架构遇见的问题,而想要使用Spring Cloud 则必须基于Spring Boot),目前有两套解决方案:

  1. Apache Dubbo Zookeeper(Dubbo本来属于alibaba,后来贡献给Apache,成为了一个孵化项目。而Zookeeper本身就属于Apache,帮助Dubbo实现高可用,其是一个分布式协调技术,主要解决分布式系统开发过程中会遇到的一些问题,其在大数据Hadoop项目中得到了广泛应用,所以其稳定性和各方面性能都没有问题。但是严格来说Dubbo是一个高性能的 Java RPC 通信框架。而Zookeeper是一个分布式协调技术,它能为我们解决服务注册与发现问题。但是该实现技术中没有API网关解决方案,所以需要找第三方方案或者自己实现,同时也没有服务挂了的解决方案,但是可以借用Hystrix解决方案),很明显这套解决方案并不完善,整个生态也不完善

  2. Spring Cloud Alibaba提供微服务开发的一站式解决方案

服务与服务之间通信有两种方式:同步与异步,同步亦有两种方式HTTP(基于http协议,应用层协议,好处是可以跨防火墙,即在不同局域网之间通信)和RPC(远程过程调用,基于TCP协议,在网络协议第四层传输层,其优点是速度快,缺点是不能跨防火墙,仅支撑局域网通信,所以有句话叫:对内RPC,对外REST);异步非阻塞通信,可以使用Java框架 Netty,它能够帮我们实现NIO(异步并阻塞)和AIO(异步非阻塞)模型,但异步即便非阻塞也不一定能提高系统的运行效率

微服务架构依然不够完善,于是提出下一代微服务架构标准:Service Mesh 服务(服务网格),典型代表方案就有Istio

概述:Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务(目前我们开发的程序正式称为Java原生云应用)。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

功能:目的是解决以上四个问题

  • 服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控(解决服务挂了怎么办)。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持(服务治理,这么多服务如何管理)。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新(属于服务管理中的一种)。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务(OSS)。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

组件:Spring Cloud Alibaba还在孵化阶段

  • Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
  • Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

02.创建统一的依赖管理

Spring Cloud Alibaba 项目都是基于 Spring Cloud,而 Spring Cloud 项目又是基于 Spring Boot 进行开发,并且都是使用 Maven 做项目管理工具。在实际开发中,我们一般都会创建一个依赖管理项目作为 Maven 的 Parent 项目使用,这样做可以极大的方便我们对 Jar 包版本的统一管理。其做法是创建一个工程名为 hello-spring-cloud-alibaba-dependencies 的项目,pom.xml配置文件见代码,其中:

  • parent:继承了 Spring Boot 的 Parent,表示我们是一个 Spring Boot 工程
  • package:pom,表示该项目仅当做依赖项目,没有具体的实现代码
  • spring-cloud-alibaba-dependencies:在 properties 配置中预定义了版本号为 0.2.1.RELEASE ,表示我们的 Spring Cloud Alibaba 对应的是 Spring Cloud Finchley 版本
  • build:配置了项目所需的各种插件
  • repositories:配置项目下载依赖时的第三方库

依赖版本说明:项目的最新版本是 0.2.1.RELEASE 和 0.1.1.RELEASE,版本 0.2.1.RELEASE 对应的是 Spring Cloud Finchley 版本,版本 0.1.1.RELEASE 对应的是 Spring Cloud Edgware 版本。


03.服务注册与发现

为什么要用服务注册与发现?这么多服务如何管理?我们不可能让客户端记住每一台机器的IP地址和端口号,所以我们需要一台专门的服务器做这件事情,所以我们需要服务注册与发现,因为服务太多了

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

基本架构及概念
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第1张图片

服务 (Service):服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service

服务注册中心 (Service Registry):服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

服务元数据 (Service Metadata):服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据(元数据:数据的数据)

服务提供方 (Service Provider):是指提供可复用和可调用服务的应用方

服务消费方 (Service Consumer):是指会发起对某个服务调用的应用方

配置 (Configuration):在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

配置管理 (Configuration Management):在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

名字服务 (Naming Service):提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

配置服务 (Configuration Service):在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

安装Nacos:Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行 Nacos,还需要为此配置 Maven 环境,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac
  • 64 bit JDK 1.8+
  • Maven 3.2.x+
# 下载源码
git clone https://github.com/alibaba/nacos.git

# 安装到本地仓库
# -U使用最新依赖、-P(profile )Maven多环境配置,指定环境是release-nacos
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U 

# 启动服务
cd distribution/target/nacos-server-0.7.0/nacos/bin
# Linux
./startup.sh -m standalone
# Windows
startup.cmd

#浏览器访问
http://localhost:8848/nacos

#注:从 0.8.0 版本开始,需要登录才可访问,默认账号密码为 nacos/nacos

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第2张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第3张图片


04.创建服务提供者

参考代码地址:hello-spring-cloud-alibaba
启动该代码后即可发现,一个服务名为nacos-provider的服务意见注册在nacos中
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第4张图片
这时在浏览器访问,会返回响应结果
在这里插入图片描述
服务端点检查:spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个 EndPoint, EndPoint 的访问地址为 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了两类:

  • subscribe: 显示了当前有哪些服务订阅者
  • NacosDiscoveryProperties: 显示了当前服务实例关于 Nacos 的基础配置

通过浏览器访问http://localhost:8081/actuator/nacos-discovery 你会在浏览器上看到:
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第5张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第6张图片
Nacos Starter配置:可在application.yml中使用

配置项 key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr Nacos Server 启动监听的ip地址和端口
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 给当前的服务命名
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key 当要上阿里云时,阿里云上面的一个云账号名
SecretKey spring.cloud.nacos.discovery.secret-key 当要上阿里云时,阿里云上面的一个云账号密码
Metadata spring.cloud.nacos.discovery.metadata 使用 Map 格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名 spring.cloud.nacos.discovery.log-name
接入点 spring.cloud.nacos.discovery.enpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成 Ribbon ribbon.nacos.enabled true 一般都设置成 true 即可

05.创建服务消费者

参考代码地址:hello-spring-cloud-alibaba
启动该项目
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第7张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第8张图片
在这里插入图片描述


06.创建服务消费者(Feign)

概述:Feign 是一个声明式的伪 Http 客户端(最常用的方式),它使得写 Http 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果。Feign 采用的是基于接口的注解,并整合了 ribbon

代码完成后刷新
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第9张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第10张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第11张图片
浏览器中输入访问路径
在这里插入图片描述
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第12张图片
负载均衡:这时候我们需要做副本(访问对象),以达到高并发、高性能,因为有nacos所以我们已经在支持高可用,以下是让其本地负载均衡的方法
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第13张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第14张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第15张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第16张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第17张图片
在这里插入图片描述
在这里插入图片描述


07.使用熔断器防止服务雪崩

概述:在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring Cloud 中可以用 RestTemplate + LoadBalanceClient 和 Feign 来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。

为了解决这个问题,业界提出了熔断器模型。

阿里巴巴开源了 Sentinel 组件,实现了熔断器模式,Spring Cloud 对这一组件进行了整合。在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第18张图片
较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值熔断器将会被打开。
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第19张图片
熔断器打开后,为了避免连锁故障,通过 fallback 方法可以直接返回一个固定值。

Sentinel 的特征:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的 双十一大促流量 的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

参考代码地址:hello-spring-cloud-alibaba

启动项目
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第20张图片
在这里插入图片描述
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第21张图片
在这里插入图片描述


08.使用熔断器仪表盘监控

概述:Sentinel 控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。您只需要对应用进行简单的配置,就可以使用这些功能。

注意: 集群资源汇总仅支持 500 台以下的应用集群,有大概 1 - 2 秒的延时。
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第22张图片

下载启动:下载依赖时间较长,请耐心等待…

# 下载源码
git clone https://github.com/alibaba/Sentinel.git

# 编译打包
mvn clean package -Dmaven.test.skip=true

# Sentinel 控制台是一个标准的 SpringBoot 应用,以 SpringBoot 的方式运行 jar 包即可
cd sentinel-dashboard\target
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第23张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第24张图片
参考代码地址:hello-spring-cloud-alibaba

测试Sentinel
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第25张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第26张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第27张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第28张图片


09.使用路由网关统一访问接口

概述:Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflix ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第29张图片

特征:功能而言

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  • 动态路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Spring Cloud DiscoveryClient
  • 易于编写的 Predicates 和 Filters
  • 限流
  • 路径重写

流程客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑。
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第30张图片

参考代码地址:hello-spring-cloud-alibaba

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第31张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第32张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第33张图片

在这里插入图片描述
在这里插入图片描述


10.使用路由网关的全局过滤功能

概述:全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制等等。

声明周期:Spring Cloud Gateway 基于 Project Reactor 和 WebFlux,采用响应式编程风格,打开它的 Filter 的接口 GlobalFilter 你会发现它只有一个方法 filter。

参考代码地址:hello-spring-cloud-alibaba

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第34张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第35张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第36张图片
参考代码地址:hello-spring-cloud-alibaba

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第37张图片
在这里插入图片描述
在这里插入图片描述


11.Nacos Config 服务端初始化

分布式配置中心:在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。

Nacos Config:Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

参考代码地址:hello-spring-cloud-alibaba

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第38张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第39张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第40张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第41张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第42张图片


12.Nacos Config 客户端的使用

参考代码地址:hello-spring-cloud-alibaba

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第43张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第44张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第45张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第46张图片

在这里插入图片描述

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第47张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第48张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第49张图片
在这里插入图片描述

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第50张图片
在这里插入图片描述
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第51张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第52张图片


13.Nacos Config 多环境的配置

概述:实际开发时有多种环境(开发环境dev/测试环境test/生产环境prod),Spring Boot提供多环境配置功能,当然maven也可以做多环境配置myshop-devmyshop-test然后通过右侧maven区域Profiles进行构建

简介:我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是 Spring 中为我们提供了 Profile 这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的 Profile 就可以了。操作起来很简单,只需要为不同的环境编写专门的配置文件,如:application-dev.yml、application-prod.yml, 启动项目时只需要增加一个命令参数 --spring.profiles.active=环境配置 即可,启动命令如下:java -jar hello-spring-cloud-alibaba-nacos-provider-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod

Nacos Config Profile:spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties} 为前缀的基础配置,还加载了 dataid 为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第53张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第54张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第55张图片

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第56张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第57张图片


14.Spring Cloud Alibaba 链路追踪

简介:微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第58张图片
随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第59张图片
面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的 APM(应用性能管理)。

SkyWalking:目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking;Apache SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

  • Skywalking Agent: 使用 JavaAgent 做字节码植入,无侵入式的收集,并通过 HTTP 或者 gRPC 方式发送数据到 SkyWalking Collector。
  • SkyWalking Collector: 链路数据收集器,对 agent 传过来的数据进行整合分析处理并落入相关的数据存储中。
  • Storage: SkyWalking 的存储,时间更迭,SW 已经开发迭代到了 6.x 版本,在 6.x 版本中支持以 ElasticSearch(支持 6.x)、Mysql、TiDB、H2、作为存储介质进行数据存储。
  • UI: Web 可视化平台,用来展示落地的数据。

功能特性:多种监控手段,语言探针和服务网格(Service Mesh);多语言自动探针,Java,.NET Core 和 Node.JS;轻量高效,不需要大数据;模块化,UI、存储、集群管理多种机制可选;支持告警;优秀的可视化方案

服务端配置:在 为什么需要链路追踪 章节中介绍过 SkyWalking 存储方案有多种,官方推荐的方案是 ElasticSearch ,所以我们需要先安装 ElasticSearch。

root@demo:~# cd /usr/local/docker
root@demo:/usr/local/docker# mkdir skywalking
root@demo:/usr/local/docker# cd skywalking/
root@demo:/usr/local/docker/skywalking# vim docker-compose.yml
version: '3.3'
services:
  elasticsearch:
    image: wutang/elasticsearch-shanghai-zone:6.3.2
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      cluster.name: elasticsearch
root@demo:/usr/local/docker/skywalking# docker-compose up -d                               

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第60张图片
SkyWalking服务端配置:官方已经为我们准备好了编译过的服务端版本,下载地址在此,这里以下载 6.x releases 版本例

alpha版和beta版的区别:beta版会向外公开,而alpha版不会。
– Alpha(α):预览zhi版,或者叫内部测试版;一般不向外部发布,会dao有很多Bug;一般只有测试人员使用。
– Beta(β):测试版,或者叫公开测试版;这个阶段的版本会一直加入新的功能;在 Alpha版之后推出。

【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第61张图片
下载完成后解压缩,进入 apache-skywalking-apm-incubating/config 目录并修改 application.yml 配置文件
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第62张图片
这里需要做三件事:注释 H2 存储方案、启用 ElasticSearch 存储方案、修改 ElasticSearch 服务器地址

修改完配置后,进入 apache-skywalking-apm-incubating\bin 目录,运行 startup.bat 启动服务端,通过浏览器访问 http://localhost:8080 出现如下界面即表示启动成功
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第63张图片
默认的用户名密码为:admin/admin,登录成功后,效果如下图
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第64张图片
SkyWalking 客户端配置
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第65张图片
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第66张图片
给每个项目配置vm
【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)_第67张图片
启动nacos,之后启动项目,之后再刷新 SkyWalking Web UI,你会发现 Service 与 Endpoint 已经成功检测到了

你可能感兴趣的:(架构演化,分布式,spring,cloud,spring,cloud,alibaba)