SpringCloud框架基本学习(二)

  • 一、分布式配置中心(Spring Cloud Config)
  • 1、构建Config Server
  • 2、构建Config Client
  • 3、项目流程
  • 二、高可用的分布式配置中心(Spring Cloud Config)
  • 1、架构图:
  • 三、消息总线(Spring Cloud Bus)
  • 1、下载rabbitmq安装
  • 2、架构:
  • 3、改造config client,添加依赖
  • 四、服务链路追踪(Spring Cloud Sleuth)
  • 1、使用Zipkin注解的过程图形化
  • 2、构建server-zipkin
  • 3、改造service-hi和service-ribbon
  • 4、演示结果:
  • 五、高可用的服务注册中心
  • 1、结构图:
  • 2、改造eureka-server
  • 3、改变etc/hosts:
  • 4、改造service-hi:
  • 5、结果:
  • 六、断路器监控(Hystrix Dashboard)
  • 1、改造service-hi
  • 2、图形展示:
  • 七、断路器聚合监控(Hystrix Turbine)
  • 1、创建service-turbine
  • 2、演示结果:
  • 八、参考文献


一、分布式配置中心(Spring Cloud Config)

我们使用配置服务来保存各个服务的配置文件,就是Spring Cloud Config。
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

1、构建Config Server

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建


springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_02


springcloud复杂搭建 springcloud快速搭建_断路器_03

启动程序访问http://localhost:8888/foo/dev
证明配置服务中心可以从远程程序获取配置信息。

2、构建Config Client

springcloud复杂搭建 springcloud快速搭建_spring_04


创建bootstrap.properties文件:

springcloud复杂搭建 springcloud快速搭建_断路器_05


spring.cloud.config.profile

dev开发环境配置文件,test测试环境,pro正式环境

spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_06

3、项目流程

springcloud复杂搭建 springcloud快速搭建_spring_07


配置中心结构图

二、高可用的分布式配置中心(Spring Cloud Config)

当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用

1、架构图:

springcloud复杂搭建 springcloud快速搭建_断路器_08


高可用的分布式配置中心

2、在config server和config client中,添加spring-cloud-starter-netflix-eureka-client依赖,并注册到eureka-server上,在启动类加上加上@EnableEureka的注解。

在读取配置文件不再写ip地址,而是服务名,这时如果配置服务部署多份,通过负载均衡,从而高可用。

三、消息总线(Spring Cloud Bus)

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。

这里主要是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。

1、下载rabbitmq安装

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。

排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

2、架构:

springcloud复杂搭建 springcloud快速搭建_spring_09


rabbitmq结构图

当git文件更改的时候,通过pc端用post 向端口为8882的config-client发送请求/bus/refresh/;此时8882端口会发送一个消息,由消息总线向其他服务传递,从而使整个微服务集群都达到更新配置文件。

3、改造config client,添加依赖

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_10


springcloud复杂搭建 springcloud快速搭建_Cloud_11


springcloud复杂搭建 springcloud快速搭建_spring_12


Actuator:在生产环境中,需要实时或定期监控服务的可用性。Spring Boot的actuator(健康监控)功能提供了很多监控所需的接口,可以对应用系统进行配置查看、相关功能统计等

Spring Cloud Bus:将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。

4、更改git仓库的配置后,发送post请求:http://localhost:8881/actuator/bus-refresh后,可重新读取最新配置。

四、服务链路追踪(Spring Cloud Sleuth)

微服务架构上通过业务来划分服务,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。随着服务的越来越多,对调用链的分析会越来越复杂。
Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,只需要在pom文件中引入相应的依赖。

1、使用Zipkin注解的过程图形化

springcloud复杂搭建 springcloud快速搭建_断路器_13


Zipkin过程图形化

2、构建server-zipkin

在F版本中,只需下载zipkin包,并执行即可。https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

注:自己创建zipkin-server时,需添加依赖:

springcloud复杂搭建 springcloud快速搭建_断路器_14


并添加@EnableZipkinServer注解。——这是支持http方式通信。

3、改造service-hi和service-ribbon

添加依赖:

springcloud复杂搭建 springcloud快速搭建_Cloud_15


配置spring.zipkin.base-url

springcloud复杂搭建 springcloud快速搭建_断路器_16

4、演示结果:

打开浏览器访问:http://localhost:9411/

springcloud复杂搭建 springcloud快速搭建_spring_17


访问http://localhost:8964/hi后,等待一段时间追踪

后重新访问http://localhost:9411/点击Dependencies,可以发现服务的依赖关系

springcloud复杂搭建 springcloud快速搭建_spring_18

点击find traces,可以看到具体服务相互调用的数据

springcloud复杂搭建 springcloud快速搭建_spring_19

五、高可用的服务注册中心

将Eureka Server集群化,防止当一个服务中心挂了之后导致全盘崩溃:

1、结构图:

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_20


服务中心集群化

Eureka-eserver peer1 8761,Eureka-eserver peer2 8769相互感应,当有服务注册时,两个Eureka-eserver是对等的,它们都存有相同的信息,这就是通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另一台服务存有相同的数据。

2、改造eureka-server

创建application-peer1.yml和application-peer2.yml

springcloud复杂搭建 springcloud快速搭建_Cloud_21


配置相应的环境peer1和peer2

其中:

register-with-eureka: false

fetch-registry: false

使得本身不需注册

springcloud复杂搭建 springcloud快速搭建_spring_22


springcloud复杂搭建 springcloud快速搭建_spring_23


配置运行环境为peer2,之后修改为peer1,重新运行

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_24

3、改变etc/hosts:

windows电脑,在c:/windows/systems/drivers/etc/hosts 修改
添加:
127.0.0.1 peer1
127.0.0.1 peer2

4、改造service-hi:

springcloud复杂搭建 springcloud快速搭建_spring_25

5、结果:

启动后访问:localhost:8761显示:

springcloud复杂搭建 springcloud快速搭建_Cloud_26


左上角显示peer2,

访问localhost:8769,显示peer1

6、当出现多台服务器时,利用prefer-ip-address: true,并且再配置多个服务中心server的ip即可达到集群效果,可不用修改服务器的hosts文件

springcloud复杂搭建 springcloud快速搭建_spring_27

六、断路器监控(Hystrix Dashboard)

在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型。断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。

1、改造service-hi

springcloud复杂搭建 springcloud快速搭建_spring_28


springcloud复杂搭建 springcloud快速搭建_spring_29

2、图形展示:

打开http://localhost:8762/actuator/hystrix.stream

springcloud复杂搭建 springcloud快速搭建_断路器_30


打开localhost:8762/hystrix

springcloud复杂搭建 springcloud快速搭建_断路器_31


在界面依次输入:http://localhost:8762/actuator/hystrix.stream 、2000 、miya

在另一个界面访问http://localhost:8762/hi后重新刷新hystrix.stream网页

springcloud复杂搭建 springcloud快速搭建_spring_32

七、断路器聚合监控(Hystrix Turbine)

当我们有很多个服务的时候,这就需要聚合所以服务的Hystrix Dashboard的数据。需要用到Spring Cloud的另一个组件了,即Hystrix Turbine。
想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。

1、创建service-turbine

在其入口类ServiceTurbineApplication加上注解@EnableTurbine,开启turbine,@EnableTurbine注解包含了@EnableDiscoveryClient注解,即开启了注册服务。

springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_33


springcloud复杂搭建 springcloud快速搭建_springcloud复杂搭建_34


springcloud复杂搭建 springcloud快速搭建_Cloud_35

2、演示结果:

打开:http://localhost:8763/hystrix,输入监控流http://localhost:8769/turbine.stream

springcloud复杂搭建 springcloud快速搭建_断路器_36


点击monitor stream 进入页面

springcloud复杂搭建 springcloud快速搭建_断路器_37


可以看到这个页面聚合了2个service的hystrix dashbord数据。

八、参考文献

1、第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本) 2、第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本) 3、第八篇: 消息总线(Spring Cloud Bus)(Finchley版本) 4、第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本) 5、第十篇: 高可用的服务注册中心(Finchley版本) 6、第十二篇: 断路器监控(Hystrix Dashboard)(Finchley版本) 7、第十三篇: 断路器聚合监控(Hystrix Turbine)(Finchley版本) 8、Eureka高可用的服务注册中心 9、Spring Cloud | 第五篇: 断路器监控(Hystrix Dashboard)和碰到的问题 10、SpringCloud-Finchley.SR1版本中 hystrix-dashboard 报错 /actuator/hystrix.stream 404 Not Found 11、spring boot 入门 使用spring.profiles.active来分区配置http://www.leftso.com/blog/111.html 12、Spring Cloud系列(二) 应用监控与管理Actuator 13、服务链路追踪(Spring Cloud Sleuth) 14、记一次zipkin和spring cloud bus冲突 15、RabbitMQ下载与安装(window版) https://www.jianshu.com/p/3d43561bb3ee 16、RabbitMq入门以及使用教程 17、Maven Repository https://mvnrepository.com/artifact/org.springframework.cloud