微服务基础
单体系统初期可以非常方便的开发和使用,但随着系统的发展,维护成本会变得越来越大,且难以控制。
微服务主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作,被拆分成的每个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建,并每个服务都维护着自身的数据存储,业务开发,自动化测试案例及独立部署机制。
springCloud
SpringCloud是一个基于SpringBoot实现的微服务架构开发工具,为微服务架构中涉及的配合管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话和集群状态管理等操作提供了一种简单的开发方式。
包含的子项目:
- Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新,加密/解密配置内容等
- Spring Cloud Netflix:核心组件,对多个Netflix OSS开源进行整合
- Eureka:服务治理组件。包含服务注册中心、服务注册与发现机制的实现
- Hystrix:容错管理组件。实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力
- Ribbom:客户端负载均衡的服务调用组件 。
- Feign:基于Ribbon和Hystrix的声明式服务调用组件。
- Zuul:网关组件,提供智能路由,访问过滤等功能
- Archaius:外部化配置组件
- Spring Cloud Bus:事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新配置等
- Spring Cloud Cluster:针对zookeeper,redis,Hazelcast,Consul的选举算法和通用状态模式的实现
- Spring Cloud CloudFoundry:
- SpringCloud Consul:服务发现与配置管理工具
- Spring Cloud Stream:通过redis、rabbit或kafka实现的消费微服务,可以通过简单的声明式模型来发送和接收消息
- Spring Cloud AWS:用于简化整合Amazon Web Service 组件
- Spring Cloud Security:安全工具包,提供在zuul代理中对OAuth2客户端请求的中继器
- Spring Cloud Sleuth:Spring Cloud 应用的分布式跟踪实现,可以完美整合Zipkin
- Spring Cloud Zookeeper:基于Zookeeper的服务发现与配置管理组件
- Spring Cloud Starters:Spring Cloud 的基础组件,是基于Springboot风格项目的基础依赖模块
- Spring Cloud CLI:用于在Groovy中快速创建Spring Cloud 应用的Spring Boot CLI插件
微服务构建:SpringBoot
springboot:用于构建微服务的基础框架
启动springboot方法:
- main函数启动
- 执行mvn spring-boot:run
- mvn install 将应用打包成jar包,再通过java -jar xxx.jar
注解:
- @RunWith(SpringJUnit4ClassRunner.class):引入Spring对JUnit4的支持
- @SpringApplicationConfiguration(classes = HelloApplication.class):指定Spring Boot的启动类
- @WebAppConfiguration:开启Web应用的配置,用于模拟ServletContext。
多环境配置:通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包
- application-dev.properties:开发环境
- application-test.properties:测试环境
- application-prod.properties:生产环境
启动:
java -jar xxx.jar --spring.profiles.active = test
actuator
spring boot应用增加的spring-boot-starter-actuator模块功能
pom.xml
org.springframework.boot
spring-boot-starter-actuator
spring-boot-starter-actuator模块根据应用依赖和配置自动创建出来的监控和管理端点。通过这些端点可以实时获取应用的各项监控指标,
原生端点
- 应用配置类:获取应用程序中加载的应用配置,环境变量,自动化配置报告等与spring boot应用密切相关的配置类信息
- /autoconfig:用来获取应用的自动化配置报告。方便找到一些自动化配置为什么没有生效的具体原因
- positiveMatches:返回条件匹配成功的自动化配置。
- negativeMatches:返回条件匹配不成功的自动化配置。
- /beans:用来获取应用上下文中创建的所有Bean
- 包含信息:bean:名称、scope:作用域、type:java类型、resource:class文件具体路径、dependencies:依赖的bean的名称
- /configprops:用来获取应用中配置的属性信息报告
- prefix:代表属性配置前缀
- properties:代表各个属性的名称和值
- /env:用来获取应用所有可用的环境属性报告
- 包括环境变量,jvm属性,应用的配置属性,命令行参数
- /mappings:用来返回所有spring mvc的控制器映射关系报告。
- /info:用来返回一些应用自定义的信息,默认返回一个空的json内容
- 度量指标类:获取应用程序运行过程中用于监控的度量指标,eg:内存信息,线程池信息,http请求统计等
- /metrics:用来返回当前应用的各类重要度量指标,比如内存信息,线程信息,垃圾回收信息等
- /gauge.*:http请求的性能指标之一,主要用来反映一个绝对数值
- counter.*":http请求的性能指标之一,主要用来作为计数器使用,记录增加量和减少量
- 可以通过注入CounterService和GaugeService来实现自定义的统计的指标信息
- /health:用来获取应用的各类健康指标信息。一些自带实现的常用资源的健康指标检测器都通过HealthIndicator接口实现,并会依据依赖关系的引入实现自动化装配
- 自定义实现检测器
- 实现HealthIndicator接口,重写health()函数可实现健检查。
- 返回的Health对象中,包含两项内容
- 状态信息,UP,DOWN,UNKNOWN,OUT_OF_SERVICE
- 详细信息,Map方式存储
- /dunp:用来暴露程序运行中的线程信息
- /trace:返回基本的http跟踪信息
- 操作控制类:提供了对应用的关闭等操作类功能。