Spring cloud应该如何入门,需要学习哪些基础才可以快速掌握?

2024-05-14

1. Spring cloud应该如何入门,需要学习哪些基础才可以快速掌握?

学习Spring cloud要对Spring Boot有相当的理解与认知,因为Spring cloud的基础是Spring Boot。
一:什么是Spring cloudSpring cloud是多个项目的集合体,也是多种重要技术的集合体,它是一系列的技术的结合体。学习spring cloud需要有足够强大的耐心,因为这是一个非常复杂的过程,学习spring cloud需要了解怎么创建和运行SpringBoot应用,因为springboot是一种新型技术,而spring cloud 是这些技术的结合体,spring cloud的基础功能有服务治理客户端负载均衡,服务容错保护,声明式服务调用,API网关服务,分布式配置中心。

二:从集群,分布式,微服务入手学习spring cloud要从集群,分布式,微服务入手,首先集群是一种计算机系统,它可以用来改进单个计算机的计算速度,已经提高单个计算机运作的正确率,集群计算机系统可以高效率的将计算机软件和计算机硬件组合在一起,也就是通过多台计算机来完成一个工作从而提高工作效率,而分布式系统也是一组计算机,它是一个传递并协调信息通信的系统,这样可以合理利用资源,又可以降低耦合度,可以让各个板块即独立又相互之间有联系,也就是说分布式是一个件一件事情分解成多件事情,然后发布给不同的人做的系统,分工合作。而微服务就是对整个系统进行划分的各个小的“系统”而微服务只是一种思想,基于这种思想便有了spring cloud ,


总而言之,学习spring cloud要从集群,微服务,分布式,springboot等入手,而其中springboot是最基础的。

Spring cloud应该如何入门,需要学习哪些基础才可以快速掌握?

2. 如何使用Spring Cloud

使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
  API 网关
  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
  Docker 实例
  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。
  开始构建
  在这之前,请先移步至项目的GitHub 仓库。
  https://github.com/kbastani/spring-cloud-microservice-example
  克隆或者fork这个项目并且把源码下载到自己的电脑上。下载完毕后,你需要使用Maven和Docker来编译和构建本地的容器镜像。
  下载Docker
  首先,如果你还没有Docker请先下载它。可以跟随这个指南来获取Docker:https://docs.docker.com/installation/,然后在开发机上安装并运行。
  当然你也需要安装Docker Compose(https//docs.docker.com/compose/),这个指南将会帮到你:https://docs.docker.com/compose/install/。
  环境要求
  能够运行实例程序,需要在你的开发机上安装下面的软件:
  Maven 3
  Java 8
  Docker
  Docker Compose
  构建项目
  通过命令行方式来构建当前项目,在项目的根目录中运行如下的命令:
  $ mvn clean install
  项目将会根据pom.xml中的每一个项目声明中下载相应的依赖jar包。每一个服务都将会被构建,同时Maven的Docker插件将会自动从本地Docker Registry中构建每一个容器镜像。Docker将会在构建成功后,根据命令行运行mvn clean install来清除相应的资源。

3. 如何使用Spring Cloud

使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
  API 网关
  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
  Docker 实例
  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群

如何使用Spring Cloud

4. 如何使用Spring Cloud

使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
  API 网关
  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
  Docker 实例
  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。
  
  

5. 如何使用Spring Cloud

使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
  API 网关
  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
  Docker 实例
  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。

如何使用Spring Cloud

6. 如何使用Spring Cloud

使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。

7. SpringCloud入门简述

   微服务,是一个小型的服务,也是一种设计理念,将一个大型繁杂的系统拆分为多个小型的服务,进行独立部署,这些服务在独立进程中运行,通过特定的协议进行通信 
      优点: 
      缺点: 
      在服务通信性能上RPC更强,但是Rest更为灵活 
      SpringCloud是基于SpringBoot实现的微服务框架,为开发人员提供了很多快速构建分布式系统中常见模式的工具,包括配置管理、服务发现、断路器、智能路由、微代理,控制总线等。 
       Spring Cloud专注于为典型的用例提供良好的开箱即用体验,并为其他用例提供扩展性机制。  
     参考地址:  
      Eureka是Netflix开发的基于Rest的服务发现框架,SpringCloud基于此进行二次封装,实现服务的管理。 
      创建一个Eureka服务:https://www.cnblogs.com/william-m/p/15991511.html 
     如果没有Eureka,如何进行服务之间的调用?  
      使用Rest进行调用,先将RestTemplate注册到Bean,然后: 
      Eureka遵循的是AP原则,Eureka各个节点都是平等的,部分服务节点的下线不会影响正常服务的调用,只要该服务还剩下一个节点在线就可以进行正常的服务访问,即保证了服务可用,但是并不能保证查询到的信息是最新的。Zookeeper的CP原则与之不同,Zookeeper会有一个master节点来保证一致性,一旦master节点挂掉,剩余的节点会重新选举一个leader,而选择的过程需要时间,这期间会使得该服务瘫痪,所以需要满足高可用的话该情况是不能够容忍的。 
      Spring Cloud Ribbon是一个基于HTTP和TCP的   客户端负载均衡   工具,基于Netflix Ribbon实现,通过轮询、随机等算法选择一个可用服务。 
      目的:将用户的请求平摊的分配到多个服务上,实现高可用 
         最大区别:服务清单所存储的位置 
      客户端先发送请求到负载均衡服务器,然后由负载均衡服务器通过负载均衡算法,在众多可用的服务器之中选择一个来处理请求。 
      客户端自己维护一个可用服务器地址列表,在发送请求前先通过负载均衡算法选择一个将用来处理本次请求的服务器,然后再直接将请求发送至该服务器。 
      逻辑时序:RestTemplate发起请求   负载均衡器拦截器拦截   LoadBalanceClient获取ILoadBalance   获取服务列表   根据负载均衡器选择一个server   发起请求   记录调用信息 
        Ribbon基于HTTP和TCP客户端的负载均衡器可以自己构建HTTP请求,使用RestTemplate发送服务 
      Feign基于Ribbon进行改进,采用接口的方式,将需要调用的服务的方法定义成抽象方法 
     Consumer应用  
    启动类 
    为了调用Product应用服务的接口类 
     Product应用  
    controller 
      Hystrix是一个服务容错与保护的组件,用于   服务降级   、   服务熔断   、   服务限流   等等,能够保证在其中一个服务出现问题的时候,不会出现级联故障,防止雪崩,提高分布式服务的健壮性。 
      将某些服务停掉会i这不进行业务处理,释放资源来维持主要服务的功能。 
      应对服务雪崩的一种保险措施,是微服务的链路保护机制,是服务降级的一种特殊处理方式。 
      为了应对某个服务故障的情况,保证系统的整体可用性,熔断器会切断对该服务的请求,返回一个比较友好的错误响应,直到服务恢复正常 
      熔断机制的三种状态: 
    示例: 
    熔断:直接切断服务的调用 
    降级:牺牲非核心业务保证核心服务的正常 
    限流:服务访问量达到阈值后拒绝多余的调用 
      Zuul是一个微服务网关。网关:是一个网络系统的前置入口。也就是说要想访问一个有网关的网络系统请求相应的服务,需要先进入网关,然后路由到相应的服务。 
      通常是组成一个系统的微服务很多、或者有权限要求时需要用到网关。 
      Zuul提供一个过滤器,父类为ZuulFilter,用来过滤代理请求,提供额外的功能逻辑(这点类似于AOP),包括前置过滤、路由后过滤、后置过滤、异常过滤。 
      ZuulFilter包含的抽象方法:filterType、filterOrder、shouldFilter、run 
      
         当微服务众多的时候,想要管理各个服务的配置时过于繁杂,SpringCloud Config则可以用来对每个微服务的配置进行集中的管理。可以实现权限管控、灰度发布、版本管理、格式检验、安全配置等。 
     作用:  
     特点:  
   文章来自https://www.cnblogs.com/william-m/p/16153557.html

SpringCloud入门简述

8. Spring Cloud

 本文中我们主要介绍微服务开发框架——Spring Cloud。尽管Spring Cloud带有"Cloud"的字样,但它并不是云计算解决方案,而是Spring Boot的基础上构建的,用于快速构建分布式系统的通用模式的工具集。
   Spring Cloud有以下特点:
                                           由上图可知,Spring Cloud是以  英文单词+SR+数字  的形式命名版本号的。那么英文单词和SR分别表示什么呢?   因为Spring Cloud是一个综合项目,它包含很多子项目。由于子项目也维护着自己的版本号,Spring Cloud采用了这种命名方式,从而避免与子项目的版本混淆。其中英文单词如Edware是伦敦某地铁站名,它们按照字母顺序发行,可以将其理解为主版本的演进。SR表示"Service Release",一般表示Bug修复。
    版本兼容性如下    
                                           
    版本内容    
                                           
   可参考官方文档: https://spring.io/projects/spring-cloud#overview 
                                           我的上一篇博客(微服务理论篇)中谈到,对单体应用进行服务拆分得到各个微服务,而这些服务又是相互独立的,那么我们如何知道各个微服务的健康状态、如何知道某个微服务的存在呢?由此、一个拥有服务发现的框架显得尤为重要。这也就是Eureka诞生的原因。
   综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
                                           通过使用Eureka已经实现了微服务的注册与发现。启动各个微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上。似乎一切更美好了一些。然而,这样的架构依然有一些问题,如负载均衡。一般来说,各个微服务都会部署多个实例。那么服务消费者要如何将请求分摊到多个服务提供实例上呢?
                                           如果服务提供者相应非常慢,那么消费者对提供者的请求就会被强制等待,知道提供者响应或超时。在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统崩溃。   微服务架构的应用系统通常包含多个服务层。微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系。而这种由于"基础服务故障"导致"级联故障"的现象称为雪崩效应。
                                           如图所示,A最为服务提供者(基础服务),B为A的服务消费者,C和D是B的服务消费者。当A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。   那么Hystrix是如何容错的呢?
                                           以下对该图做个简单讲解:
   Zuul作为微服务架构中的微服务网关。微服务架构经过前几个组件的组合,已经有了基本的雏形了,那么我们为什么还要使用微服务网关呢?我们可以想象,一般情况下我们一个业务并不是只调用一个接口就可以完成一个业务需求。   如果让客户端直接与各个微服务通信,会有以下问题:
                                           如图,微服务网关封装了应用程序的内部结构,客户端只须跟网关交互,而无须直接调用特定微服务接口。同时,还有以下优点:
   为什么要同一管理微服务配置?   对于传统的单体应用,常常使用配置文件管理所有配置。例如一个Spring Boot 项目开发的单体应用,可以将配置内容放到application.yml文件中。如果需要切换环境,可以设置多个Profile,并在启用应用时指定spring.profile.active={profile}。   而在微服务架构中,微服务的配置管理一般有以下需求: