SpringCloud
什么是微服务架构
微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务
运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部
署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管
理。
为什么需要学习SpringCloud
- 随着我们应用业务逐渐变得复杂,传统的单体式架构已经不满足我们的日常开发了。这个时候我们就需要从传统的单体架构转变为微服务式的架构模式。
- 传统的单体式架构,在业务越来越复杂,代码量越来越多的时候。会导致管理越来越困难,代码结构的越来越混乱。同时,这也会给业务的快速迭代带来巨大挑战;
- 开发效率变低:开发人员同时开发一套代码,很难避免代码冲突。开发过程会伴随着不断解决冲突的过程,这会严重的影响开发效率;
排查解决问题成本高:线上业务发现 bug,修复 bug 的过程可能很简单。但是,由于只有一套代码,需要重新编译、打包、上线,成本很高。 - 由于单体结构的应用随着系统复杂度的增高,会暴露出各种各样的问题。近些年来,微服务架构逐渐取代了单体架构,且这种趋势将会越来越流行。Spring Cloud是目前最常用的微服务开发框架,已经在企业级开发中大量的应用。
SpringCloud的优缺点
优点
- 产出于Spring大家族,Spring在企业级开发框架中无人能敌,来头很大,可以保证后续的更新、完善
- 轻轻松松几行代码,注解或者配置就完成了熔断、负载均衡、注册中心的各种平台功能
- Spring Cloud 社区活跃度很高,教程很丰富,遇到问题很容易找到解决方案
- 服务拆分粒度更细,耦合度比较低,有利于资源重复利用,有利于提高开发效率
- 可以更精准的制定优化服务方案,提高系统的可维护性
- 减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发
- 微服务可以是跨平台的,可以用任何一种语言开发
适于互联网时代,产品迭代周期更短
缺点
- 微服务过多,治理成本高,不利于维护系统
- 分布式系统开发的成本高(容错,分布式事务等)对团队挑战大
- 总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架,目前很多企业开始用微服务、Spring Cloud的优势是显而易见的。因此对于想研究微服务架构的同学来说,学习Spring Cloud是一个不错的选择。
什么是SpringCloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringBoot和SpringCloud的区别?
1.SpringBoot专注于快速方便的开发单个个体微服务。
2.SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并且管理起来,为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。
3.SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
4.SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
SpringCloud 和 dubbo的区别?
- 服务调用方式: dubbo是RPC,而SpringCloud是rest api
- 注册中心:dubbo是zookeeper,springcloud默认是eureka,当然也可能替换为zookeeper
- 服务网关:dubbo本身没有实现服务网关,只能通过其他第三方激素整合。而springcloud又zuul路由网关,作为路由服务器,进行消费者的请求分发,springcould支持断路器,与git完美继承配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
SpringCloud由什么组成?
- Spring Cloud Eureka:服务注册与发现
- Spring Cloud Zuul:服务网关
- Spring Cloud Ribbon:客户端负载均衡
- Spring Cloud Feign:声明性的Web服务客户端
- Spring Cloud Hystrix:断路器
- Spring Cloud Config:分布式统一配置管理
等等
使用 Spring Boot 开发分布式微服务时,我们面临什么问题
- 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
- 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
- 冗余-分布式系统中的冗余问题。
- 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机 集群,网络链路,中央处理单元,或磁盘驱动器的分布。
- 性能-问题 由于各种运营开销导致的性能问题。
- 部署复杂性-Devops 技能的要求。
Spring Cloud 和dubbo区别?
- springcloud 不是一个开发框架,而是一整套的解决方案,而 dubbo 仅仅是一个 rpc 的框架。
- dubbo 采用的是传输层 tcp 协议,是二进制传输的,占用带宽较少,序列化采用的是 jdk 自带的序列化协议。springcloud 是应用层 http 协议,占用带宽比较多,同时 springcloud 采用的是 json 报文传输,消耗会比较大。
- dubbo 调用使用的是长链接,适合传输数据量小的包,而对于 springcloud 是短连接,适合传输大数据量的信息,比如图片、文本之类的。
- dubbo 开发需要依赖 jar 包,对依赖的管理比较复杂。springcloud 的接口协议比较松散,约束性不强。
- 服务调用方式:dubbo是RPC springcloud Rest Api
- 注册中心使用的不同,dubbo 默认使用的是 zk, 而 springcloud 使用的注册中心为 eureka, 前者保证的是 cp ,而后者保证的是 ap, 但是随着 springcloud alibaba 的出现,又引入了 nacos 这样的神器,兼有注册中心和配置中心的功能。
服务注册和发现是什么意思?SpringCloud如何实现?
可以知道,随着服务的越来越多,越来越杂,服务之间的调用会越来越复杂,越来越难以管理。而当某个服务发生了变化,或者由于压力性能问题,多部署了几台服务,怎么让服务的消费者知晓变化,就显得很重要了。不然就会存在调用的服务其实已经下线了,但调用者不知道等异常情况。
这个时候有个服务组件去统一治理就相当重要了。简单来说,一个服务治理组件应该具备以下几个功能:
- 服务注册表
服务治理组件的核心,它用来记录各个微服务的信息,比如说微服务的名称、IP、端口等。服务注册组件提供查询API和管理API,查询API用来查询可用的微服务实例,管理API用于服务的注册和注销。 - 服务注册与发现
服务注册是指微服务在启动时,将自己的信息注册到服务治理组件上的过程。
服务发现是指查询可用微服务列表及其网络地址的机制。 - 服务检查
服务治理组件使用一定机制定时检测已注册的服务,是否在线,或者是否无法连接等,若发现无法访问,就会从服务注册表中移除该实例,进行下线操作。
https://www.cnblogs.com/okong...
Eureka
什么是Eureka
Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过Eureka Service来监控各个微服务是否运行正常。
Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。
Eureka有三部分组成
+ Service Provider: 暴露服务的提供方。
+ Service Consumer:调用远程服务的服务消费方。
+ EureKa Server: 服务注册中心和服务发现中心
Eureka怎么实现高可用
集群: 注册多台Eureka,然后把SpringCloud服务互相注册,客户端从Eureka获取信息时,按
照Eureka的顺序来访问。
什么是Eureka的自我保护模式
默认情况下,如果Eureka Server在一定时间内(默认 90 秒,其实不止 90 秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。
DiscoveryClient的作用
可以从注册中心中根据服务别名获取注册的服务器信息。
什么是微服务架构
微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务
运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部
署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管
理。
为什么需要学习SpringCloud
- 随着我们应用业务逐渐变得复杂,传统的单体式架构已经不满足我们的日常开发了。这个时候我们就需要从传统的单体架构转变为微服务式的架构模式。
- 传统的单体式架构,在业务越来越复杂,代码量越来越多的时候。会导致管理越来越困难,代码结构的越来越混乱。同时,这也会给业务的快速迭代带来巨大挑战;
- 开发效率变低:开发人员同时开发一套代码,很难避免代码冲突。开发过程会伴随着不断解决冲突的过程,这会严重的影响开发效率;
排查解决问题成本高:线上业务发现 bug,修复 bug 的过程可能很简单。但是,由于只有一套代码,需要重新编译、打包、上线,成本很高。 - 由于单体结构的应用随着系统复杂度的增高,会暴露出各种各样的问题。近些年来,微服务架构逐渐取代了单体架构,且这种趋势将会越来越流行。Spring Cloud是目前最常用的微服务开发框架,已经在企业级开发中大量的应用。
SpringCloud的优缺点
优点
- 产出于Spring大家族,Spring在企业级开发框架中无人能敌,来头很大,可以保证后续的更新、完善
- 轻轻松松几行代码,注解或者配置就完成了熔断、负载均衡、注册中心的各种平台功能
- Spring Cloud 社区活跃度很高,教程很丰富,遇到问题很容易找到解决方案
- 服务拆分粒度更细,耦合度比较低,有利于资源重复利用,有利于提高开发效率
- 可以更精准的制定优化服务方案,提高系统的可维护性
- 减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发
- 微服务可以是跨平台的,可以用任何一种语言开发
适于互联网时代,产品迭代周期更短
缺点
- 微服务过多,治理成本高,不利于维护系统
- 分布式系统开发的成本高(容错,分布式事务等)对团队挑战大
- 总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架,目前很多企业开始用微服务、Spring Cloud的优势是显而易见的。因此对于想研究微服务架构的同学来说,学习Spring Cloud是一个不错的选择。
什么是SpringCloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringBoot和SpringCloud的区别?
1.SpringBoot专注于快速方便的开发单个个体微服务。
2.SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并且管理起来,为各个服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、精选决策、分布式会话等集成服务。
3.SpringBoot可以离开SpringCloud独立开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
4.SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
SpringCloud 和 dubbo的区别?
- 服务调用方式: dubbo是RPC,而SpringCloud是rest api
- 注册中心:dubbo是zookeeper,springcloud默认是eureka,当然也可能替换为zookeeper
- 服务网关:dubbo本身没有实现服务网关,只能通过其他第三方激素整合。而springcloud又zuul路由网关,作为路由服务器,进行消费者的请求分发,springcould支持断路器,与git完美继承配置文件支持版本控制,事务总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
SpringCloud由什么组成?
- Spring Cloud Eureka:服务注册与发现
- Spring Cloud Zuul:服务网关
- Spring Cloud Ribbon:客户端负载均衡
- Spring Cloud Feign:声明性的Web服务客户端
- Spring Cloud Hystrix:断路器
- Spring Cloud Config:分布式统一配置管理
等等
使用 Spring Boot 开发分布式微服务时,我们面临什么问题
- 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
- 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
- 冗余-分布式系统中的冗余问题。
- 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机 集群,网络链路,中央处理单元,或磁盘驱动器的分布。
- 性能-问题 由于各种运营开销导致的性能问题。
- 部署复杂性-Devops 技能的要求。
Spring Cloud 和dubbo区别?
- springcloud 不是一个开发框架,而是一整套的解决方案,而 dubbo 仅仅是一个 rpc 的框架。
- dubbo 采用的是传输层 tcp 协议,是二进制传输的,占用带宽较少,序列化采用的是 jdk 自带的序列化协议。springcloud 是应用层 http 协议,占用带宽比较多,同时 springcloud 采用的是 json 报文传输,消耗会比较大。
- dubbo 调用使用的是长链接,适合传输数据量小的包,而对于 springcloud 是短连接,适合传输大数据量的信息,比如图片、文本之类的。
- dubbo 开发需要依赖 jar 包,对依赖的管理比较复杂。springcloud 的接口协议比较松散,约束性不强。
- 服务调用方式:dubbo是RPC springcloud Rest Api
- 注册中心使用的不同,dubbo 默认使用的是 zk, 而 springcloud 使用的注册中心为 eureka, 前者保证的是 cp ,而后者保证的是 ap, 但是随着 springcloud alibaba 的出现,又引入了 nacos 这样的神器,兼有注册中心和配置中心的功能。
服务注册和发现是什么意思?SpringCloud如何实现?
可以知道,随着服务的越来越多,越来越杂,服务之间的调用会越来越复杂,越来越难以管理。而当某个服务发生了变化,或者由于压力性能问题,多部署了几台服务,怎么让服务的消费者知晓变化,就显得很重要了。不然就会存在调用的服务其实已经下线了,但调用者不知道等异常情况。
这个时候有个服务组件去统一治理就相当重要了。简单来说,一个服务治理组件应该具备以下几个功能:
- 服务注册表
服务治理组件的核心,它用来记录各个微服务的信息,比如说微服务的名称、IP、端口等。服务注册组件提供查询API和管理API,查询API用来查询可用的微服务实例,管理API用于服务的注册和注销。 - 服务注册与发现
服务注册是指微服务在启动时,将自己的信息注册到服务治理组件上的过程。
服务发现是指查询可用微服务列表及其网络地址的机制。 - 服务检查
服务治理组件使用一定机制定时检测已注册的服务,是否在线,或者是否无法连接等,若发现无法访问,就会从服务注册表中移除该实例,进行下线操作。
https://www.cnblogs.com/okong...
什么是Eureka
Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过Eureka Service来监控各个微服务是否运行正常。
Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。
Eureka有三部分组成
+ Service Provider: 暴露服务的提供方。
+ Service Consumer:调用远程服务的服务消费方。
+ EureKa Server: 服务注册中心和服务发现中心
Eureka怎么实现高可用
集群: 注册多台Eureka,然后把SpringCloud服务互相注册,客户端从Eureka获取信息时,按
照Eureka的顺序来访问。
什么是Eureka的自我保护模式
默认情况下,如果Eureka Server在一定时间内(默认 90 秒,其实不止 90 秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,而微服务本身是正常运行的,此时不应该移除这个微服务,所以引入了自我保护机制。
DiscoveryClient的作用
可以从注册中心中根据服务别名获取注册的服务器信息。
Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别
- ZooKeeper中的节点服务挂了就要选举 在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的, 选举就是改微服务做了集群,必须有一台主其他的都是从
- Eureka各个节点是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服务可用,数据都是最新的。 如果查询到的数据并不是最新的,就是因为Eureka的自我保护模式导致的
- Eureka本质上是一个工程,而Zookeeper只是一个进程
- Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper一样是的整个注册系统瘫痪。
Zookeeper保证是CP,而Eureka保证的是AP。
CAP原则:
C:一致性;A:可用性;P:分区容错性
Zuul
什么是网关
网关相当于一个网络服务架构的入口,所有网络请求必须通过网关转发到具体的服务。
网关的作用是什么?
统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等等。
什么是Spring Cloud Zuul(服务网关)
Zuul是从设备和网络到后端应用程序所有请求的后门,为内部服务提供可配置的对外URL到服务的映射关系,基于JVM的后端路由器。具有以下的功能:
- 认证与授权
- 压力测试
- 金丝雀测试
- 动态路由
- 负载削减
- 静态相应处理
- 主动流量管理
其底层是基于Servlet,本质就是一系列的Filter所构成的责任链。
网关与过滤器有什么区别
网关是对所有服务的请求进行分析过滤,而过滤器只是对单个服务的分析过滤。
常用网关框架有那些?
Nginx、Zuul、Gatewa
Zuul与Nginx有什么区别?
相同点
Zuul和Nginx都可以实现负载均衡、反向代理(隐藏真实ip地址)
不同点
- 所采用的编程语言不同:Nginx采用C语言开发的,而Zuul是采用Java语言开发的
- 负载均衡实现方式不同:Zuul采用ribbon+eureka实现本地负载均衡,而Nginx采用服务器实现负载均衡
- 所适合应用的领域不同:Nginx适合于服务器端负载均衡,Zuul适合微服务中实现网关
- Nginx相比zuul功能会更加强大,因为Nginx整合一些脚本语言(Nginx+lua)
既然Nginx可以实现网关?为什么还需要使用Zuul框架
Zuul是SpringCloud集成的网关,使用Java语言编写,可以对SpringCloud架构提供更灵活的服
务。
如何设计一套API接口
考虑到API接口的分类可以将API接口分为开发API接口和内网API接口
- 内网API接口用于局域网,为内部服务器提供服务。
- 开放API接口用于对外部合作单位提供接口调用,需要遵循Oauth2.0权限认证协议。同时还需要考虑安全性、幂等性等问题。
ZuulFilter常用有那些方法
- Run():过滤器的具体业务逻辑
- shouldFilter():判断过滤器是否有效
- filterOrder():过滤器执行顺序
- filterType():过滤器拦截位置
如何实现动态Zuul网关路由转发
通过path配置拦截请求,通过ServiceId到配置中心获取转发的服务列表,Zuul内部使用Ribbon实现本地负载均衡和转发。
Zuul网关如何搭建集群
使用Nginx的upstream设置Zuul服务集群,通过location拦截请求并转发到upstream,默认使用轮询机制对Zuul集群发送请求。
Ribbon
负载平衡的意义什么?
负载均衡是一种基础的网络服务,主要是为了解决公司业务并发压力,加强网络处理能力,降低单台设备的资源压力,提升整体的服务性能。客户端的流量首先会到达负载均衡服务器,由负载均衡服务器通过一定的调度算法将流量分发到不同的应用服务器上面,同时负载均衡服务器也会对应用服务器做周期性的健康检查,当发现故障节点时便动态的将节点从应用服务器集群中剔除,以此来保证应用的高可用。
Ribbon是什么?
- Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法