Spring Cloud及微服务(一):前置知识

版权声明:YETA https://blog.csdn.net/qq_28958301/article/details/88717585

什么是微服务架构

微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务。

  • 服务都在各自独立的进程中运行;
  • 服务之间通过基于HTTP的RESTful API进行通信协作;
  • 服务围绕着系统中的某一项或一些耦合度较高的业务功能进行构建;
  • 服务都维护者自身的数据存储、业务开发、自动化测试案例以及独立部署机制;
  • 服务可以使用不同的语言来编写。

与单体系统的区别

单体系统中,由于所有的业务逻辑在一个应用中,开发、测试、部署都还比较容易且方便。但是,系统为了应对不同的业务需求会不断为该单体系统增加不同的业务模块。同时前端展示已经不仅仅局限于Web的形式,系统后端需要更多的接口模块。不断扩大的需求会使得单体系统变得越来越臃肿。由于单体系统部署在一个进程内,往往修改一个很小的功能,为了部署上线会影响其他功能的运行。并且,单体系统中的功能模块的使用场景、并发量、消耗的资源类型都各有不同,对于资源的利用又相互影响,使得难以准确的评估各个模块的系统容量。

微服务系统中各个功能模块独立部署和扩展,都运行在自己的进程内,在部署上有稳固的边界,这样每个服务的更新都不会影响其他服务的运行。

微服务架构中的两种服务调用方式

  • 使用HTTP的RESTful API或轻量级的消息发送协议,实现信息传递与服务调用的触发;
  • 通过在轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的中间件。

Spring Cloud简介

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中设计的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

  • Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新、加密/解密配置内容等;
  • Spring Cloud Netfix:核心组件
    • Eureka:服务治理组件,包含服务注册中心、服务注册与发现机制的实现;
    • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力;
    • Ribbon:客户端负载均衡的服务调用组件
    • Feign:基于Ribbon和Hystrix的声明式服务调用组件
    • Zuul:网关组件,提供智能路由、访问过滤等功能;
    • Archaius:外部化配置组件
  • Spring Cloud Bus:事件、消息总线,用于传输集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新配置等;
  • Spring Cloud Cluster:针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现;
  • Spring Cloud Cloudfoundry:与Pivotal Cloudfoundry的整合支持;
  • Spring Cloud 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的基础组件,它是基于Spring Boot风格项目的基础依赖模块;
  • Spring Cloud CLI:用于在Groovy中快速创建Spring Cloud应用的Spring Boot CLI插件。

Spring Boot对数据文件的加载机制

从上到下优先级降低。

  • 在命令行中传入的参数;
  • SPRING_APPLICATION_JSON中的属性,SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容;
  • java:comp/env中的JNDI属性;
  • java的系统属性,可以通过System.getProperties()获得的内容;
  • 操作系统的环境变量;
  • 通过random.*配置的随机属性;
  • 位于当前应用jar包之,针对不同{profile}环境的配置文件内容,例如spplication-{profile}.properties或YAML定义的配置文件内容;
  • 位于当前应用jar包之,针对不同{profile}环境的配置文件内容,例如spplication-{profile}.properties或YAML定义的配置文件内容;
  • 位于当前应用jar包之的application.properties或YAML定义的配置文件内容;
  • 位于当前应用jar包之的application.properties或YAML定义的配置文件内容;
  • 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性;
  • 应用默认属性,使用SpringApplication.setDefaultProperties定义的内容。

猜你喜欢

转载自blog.csdn.net/qq_28958301/article/details/88717585
今日推荐