概述
一、什么是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两种架构。
Dubbo | SpringCloud | SpringCloudAlibaba | |
---|---|---|---|
注册中心 | zookeeper、Redis | Eureka、Consul | Nacos、Eureka |
服务远程调用 | Dubbo协议 | Feign (http协议) | Dubbo、Feign |
配置中心 | 无 | SpringCloudConfig | SpringCloudConfig、Nacos |
服务网关 | 无 | SpringCloudGateway、Zuul | SpringCloudGateway、Zuul |
服务监控和保护 | dubbo-admin,功能弱 | Hystrix | Sentinel |
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、微服务之间是如何独立通讯的?
- 远程调用,比如feign调用,直接通过远程过程调用来访问别的service。
- 消息中间件
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复