1、springcloud简介

摘要:
Hytrix组件在springcloud中扮演着这个角色。Hytrix会在服务连续N次被呼叫而没有响应时立即通知呼叫方呼叫失败,以防止呼叫方持续等待并影响整体服务。Hytrix将定期再次检查服务,如果服务恢复,将继续提供服务。SpringCloudConfig是用于分布式系统的配置管理解决方案。SpringCloudBus是一个轻量级通信组件,也可以用于其他类似场景。Zuul是支持APIGateway在Spring Cloud系统中落地的技术。

摘要:

springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格做到一键启动和部署。

springcloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过springboot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

一、Spring Cloud的架构图

1、springcloud简介第1张

1、不管是什么客户端或者内部的非springcloud项目都统一通过API网关(Zuul)来访问内部服务;

2、网关接收到请求后,从注册中心(Eureka)获取可用服务;

3、由Ribbon进行均衡负载后,分发到后端的具体实例;

4、微服务之间通过Feign进行通信处理业务;

5、Hystrix负责处理服务超时熔断;

6、Turbine监控服务间的调用和熔断相关指标

二、springcloud组成部分

1、Eureka

Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现,也是Spring Cloud体系中最重要最核心的组件之一。 

Eureka就是一个服务中心,将所有的可以提供的服务都注册到它这里来管理,其它各调用者需要的时候去注册中心获取,然后再进行调用,避免了服务之间的直接调用,方便后续的水平扩展、故障转移等。

1、springcloud简介第2张

服务中心这么重要的组件一但挂掉将会影响全部服务,因此需要搭建Eureka集群来保持高可用性,生产中建议最少两台。

随着系统的流量不断增加,需要根据情况来扩展某个服务,Eureka内部已经提供均衡负载的功能,只需要增加相应的服务端实例既可。

那么在系统的运行期间某个实例挂了怎么办?Eureka内容有一个心跳检测机制,如果某个实例在规定的时间内没有进行通讯则会自动被剔除掉,避免了某个实例挂掉而影响服务。

2、Hystrix

在微服务架构中通常会有多个服务层调用,基础服务的故障可能导致线程阻塞,如果大流量访问可能导致web容器线程耗尽从而会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。

服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。

1、springcloud简介第3张

在这种情况下就需要整个服务机构具有故障隔离的功能,避免某一个服务挂掉影响全局。

在springcloud中Hystrix组件就扮演这个角色,Hystrix会在某个服务连续调用N次不响应的情况下,立即通知调用端调用失败,避免调用端持续等待而影响了整体服务,Hystrix间隔时间会再次检查此服务,如果服务恢复将继续提供服务。  

3、Hystrix Dashboard和Turbine

当熔断发生的时候需要迅速的响应来解决问题,避免故障进一步扩散,那么对熔断的监控就变得非常重要。

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。

但是只使用Hystrix Dashboard的话,你只能看到单个应用内的服务信息,我们需要一个工具能让我们汇总系统内多个服务的数据并显示到Hystrix Dashboard上,这个工具就是Turbine. 监控的效果图如下: 

1、springcloud简介第4张

4、配置中心-springcloud config

随着微服务不断的增多,每个微服务都有自己对应的配置文件。

在研发过程中有测试环境、UAT环境、生产环境,因此每个微服务又对应至少三个不同环境的配置文件。

这么多的配置文件,如果需要修改某个公共服务的配置信息,如:缓存、数据库等,难免会产生混乱,这个时候就需要引入Spring Cloud另外一个组件:Spring Cloud Config。 

Spring Cloud Config是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,Client通过接口获取数据、并依据此数据初始化自己的应用。 

其实就是Server端将所有的配置文件服务化,需要配置文件的服务实例去Config Server获取对应的数据。将所有的配置文件统一整理,避免了配置文件碎片化。 

如果服务运行期间改变配置文件,服务是不会得到最新的配置信息,需要解决这个问题就需要引入Refresh。可以在服务的运行期间重新加载配置文件。 

当所有的配置文件都存储在配置中心的时候,配置中心就成为了一个非常重要的组件。如果配置中心出现问题将会导致灾难性的后果,因此在生产中建议对配置中心做集群,来支持配置中心高可用性。 

5、Spring Cloud Bus

上面的Refresh方案虽然可以解决单个微服务运行期间重载配置信息的问题,但是在真正的实践生产中,可能会有N多的服务需要更新配置,如果每次依靠手动Refresh将是一个巨大的工作量,这时候Spring Cloud提出了另外一个解决方案:Spring Cloud Bus 

Spring Cloud Bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其它的消息指令中。

Spring Cloud Bus的一个核心思想是通过分布式的启动器对Spring Boot应用进行扩展,也可以用来建立一个或多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道。 

Spring Cloud Bus是轻量级的通讯组件,也可以用在其它类似的场景中。有了Spring Cloud Bus之后,当我们改变配置文件提交到版本库中时,会自动的触发对应实例的Refresh,具体的工作流程如下: 

1、springcloud简介第5张

6、服务网关

在微服务架构模式下,后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息。

因此在基于微服务的项目中为了简化前端的调用逻辑,通常会引入API Gateway作为轻量级网关,同时API Gateway中也会实现相关的认证逻辑从而简化内部服务之间相互调用的复杂度。

1、springcloud简介第6张

Spring Cloud体系中支持API Gateway落地的技术就是Zuul。Spring Cloud Zuul路由是微服务架构中不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。 

它的具体作用就是服务转发,接收并转发所有内外部的客户端调用。使用Zuul可以作为资源的统一访问入口,同时也可以在网关做一些权限校验等类似的功能。 

7、链路跟踪

随着服务的越来越多,对调用链的分析会越来越复杂,如服务之间的调用关系、某个请求对应的调用链、调用之间消费的时间等,对这些信息进行监控就成为一个问题。

在实际的使用中我们需要监控服务和服务之间通讯的各项指标,这些数据将是我们改进系统架构的主要依据。因此分布式的链路跟踪就变的非常重要,Spring Cloud也给出了具体的解决方案:Spring Cloud Sleuth和Zipkin 

1、springcloud简介第7张

Spring Cloud Sleuth为服务之间调用提供链路追踪。

通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长时间。从而让我们可以很方便的理清各微服务间的调用关系。 

Zipkin是Twitter的一个开源项目,允许开发者收集 Twitter 各个服务上的监控数据,并提供查询接口 

来源:http://www.iteye.com/news/32734

三、总结

Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。

这些功能都是以插拔的形式提供出来,方便我们系统架构演进的过程中,可以合理的选择需要的组件进行集成,从而在架构演进的过程中会更加平滑、顺利。

免责声明:文章转载自《1、springcloud简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇win10系统VMware Workstation与Device/Credential Guard不兼容怎么办【codeforces】【比赛题解】#849 CF Round #431 (Div.2)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3-rocketmq-支持的消息种类

RocketMQ消息支持的模式 普通消息 NormalProducer 消息同步发送 producer.send(Message msg) 消息异步发送 producer.send(Message msg, SendCallback sendCallback) 单向发送OneWay producer.sendOneWay(Message msg...

[转] 谈谈mq消息消费的2种方式

本章内容 从消费者的角度出发,分析一下消息消费的两种方式: push方式 pull方式 push方式 消息消费的过程: mq接收到消息 mq主动将消息推送给消费者(消费者需提供一个消费接口) mq属于主动方,消费者属于一种被动消费,一旦有消息到达mq,会触发mq推送机制,将消息推送给消费者,不管消费者处于何种状态。 优点: 消费者代码较少:对于消费...

微软Skype实时口译增加中文

直击现场   在机器翻译技术上,微软的 Skype 业务也算是行业内名列前茅。日前其实时口语翻译技术再次跃升一个台阶,新增了对中文(普通话)的翻译支持。   据美国科技新闻网站 TheVerge 报道,此前,Skype 已经实现了不同语种的人们在语音聊天时,提供实时的口语翻译。Skype 初期支持了英语和西班牙语。而在最新的语言更新中,新增了中文普通话和...

MQTT的使用介绍

之前项目中使用到了mqtt,刚开始用着用着都不知道是干啥的,后来百度了一下: MQTT MQTT基于订阅者模型架构,客户端如果互相通信,必须在同一订阅主题下,即都订阅了同一个topic,客户端之间是没办法直接通讯的。订阅模型显而易见的好处是群发消息的话只需要发布到topic,所有订阅了这个topic的客户端就可以接收到消息了。 发送消息必须发送到某个to...

MySql 常见错误代码大全 VV2

从机一直1593错误,排查了半天发现是从的配置文件中的server-id没改导致,此低级错误记录下警醒自己 B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中。“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代。 · 错误值列在share/errmsg.txt文件中...

Windows下进程通信方式[转]

一、引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换. 内部进程间通讯(即:同机通讯)和数据交换有多种方式:消息、共享内存、匿名(命名) 管道、邮槽、Windows套接字等多种技术。“共享内存”(shared m...