微服务框架
1:Spring Cloud
- Spring Cloud Config :配置管理工具,支持git存储配置内容,可以使用它实现应用配置的外部华存储,并支持客户的配置信息刷新、加密、解密配置内容等。
- Spring Cloud netflix: 核心组件,对多个Netflix OSS 开源套件进行整合。
Eureka:服务治理组件,包含服务注册中心,服务注册于发现机制的实现。
Hystrix:容错管理组件,实现断路器模式,帮助服务以来中出现的延迟和为故障提供强大的容错能力。
Ribbon:客户的负载均衡的服务调用组件。
Feign:基于Ribbon 和 Hystrix的生命是服务调用组件
Zuul:网关组件,提供智能路由,访问过滤等功能。
Archaius:外部化配置组件。 - Spring Cloud Bus:事件、消息中线,用于传播集群中的状态变化或事件,以出发后续的处理,比如用来动态刷新配置等。
- Spring Cloud Cluster:针对ZoonKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。
- Spring Cloud Cloudfoundry: 与Pivotal Cloudfoundry的整合支持。
- Spring Cloud Consul:服务发现与配置管理工具。
- Spring Cloud Stream:通过Redis、Rabbit或者Kafka实现消费微服务,可以通过简单的声明式模型来发送和接收消息。
- Spring Cloud Zookeeper:基于ZooKeeper的服务发现与配置管理组件。
- Spring Cloud Starters:Spring Cloud的基础组件,它是基于Spring Boot 风格项目的基础依赖模块。
2:Spring Cloud的构建是基于Spring Boot实现。
3:问题,Spring Boot 打包成jar来部署,通过 java -jar的命令来直接启动一个标准的Web应用,为什么可以这样呢?
4:多环境配置
在SpringBoot中,多环境配置的文件名需满足application-{profile}.properties的格式,其中{profile}对应你的环境标识
- application-dev.properties :开发环境,这里包含常用的配置,比如数据库配置信息等
- application-test.properties :测试环境,......
- application-prod.properties :生产环境,......
至于哪个配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应配置文件中的{profile}的值。如spring.profiles.active=test就会加载application-test.properties配置文件的内容
上面的配置方式,是基于开发人员来配置的,但是到后期如果运维人员要来修改这个properties文件就显得复杂了,运维人员需要获取这个代码里面的properties文件来修改,显然这是不合理的。所以,就出现了很多将配置内容外部化的框架和工具,比如 Spring Cloud Config,百度的disconf等
4:监控与管理
Spring Boot 提供了一个特殊的依赖, spring-boot-starter-actuator,引入该模块能够自动为Spring Boot构建的应用提供一系列用于监控的端点。
引入actuator之后,模块中已经实现的原生端点,可以分为三大类
-
应用配置类: 获取应用程序中加载的应用配置,环境变量,自动化配置报告等与Spring Boot 应用密切相关的配置类信息。
http://localhost:8080/autoconfig http://localhost:8080/beans http://localhost:8080/configprops http://localhost:8080/env http://localhost:8080/mappings http://localhost:8080/info
上面这些信息需要用到的时候再去查询,可以说这些是生成的一个静态报告,系统一旦启动这些信息就基本决定了。接下来,我们讨论另外一个度量标准
- 度量指标类
度量指标提供的是一些动态信息,比如内存使用情况,Http请求统计,外部资源指标等,这些信息对于我们监控微服务架构监控非常有意义。
http://localhost:8080/metrics : 该端点用来返回当前应用的各类重要度量指标, 比如内存信息, 线程信息,垃圾回收信息等。
http://localhost:8080/health
- 操作控制类: 提供了对应用的关闭等操作功能。
5:服务治理
- 构建服务注册中心
- 服务注册于服务发现
- Eureka的基础架构
- Eureka的服务治理机制
- Eureka的配置
服务治理 包括 服务注册 和 服务发现
注册中心
需要维护类似下面的一个服务清单。服务中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用需要从服务中心剔除,达到排出故障服务的效果。
image.png
服务发现
由于在服务治理框架下运作,服务间的调用不再通过指定具体的示例地址来调用,而是通过服务名发起请求调用实现。服务调用方向注册中心请求,注册中心返回实例给调用方。
Spring Cloud Eureka,使用Netflix Eureka来实现服务注册于发现。包含了服务端和客户端。服务端和客户端都用java来写的。如果是其他语言,需要自己实现响应语言的客户端,比如我们项目中的golang。
Eureka 服务端,我们也称为服务注册中心。
Eureka客户端,主要处理服务的注册于发现。客户端通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地周期性的刷新服务状态。