oopstorm / oopstorm.github.io

https://oopstorm.github.io/
0 stars 15 forks source link

Spring Cloud 微服务实战 · OopStorm #79

Open AlphaHinex opened 5 years ago

AlphaHinex commented 5 years ago

https://oopstorm.github.io/2019/05/26/2019-05-26-spring-cloud-microservice/

AlphaHinex commented 5 years ago

各组件关系图

adersberger_spring_cloud_1

Spring Boot

yaml 无法通过 @PropertySource 注解来加载配置。但是,yaml 将属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义时,yaml 的配置方式比起 properties 配置文件更有优势

Spring boot 提供了 将 yaml 转换为 properties 的方法,可参照此 示例 实现

Hystrix

微服务架构中的依赖通常通过远程调用实现,而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况之下,因通信次数的增加,总的通信时间消耗将会变得不那么理想。同时,因为依赖服务的线程池资源有限,将出现排队等待与响应延迟的情况。为了优化这两个问题,Hystrix 提供了 HystrixCollapser 来实现请求的合并,并减少通信消耗和线程数的占用

HystrixCollapser 实现了在 HystrixCommand 之前放置一个合并处理器,将处于一个很短的时间窗(默认10毫秒)内对同一依赖服务的多个请求进行整合并以批量方式发起请求的功能(服务提供方也需要提供相应的批量实现接口)

Spring Cloud Config

Spring Boot 对于本应用 jar 包之外的配置文件加载会优先于应用 jar 包内的配置内容,而通过 bootstrap.properties 对 config-server 的配置,使得该应用会从 config-server 中获取一些外部配置信息,这些信息的优先级比本地的内容要高,从而实现了外部化配置

Spring Cloud Bus

Spring Cloud Stream

每个微服务应用为了实现高可用和负载均衡,实际上都会部署多个实例。在很多情况下,消息产生者发送消息给某个具体微服务时,只希望被消费一次。

如果在同一个主题上的应用需要启动多个实例的时候,可以通过 spring.cloud.stream.bindings.input.group 属性为应用指定一个组名,这样这个应用的多个实例在收到消息的时候,只会有一个成员真正收到消息并进行处理。

消费组无法控制消息具体被哪个实例消费。也就是说,对于同一条消息,它多次到达之后,可能是由不同的实例进行消费的。

消息分区概念的引入就是为了解决这样的问题:当生产者将消息数据发送给多个消费者实例时,保证拥有共同特征的消息数据始终是由同一个消费者实例接收和处理。


非 Spring Boot 应用接入 Spring Cloud