发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring并没有重复制造轮子,它只是将目前各家公司(主要是 Netflix )开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Eureka 是 Spring Cloud 微服务架构中的注册中心,专门负责服务的注册与发现,里面有一个注册表,保存了各个服务器的 机器和端口。
Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置。如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中其他分片会把它们的状态再次同步回来
Eureka服务端
Eureka客户端:主要处理服务的注册与发现。客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端想注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态
Eureka客户端
Eureka Server 的高可用实际上就是将自己作为服务向其他注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用效果。
Zuul网关负责转发请求给对应的服务,这个组件是负责网络路由的。
Spring Cloud Zuul通过与Spring Cloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息
对于路由规则的维护,Zuul默认会将通过以服务名作为ContextPath的方式来创建路由映射。搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。
Zuul提供了一套过滤器机制,可以支持在API网关无附上进行统一调用来对微服务接口做前置过滤,已实现对微服务接口的拦截和校验
ribbonServerList
RibbonServerList
DiscoveryEnabledNIWSServerList
NIWSDiscoveryPing
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用只需要如下两步:
服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用
首先,对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
接着调用接口的时候,本质就是调用Feign创建的动态代理
Feign的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址
针对这个地址,发起请求、解析响应
Feign是和Ribbon以及Eureka紧密协作的
微服务网关更多是在前后端分离,或者说涉及到独立的类似手机APP等前端应用的时候使用的最多,即把内部各个微服务组件模块的API接口能力统一注册和接入到网关,对于APP也只需要访问网关暴露的接口即可,同时通过网关还可以进一步的实现安全隔离。
也就是说在这种场景下,网关更多的是实现了接口服务的代理和路由转发能力,更多的是向外的一种能力发布。
一个独立的开发团队,为保证独立自治,以及内部多个微服务模块间的交互集成,最好启用独立的服务注册中心实现服务注册,发现能力。即开发团队内部多个微服务模块间的集成,不需要通过网关,只需要通过服务注册中心进行集成即可。
开发团队需要暴露能力给外部,包括暴露能力给其它的开发团队,需要考虑将该API接口注册到外部的网关上。在这里建议是拆分两个独立网关,一个是内部API网关,一个是放置到DMZ区面对公网访问的API网关。对于服务如果同时涉及到内部和外部使用,则两边注册。建议不要通过两次网关去路由,一个是影响性能,一个是不方便后续问题排查。
构建在开发团队之外的API网关必须具备负载均衡能力,可以配置多个IP地址。通过该API网关也最好具备和Docker容器扩展后的服务自动注册和地址加入扩展能力。
服务发现是一个古老的话题,当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有一个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将一个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本可以满足所有的RESTful服务的发现,此时服务的IP列表通常配置在Nginx或者LVS。后来出现了RPC服务,服务的上下线更加频繁,人们开始寻求一种能够支持动态上下线并且推送IP列表变化的注册中心产品。
搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。
这是一款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长一段时间里,它是国人在提起RPC服务注册中心时心里想到的唯一选择,这很大程度上与Dubbo在中国的普及程度有关。
Nacos一大特性是即支持CP,也支持AP。可以根据需要灵活选择。
值得一提的是,Nacos作为配置中心的持久化机制可以依赖于Mysql来完成(默认依赖于内置数据库)。只需要将Nacos目录下的sql脚本放到mysql中执行(会生成11个表),然后在nacos配置文件里面配一下mysql的账号密码即可。这样使用mysql作为数据源的方式相比于nacos内置数据库来说更容易管理
Mysql
Consul是HashiCorp公司推出的一个开源工具。
对比SpringCloud,Kubernetes也提供完整的分布式微服务管理框架,几乎所有组件都有对应的产品,其中Etcd也可以提供类似Eureka的注册中心。
在 Go 生态中,还可以选择基于 Etcd 作为注册中心,Etcd 是由 CoreOS 团队维护的、高可用分布式键值存储数据库,可用于为集群提供配置和服务发现功能,Google 开源的容器管理工具 Kuberbetes 就是基于 Etcd 的。
和 Consul 一样,Etcd 也是基于 Raft 协议作为分布式一致性算法来解决领导者选举和日志复制问题,同样也是基于 Go 语言编写。
Etcd 也支持代理模式(proxy),只不过在 Etcd 中,代理模式和 Consul 的客户端代理模式类似,安装在部署服务的节点上,用来转发请求到 Etcd 集群,本身不存储任何数据,Etcd 集群相当于 Consul 中以服务端模式运行的 Consul 集群,通常要求配置三个及以上节点(不要太多,3~5就够了,以便可用性和性能上达到平衡),负责真正的请求处理 —— 服务注册与发现。
在目前最新版本的 Etcd v3中,通过网关模式(gateway)取代了 V2 版本中的代理模式(proxy)。
从服务发现的实现原理上来说,Consul 和 Etcd 的基本设计思路是一致的,Etcd 更简单,Consul 则更像一个全栈的解决方案,功能比 Etcd 要更丰富,比如支持可视化的 Web UI 管理界面、支持多数据库中心、安全层面除了 HTTPS 外还支持 ACL、更加全面的健康检查功能、内置 DNS Server 等,这些都是 Etcd 所不具备的,但是更全面的功能往往意味着更高的复杂性,针对微服务的服务注册和发现场景,Etcd 完全够用了。
Spring Cloud Config:配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git 以及 Subversion。
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
Eureka:云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Eureka
Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Hystrix
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
Zuul
Archaius:配置管理 API,包含一系列配置管理 API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
Consul:封装了 Consul 操作,Consul 是一个服务发现与配置工具,与 Docker 容器可以无缝集成。
Spring Cloud for Cloud Foundry:通过 Oauth2 协议绑定服务到 CloudFoundry,CloudFoundry 是 VMware 推出的开源 PaaS 云平台。
Spring Cloud Sleuth:日志收集工具包,封装了 Dapper 和 log-based 追踪以及 Zipkin 和 HTrace 操作,为 Spring Cloud 应用实现了一种分布式追踪解决方案。
Spring Cloud Data Flow:大数据操作工具,作为 Spring XD 的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。
Spring Cloud Security:基于 Spring Security 的安全工具包,为你的应用程序添加安全控制。
Spring Cloud Zookeeper:操作 Zookeeper 的工具包,用于使用 Zookeeper 方式的服务发现和配置管理。
Spring Cloud Stream:数据流操作开发包,封装了与 Redis、Rabbit、Kafka 等发送接收消息。
Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。
Ribbon
Turbine:Turbine 是聚合服务器发送事件流数据的一个工具,用来监控集群下 Hystrix 的 Metrics 情况。
Feign:Feign 是一种声明式、模板化的 HTTP 客户端。
Feign
Spring Cloud Task:提供云端计划任务管理、任务调度。
Spring Cloud Connectors:便于云端应用程序在各种 PaaS 平台连接到后端,如:数据库和消息代理服务。
Spring Cloud Cluster:提供 Leadership 选举,如:Zookeeper,Redis,Hazelcast,Consul 等常见状态模式的抽象和实现。
Spring Cloud Starters:Spring Boot 式的启动项目,为 Spring Cloud 提供开箱即用的依赖管理。
Nacos PMC 朱鹏飞的深度技术分析
深入理解 Spring Cloud 核心组件与底层原理
Spring Cloud核心模型 & 案例汇集
基于电商网站的spring Cloud架构分析
一个完整的Spring Cloud的分布式架构
Spring Cloud - Nacos与Eureka区别及如何选型
各大微服务注册中心简单对比:ZooKeeper、Eureka、Consul 、Nacos
微服务网关和服务注册中心
注册中心与API网关不是这样用的!
Eureka介绍和部署
Eureka集群部署的踩坑记录
来自: wkggsddu > 《架构》
0条评论
发表
请遵守用户 评论公约
海信商业云平台的Spring Cloud落地实践
海信商业云平台的Spring Cloud落地实践。选择并扩展适合传统企业的微服务框架。微服务构件的结构化定义微服务构件SC=(SCID,R,DS,Con...
你和Alibaba架构师差的就是这份分布式微服务文档的距离
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服务架构势在必行,亟需一个治理系统确保...
Spring Cloud Alibaba到底坑不坑?
Spring Cloud Alibaba到底坑不坑?Github地址:https://github.com/spring-cloud-incubator/spring-cloud-alibaba/tree/master/spring-c...
spring cloud 之 -- eureka vs consul,该选择谁?
spring cloud 之 -- eureka vs consul,该选择谁?1-- eureka vs consul.Zookeeper和Consul :满足CP,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用...
Spring Cloud 微服务架构图
Spring Cloud 微服务架构图 Spring Cloud 微服务总体架构图。由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应...
对SpringCloud微服务架构的理解
服务治理:Spring Cloud Eureka负载均衡:Spring Cloud Ribbon熔断限流:Spring Cloud Hystrix服务调用:Spirng Cloud Feign网关服务:S...
【Java高阶必备】如何优化Spring Cloud微服务注册中心架构?
如果要基于Consul作为服务注册中心,那么首先必须在每个服务所在的机器上部署一个Consul Agent,作为一个服务所在机器的代理。然后还得...
5年前的Dubbo输在哪里了?比Spring Cloud还强的架构,真香!
比Spring Cloud还强的架构,真香!看看下面这十几道题是我当时阿里三面时被问到的,基本都是深入到阿里巴巴微服务架构 Spring Cloud Alibaba源码级别,看来P7百万年薪真不是那么好拿的,见识了!但如果...
注册中心原理和选型:Zookeeper、Eureka、Nacos、Consul和Etcd
Eureka 为了保障注册中心的高可用性,容忍了数据的非强一致性,服务节点间的数据可能不一致, Client-Server 间的数据可能不一致。在单...
微信扫码,在手机上查看选中内容