Spring Cloud学习详解

Spring Cloud

原文链接:Spring Cloud微服务架构

  1. Spring Cloud 微服务架构
  2. Spring Cloud 网关
  3. Spring Cloud 服务发现
  4. Spring Cloud 其他组件

Spring Cloud 微服务架构

什么是微服务

  1. 集群:通过一组集成得计算机软件和/或硬件连接起来高度紧密得协作完成计算机工作。
    1. 高性能:通过多台计算机完成统一工作,分摊压力,达到跟高得效率
    2. 高可用:两机或多机工作内容、过程完全一致,可以互相顶替
  2. 分布式:一组计算机通过网络互相连接传递消息与通信并协调他们之间的行为而形成得系统,组件之间彼此进行交互以实现一个共同得目标
    1. 低耦合:模块之间相互独立,便于扩展,提高资源利用效率
    2. 高吞吐:功能差分,分散到不同得模块执行
  3. 集群和分布式并不冲突
  4. CAP理论:强一致性(C)、极致可用性(A)、分区容错性(P)

什么是 Spring Cloud

​ 当我们了解集群和分布式这两个概念之后,我们来看看什么是Spring Cloud,在这之前我们先回顾一下Spring Boot,Spring Boot是比较合适基于spring的快速开发,用于搭建一个单体的小型项目非常方便。这里为什么提Spring boot呢?因为Spring Cloud就是基于Spring Boot实现的。

  1. Spring Cloud提供了分布式系统的一整套的解决方案
  2. Spring Cloud提供了快速构建分布式系统中的一些常见模式的组件

ps:前面对集群和分布式讲解是从概念上进行理解的,当我们落实到实现上时,可能会约到各种各样的问题,随着分布式架构的发展,慢慢的有一些优秀的架构设计,还有一些组件就会被广泛的应用,Spring Cloud就为常见的架构提供一些通用的组件。

Spring Cloud 组件

下面我们通过一个图来了解Spring Cloud为分布式系统提供的组件
Spring Cloud组件示意图

服务

​ 假设我们需要利用Spring Boot开发一个单独的系统,但是随着我们系统的开发,一个单体的应用程序可能会变得非常的臃肿,整个应用程序会变得非常庞大,代码量和功能都会变得很多。这时我们按照分布式的概念将服务进行拆分,如上图,此时出现了橙、蓝、黄三个服务,每个服务只专注自己的功能。

注册中心

​ 但是当我们拆分为多个服务之后,服务之间难免会出现互相通信的时候,这个时候我们可能需要在服务中去维护其他服务的ip,这就略显麻烦了。当我们在服务器集群中使用容器化部署的时候我们就会遇到一个更加灾难性的问题——我们每次部署的ip可能会变化,那么这个ip的维护工作就会变得非常繁琐。为了解决这个问题,Spring Cloud提供了一个组件叫注册中心,有了注册中心这个组件之后,每个服务不再像之前一样在服务内去维护其他服务的ip,而是将自己的ip维护到注册中心,这样注册中心就会有一个完整的服务列表,如果需要进行服务间的调用,我们只需要去注册中心拉去服务列表,去获取对应服务的ip就可以了。

负载均衡——Ribbon

​ 解决了最基本的通信问题之后,随着系统的不断扩展,我们会发现即使服务进行了划分,我们某个服务可能会遇到性能上的瓶颈,这时我们想到一个办法——将调用比较频繁的服务进行集群部署。例如上图,将第一个服务部署成两个节点,此时系统的压力会得到一定的缓解。但是这个时候我们又遇到了一个新的问题——服务件调用的时候我们需要进行一个决策。例如第二个服务和第三个服务需要调用第一个服务,但是第一个服务有两个节点,我们需要对集群的调用做负载均衡,不然调用请求集中发到一个节点上,这样还是会导致这个节点服务器压力特别大。这个时候,Spring Cloud为我们提供了一个组件——Ribbon,这个组件就是为了处理一个服务多实例下的负载均衡。

熔断限流——Hystrix

​ 当我们有了负载均衡之后,我们的系统能正常运行,但是这样还不够,比如我们做了集群和负载均衡,第一个服务的压力还是非常大,这时服务间的调用可能会有阻塞,当服务调用发生了阻塞,又无节制的去向第一个服务发送请求,很可能会导致第一个服务宕机。Spring Cloud为了避免这种情况为我们提供了一个新的组件——Hystrix。这个组件的功能是熔断限流,也就是当我们的请求无法得到响应的时候,它会中断我们的请求,并限制我们的请求调用,通过这种机制我们就能避免系统长时间无响应、服务器压力过高。

API网关

​ 在有了熔断和限流之后,我们系统的内部组件已经比较完整了,但这时我们又会遇到一个微服务带来的问题——用户通过web端或客户端访问我们的系统时,它需要访问多个服务,此时我们就需要在web端或者客户端去维护我们多个服务的服务信息,这与服务去维护其他服务信息一样,是非常让人头疼的。除了这个问题之外,我们还会遇到另一个问题,通常情况下,我们的系统都系统做认证和授权,针对这种分布式的场景,每个服务还需要自己去实现权限校验的功能,也就是说无形中,我们分布式系统实现的代价就高了。为了解决这个问题,Spring Cloud引入了一个组件——API网关,API网关也是注册到注册中心,它的功能就是统一对外的入口,请求不再访问指定的服务,而是同意从网关访问,网关会通过一系列的过滤,最终将请求转发到对应的服务上。

授权服务

​ 我们可以统一入口,那么我们也可以做一些其他的统一操作,比如授权,我们可以在网关中添加权限过滤,这样就不需要在每个服务中单独做服务校验了。

Spring Cloud 常用组件

通过上面的介绍,我们了解了 Spring Cloud 为我们提供的一些组件,也了解了 Spring Cloud 的架构,下面我们进行总结:

  • 服务治理:Spring Cloud Eureka
  • 负载均衡:Spring Cloud Ribbon
  • 熔断限流:Spring Cloud Hystrix
  • 服务调用:Spring Cloud Feign
    • 发起一个请求,原始的情况是使用httpclient,或者是采用spring封装过的resttemplate,但是这两个还是相对比较繁琐的,Feign的存在就是为了简化内部调用,它提供了声明性来提供内部调用,不需要自己再去实现http请求,我们只需要定义一个接口,它就能自动帮我们封装成一个http请求,Feign的实现也是基于resttemplate
  • 网关服务:Spring Cloud Zuul
发布了7 篇原创文章 · 获赞 3 · 访问量 913

猜你喜欢

转载自blog.csdn.net/weixin_42334475/article/details/101428090