我是靠谱客的博主 温婉猫咪,最近开发中收集的这篇文章主要介绍SpringCloud,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是SpringCloud

      Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,它也是分布式架构的一种,准确的说,SpringCloud并不是发明了一个什么,而是把全球开源的微服务技术做了一个整合,从而形成了一个完整的微服务体系,功能是比较完善的。它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。

      Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。Spring Cloud 并不重复造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。

二、SpringCloud优缺点

微服务的框架那么多比如:dubbo、Kubernetes,为什么就要使用Spring Cloud的呢?

优点:

  • 组件丰富,功能齐全。Spring Cloud 为微服务架构提供了非常完整的支持。例如、配置管理、服务发现、断路器、微服务网关等;
  • 微服务可以是跨平台的,可以用任何一种语言开发
  • 开发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
  • 约定优于配置,基于注解,没有配置文件。
  • 开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。

缺点:

  • 项目结构复杂,每一个组件或者每一个服务都需要创建一个项目。
  • 部署门槛高,项目部署需要配合 Docker 等容器技术进行集群部署,而要想深入了解 Docker,学习成本高。

三、SpringCloud注册中心

  • Euraka:注册中心

      Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。在项目中使用Spring Cloud Euraka的原因是它可以利用Spring Cloud Netfilix中其他的组件,如zull等,因为Euraka是属于Netfilix的。

  • Nacos:注册中心(功能更丰富,Alibaba产品)

      国内用的比较多的是Nacos,Nacos是服务注册中心和服务配置中心,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。总结就是,Nacos提供三种功能:服务发现及管理、动态配置服务、动态DNS服务。   Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。连接nacos分布式配置中心一定采用bootstrap形式优先加载 否则可能会报错。在配置文件上加上@RefreshScope注解才可以动态刷新,要不然本地配置缓存不会自动刷新
nacos常用配置。

Nacos 中提供了两种健康检查机制:

  • 客户端主动上报机制。
  • 服务器端反向探测机制。

   如何将多个项目下多个环境的多个配置文件配置在一个配置中心呢?

        用nacos中的 命名空间(Namespace) 隔离不同的项目,用nacos中的 配置分组(group) 隔离同一项目下不同的环境的配置文件。 如在nacos中新增两个命名空间,用于存放两个不同项目的配置文件。注意命名空间ID,不同项目配置对应的命名空间ID。

   nacos可以配置哪些信息?

        注册中心连接地址、配置中心连接地址、配置文件的扩展类型、开发环境

四、微服务

1、微服务技术对比

SpringCloudAlibaba可以同时兼容Dubbo和SpringCloud两种架构。

DubboSpringCloudSpringCloudAlibaba
注册中心zookeeper、RedisEureka、ConsulNacos、Eureka
服务远程调用Dubbo协议Feign (http协议)Dubbo、Feign
配置中心SpringCloudConfigSpringCloudConfig、Nacos
服务网关SpringCloudGateway、ZuulSpringCloudGateway、Zuul
服务监控和保护dubbo-admin,功能弱HystrixSentinel

2、什么是微服务?

      微服务是一种经过良好架构设计的分布式架构方案,或者说是一种架构风格,它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值。

      微服务架构特征:单一职责、面向服务、自治、隔离性强

3、为什么需要微服务?

      单体架构在规模比较小的情况下工作情况良好,但是随着系统规模的扩大,它暴露出来的问题也越来越多,主要有以下几点:复杂性逐渐变高、技术债务逐渐上升、部署速度逐渐变慢、阻碍技术创新、无法按需伸缩。

4、微服务的优点:

      微服务架构还有一个技术外的好处,它使整个系统的分工更加明确,责任更加清晰,每个人专心负责为其他人提供更好的服务。

5、微服务与单体架构区别:

  • 单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。

  • 单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。

  • 单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

6、微服务与分布式的区别?

      分布式架构是微服务的一种实现形式

      微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。分布式和微服的架构很相似,只是部署的方式不一样而已。

五、

1、RestFul和rpc通信方式的对比

RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义 , 并通过持续继承发布,严格版本控制才不会出现冲突。

RestFul是轻量级的接口,服务的提供和调用不存在代码之间的耦合, 只需要一个约定进行规范。

2、微服务有哪些技术栈?

维度(springcloud)

服务开发: springboot spring springmvc

服务配置.与管理:Netfix公司的Archaiusm ,阿里的Diamond

服务注册与发现:Eureka,Zookeeper

服务调用:Rest RPC gRpc

服务熔断器:Hystrix

服务负载均衡:Ribbon Nginx

服务接口调用:Fegin

消息队列:Kafka Rabbitmq activemq

服务配置中心管理:SpringCloudConfig

服务路由( API网关) Zuul

事件消息总线:SpringCloud Bus

3、微服务之间是如何独立通讯的?

  1. 远程调用,比如feign调用,直接通过远程过程调用来访问别的service。
  2. 消息中间件

4、作为服务注册中心,Eureka比Zookeeper好在哪里?

      著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(容错性)。由于分区容错性P在分布式系统中是必须要保证的,因此我们只能在A和C之间进行权衡。

  • Eureka取CAP的AP ,注重可用性, Zookeeper取CAP的CP注重一致性。
  • Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper那样使整个注册服务瘫痪。
  • Zookeeper采用过半数存活原则, Eureka采用自我保护机制解决分区问题。
  • eureka本质是一个工程, Zookeeper只是一个进程。

5、什么是feign?它的优点是什么?

      Feign是声明式http客户端,其作用就是帮我们便捷、优雅的实现http请求的发送,它让微服务之间的调用变得更简单了,类似controller调用service。SpringCloud可在使用Feign时提供负载均衡的http客户端。

      feign,主要是社区,大家都习惯面向接口编程。这个是很多开发人员的规范。调用微服务访问的两种方法:

  • 微服务名字(LoadBalancer)
  • 接口和注解(feign)

       Feign的作用:Feign在使编写java Http客户端变得更容易。

优点:

  • feign采用的是基于接口的注解
  • feign集成了ribbon ,具有负载均衡的能力
  • 整合了Hystrix ,具有熔断的能力

使用:

  • 添加pom依赖。
  • 启动类添加@EnableFeignClients
  • 定义一个接口@FeignClient(name="xxx' )指定调用哪个服务

6、什么是Ribbon ?

      ribbon是一个负载均衡客户端 ,可以很好的控制htt和tcp的一些行为。feign默认集成了ribbon。

7、统一网关Gateway

        用户要想访问微服务,不能直接访问,必须要经过网关

 网关的技术实现:

在SpringCloud中网关的实现包括两种:

  • gateway
  • zuul

        Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是 基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

通过网关去访问各个服务(流程):

8、SpringCloud五大组件

  • 服务发现——Netflix Eureka (主要是把我们的各种服务注册进去,以便以后去调用服务)
  • 服务网关——Netflix Zuul (用于对用户的身份认证、请求限流,统一地址)
  • 负载均衡——Netflix Ribbon (有多个服务的时候,我们就需要用负载均衡策略去调用)
  • 熔断器——Netflix Hystrix (服务也可能会崩掉,这就需要去做服务的熔断,主要是做熔断、降级和限流的)
  • 分布式配置——Spring Cloud Config (不同的微服务中可能会有一些配置,管理起来是不好管理的,所以就得有一个统一的配置中心)

9、什么是分布式事务?

        随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用,分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下的事务机制称之为分布式事务。

分布式事务解决方案:TCC

        TCC 其实就是采用的补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段:

Try 阶段主要是对业务系统做检测及资源预留

Confirm 阶段主要是对业务系统做确认提交,Try阶段执行成功并开始执行 Confirm阶段时,默认 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功。

Cancel 阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。

举个例子,假入 Bob 要向 Smith 转账,思路大概是:

我们有一个本地方法,里面依次调用

1、首先在 Try 阶段,要先调用远程接口把 Smith 和 Bob 的钱给冻结起来。

2、在 Confirm 阶段,执行远程调用的转账的操作,转账成功进行解冻。

3、如果第2步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解冻方法 (Cancel)。

最后

以上就是温婉猫咪为你收集整理的SpringCloud的全部内容,希望文章能够帮你解决SpringCloud所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部