您当前的位置:首页 > 生活热点

config是什么意思(config翻译成中文)

时间:2022-03-10 13:32:10

Spring Cloud是一个比较新的微服务框架,2016年才发布了1.0的发布版本。虽然Spring Cloud的时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供了一整套的分布式系统解决方案。Spring Cloud是一系列框架的有序集合。它巧妙地利用Spring Boot的开发便利,简化了分布式系统基础设施的开发,如服务发现和注册、配置中心、消息总线、负载均衡、断路器、数据监控等。,所有这些都可以通过Spring Boot的开发风格一键启动和部署。Spring没有重复制造轮子。它只是结合了各个公司(主要是网飞)开发的能够经受实践考验的成熟服务框架。通过Spring Boot风格的重新打包,屏蔽了复杂的配置和实现原理,最终为开发者留下了一套易于理解、易于部署、易于维护的分布式系统开发工具包。

Spring Cloud的核心组件

尤里卡(注册中心)

Eureka是Spring Cloud微服务架构中的注册中心,负责服务的注册和发现。其中有一个注册表,存储每台服务器的机器和端口。

Eureka服务端:也称服务注册中心,同其他服务注册中心一样,支持高可用配置。如果Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中其他分片会把它们的状态再次同步回来。Eureka客户端:主要处理服务的注册与发现。客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端想注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期性地刷新服务状态。

实际上,Eureka Server的高可用性就是将自己注册为一个服务,并注册到其他注册中心,这样就可以形成一组相互注册的服务注册中心,从而实现服务列表的相互同步,达到高可用性。

Zuul(服务网关)

Zuul gateway负责将请求转发给相应的服务,这个组件负责网络路由。通过与Spring Cloud Eureka的集成,Spring Cloud Zuul将自己注册为Eureka服务治理下的应用,并从Eureka获取所有其他微服务的实例信息。为了维护路由规则,Zuul将默认创建一个路由映射,将服务名作为上下文路径。Zuul提供了一套过滤机制,可以支持无API网关的统一调用对微服务接口进行预过滤,实现了对微服务接口的拦截和验证。

功能区(负载平衡)

提供云负载平衡。有多种负载平衡策略可供选择,可以与服务发现和断路器一起使用。Ribbon是一个基于HTTP和TCP的客户端负载均衡器,可以轮询客户端配置的ribbonServerList的服务器列表,实现服务均衡。Ribbon和Eureka一起使用时,Ribbon的服务实例列表RibbonServerList会被DiscoveryEnabledNIWSServerList重写,并扩展为从Eureka registry获取服务器列表。同时,它还将把IPing替换成NIWSDiscoveryPing,把判断服务器是否已经启动的责任委托给Eureka。在客户端负载均衡中,所有客户端节点都维护自己要访问的服务器列表,这些服务器列表来自服务注册中心(比如Eureka)。在客户端负载均衡中,也需要心跳来维护服务器列表的健康,但这一步需要与服务注册中心合作完成。有了Spring Cloud Ribbon的封装,在微服务架构中使用客户端负载均衡调用只需要以下两个步骤:

服务提供者只需要启动多个服务实例并且注册到一个注册中心或是多个相关联的服务注册中心。服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。

Hystrix(保险丝保护器)

容错管理工具Fuse旨在通过fuse机制控制服务和第三方库的节点,为延迟和故障提供更强的容错能力。提供线程池的不同服务采取不同的线程池,实现了不同服务调用的隔离,避免了服务器雪崩的问题。在微服务架构中,有如此多的服务单元。如果一个单元出现故障,很容易因依赖导致故障扩散,最终导致整个系统瘫痪。这种架构比传统架构更不稳定。为了解决这个问题,产生了断路器等一系列服务保护机制。在分布式架构中,当一个服务单元发生故障时,通过断路器的故障监控向调用者返回错误响应,而不是等待很长时间。这样线程就不会因为调用故障服务而被长时间占用和不释放,从而避免了故障在分布式系统中的蔓延。Hystrix具有服务降级、服务融合、线程和信号隔离、请求缓存、请求合并和服务监控等强大功能。Hystrix采用舱壁模式隔离线程池,会为每个依赖服务创建一个独立的线程池,这样即使一个依赖服务的延迟过高,也只会影响该依赖服务的调用,不会拖慢其他依赖服务。

Feign(静止转换器)

基于动态代理机制,根据标注和选择的机器,拼接请求的url地址,发起请求。Feign的关键机制是使用动态代理:

首先,对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理;接着调用接口的时候,本质就是调用Feign创建的动态代理;Feign的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址;针对这个地址,发起请求、解析响应。

Feign与Ribbon和Eureka紧密合作:

首先Ribbon会从Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口;然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器;Feign就会针对这台机器,构造并发起请求。

配置(分布式配置)红豆博客

Configuration toolkit允许您将配置放在远程服务器上并集中管理集群配置,目前支持本地存储、Git和Subversion。

注册中心和API网关分析

微服务网关多用于前端和后端分离的情况,或者涉及到像手机app这样独立的前端应用时,即内部各个微服务组件模块的API接口能力统一注册接入网关,而对于app来说,只需要接入网关暴露的接口,同时通过网关可以进一步实现安全隔离。也就是说,在这种场景下,网关大部分实现的是接口服务的代理和路由转发能力,更重要的是对外释放了一种能力。

一个独立的开发团队,为保证独立自治,以及内部多个微服务模块间的交互集成,最好启用独立的服务注册中心实现服务注册,发现能力。即开发团队内部多个微服务模块间的集成,不需要通过网关,只需要通过服务注册中心进行集成即可。开发团队需要暴露能力给外部,包括暴露能力给其它的开发团队,需要考虑将该API接口注册到外部的网关上。在这里建议是拆分两个独立网关,一个是内部API网关,一个是放置到DMZ区面对公网访问的API网关。对于服务如果同时涉及到内部和外部使用,则两边注册。建议不要通过两次网关去路由,一个是影响性能,一个是不方便后续问题排查。构建在开发团队之外的API网关必须具备负载均衡能力,可以配置多个IP地址。通过该API网关也最好具备和Docker容器扩展后的服务自动注册和地址加入扩展能力。

尤里卡的竞争产品分析:Nacos,ZooKeeper,etcd

服务发现是一个老话题。当应用程序开始独立运行和访问时,服务发现就诞生了。现在的网络架构是每个主机都有一个独立的IP地址,所以服务发现基本上是通过某种方式获取服务部署的IP地址。DNS协议是最早将网络名称转换为网络IP的协议。在最初的架构选择上,DNS LVS Nginx基本可以满足所有RESTful服务的发现。此时,服务的IP列表通常在Nginx或LVS中配置。后来出现了RPC服务,服务更频繁的上线下线。人们开始寻求一种能够支持动态在线离线和推送IP列表变化的注册表产品。

尤里卡Spring Cloud Eureka所选择的是AP,采用的是去中心化结构,放弃了强一致性。也就是说Eureka集群中的各个结点都是平等的,没有主从的概念。通过互相注册的方式来进行消息同步和保证高可用。并且一个Eureka Server结点挂掉了,还有其他同等的结点来提供服务,并不会引发服务的中断。Eureka只能当注册中心,想搞配置中心的话,还得搭配Spring Cloud Config Spring Cloud Bus。其中后者支持Rabbiimq和Kafka两种模式。使用Java语言来开发的,并且也是Spring Cloud的子项目,所以可以直接通过引入jar包的方式来集成Eureka,这点非常方便。

动物园管理员

这是一款经典的服务注册中心产品(虽然它最初的定位不在这里)。在很长一段时间里,中国人提到RPC服务注册中心时想到的唯一选择,这在很大程度上与Dubbo在中国的流行有关。

Apache Zookeeper所选择的是CP,也就是放弃了高可用性。Zookeeper集群在进行消息同步的时候,必须有一半以上结点完成了同步才会返回;而当Master结点挂了或者集群中有过半的结点不能工作了,此时就会触发故障恢复,重新进行Master选举。在这个过程中,整个Zookeeper集群无法对外提供服务,从而实去了A(可用性)。为了达到C,Zookeeper采用的是自己的ZAB协议。

高洛

Nacos是阿里巴巴旗下的开源项目。它于2018年开业,承载了阿里巴巴大规模服务生产的经验,试图在服务注册和配置管理的市场上为用户提供一种新的选择。

Nacos一大特性是即支持CP,也支持AP。可以根据需要灵活选择。Nacos除了注册中心之外,也能充当配置中心的作用。且配置中心可以按照namespace,group等维度来进行数据隔离,来达到不同环境之间配置隔离的功能。

值得一提的是,Nacos作为配置中心的持久化机制,可以依赖Mysql(默认依赖于内置数据库)。只需将nacos目录下的sql脚本放入mysql中执行(会生成11个表),然后在Nacos配置文件中匹配mysql账户密码即可。这种使用mysql作为数据源的方式比nacos内置数据库更容易管理。

领事

Consul是HashiCorp推出的开源工具。

Consul是用Go语言编写的,所以无法像Eureka那样直接引入jar包就能集成,它还需要去红豆博客服务器中进行额外的安装。除了注册中心的功能之外,Consul还能起到配置中心的作用。Consul它保证的是CP,使用Raft协议,要求必须有过半的结点都写入成功才算是注册成功了,并且它也有Master和Follower的概念,在Master挂掉后,也需要自己内部进行。

Etcd(待续)

与Spring Cloud相比,Kubernetes还提供了完整的分布式微服务管理框架。几乎所有的组件都有相应的产品,etcd也可以提供类似于Eureka的注册表。在围棋生态中,也可以选择以etcd为注册中心。etcd是由CoreOS团队维护的高可用分布式键值存储数据库,可用于为集群提供配置和服务发现功能。Google的开源容器管理工具Kuberbetes就是基于etcd开发的。和Consul一样,etcd也是基于Raft协议作为分布式一致性算法来解决首领选举和日志复制的问题,也是基于Go语言编写的。Etcd也支持代理模式,只不过在etcd中,代理模式类似于Consul的客户端代理模式,安装在部署服务的节点上,用于将请求转发到etcd集群,集群本身不存储任何数据。etcd集群相当于Consul中以服务器模式运行的Consul集群,通常需要三个或三个以上的节点(不要太多,3~5个就够了,这样可以平衡可用性和性能)来负责。目前,在最新版本的etcd v3中,V2版本中的代理模式被网关模式所取代。从服务发现的实现原理来说,Consul和etcd的基本设计思路是一样的,etcd更简单,Consul更像是一个全栈解决方案,功能比etcd更丰富,比如支持可视化Web UI管理界面,支持多数据库中心,支持HTTPS之外的ACL,更全面的健康检查功能,内置DNS服务器等。这些都是etcd不具备的,但更全面的功能往往意味着更高的复杂度。对于微服务的服务注册和发现场景,etcd完全够用。

春云家族酒桶介绍

Spring Cloud Config:配置管理工具包,让你可以把配置放到远程服务器,红豆博客集中化管理集群配置,目前支持本地存储、Git以及Subversion。Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。Eureka:云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Zuul:Zuul是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul相当于是设备和Netflix流应用的Web网站后端所有请求的前门。Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。Consul:封装了Consul操作,Consul是一个服务发现与配置工具,与Docker容器可以无缝集成。Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到Cloud Foundry,Cloud Foundry是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:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。Turbine:Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下Hystrix的Metrics情况。Feign:Feign是一种声明式、模板化的HTTP客户端。Spring Cloud Task:提供云端计划任务管理、任务调度。Spring Cloud Connectors:便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。Spring Cloud Cluster:提供Leadership选举,如:ZooKeeper,Redis,Hazelcast,Consul等常见状态模式的抽象和实现。Spring Cloud Starters:Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。

服务 注册 网关 配置 集群

最新文章