《深入理解Spring Cloud与微服务构建》第2章 Spring Cloud简介

Spring Cloud作为Java语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。

1、微服务应该具备的功能

1.1、服务的注册和发现

微服务系统需要服务注册中心来统一管理服务实例,方便查看每一个微服务实例的健康状态。服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP地址等)告知服务注册中心。服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息。通常情况下,一个服务既是服务提供者,也是服务消费者。服务消费者一般使用HTTP协议或者消息组件这种轻量级的通信机制来进行服务消费。

2c356e9fb89bc8956113dde2c39f0a3225b.jpg

1.2、服务的负载均衡

为了保证服务的高可用,服务单元往往是集群化部署。例如将服务提供者进行集群化部署,那么服务消费者该调用哪个服务提供者的实例呢?这就涉及到了服务的负载均衡

1ab74499a1871a1e3b8b6263326bd26b46c.jpg

服务消费者集成负载均衡组件,该组件会向服务消费者获取服务注册列表信息,并每隔一段时间重新刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(开发者可以配置),选择一个服务提供者的实例,向该实例进行服务消费,这样就实现了负载均衡。当服务实例数据很多时,为了实现高可用,将服务注册中心集群化。

1.3、服务的容错

为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制。

2f718548f11a1b9dca2dab73bc5a88d72d4.jpg

它不仅能够防止系统的“雪崩”效应,还具有以下作用。

  • 将资源隔离,只会隔离出故障的API接口,不会影响到其他API接口。
  • 服务降级的功能。大量的请求在短时间内同时涌入,超过了服务的处理能力,熔断器被打开,将服务降级,以免服务器因负载过高而出现故障。
  • 自我修复能力。例如网络服务商的问题,导致网络在短时间内不可用,熔断器被打开。

1.4、服务网关

在微服务系统中,API接口资源通常是由服务网关(也称API网关)统一暴露,内部服务不直接对外提供API资源的暴露。这样做的好处是将内部服务隐藏起来,外界还以为是一个服务在提供服务,在一定程度上保护了微服务系统的安全。

API网关通常有请求转发的作用,另外它可能需要负责一定的安全验证,例如判断某个请求是否合法,该请求对某一个资源是否具有操作权限等。

通常情况下,网关层以集群的形式存在。在服务网关层之前,有可能需要加上负载均衡层,通常为Nginx双机热备,通过一定的路由策略,将请求转发到网关层。到达网关层后,经过一系列的用户身份验证、权限判断,最终转发到具体的服务。具体的服务经过一系列的逻辑运算和数据操作,最终将结果返回给用户。

586cab439a2442f45f9ccf0932179ef898c.jpg

网关层具有很重要的意义,具体体现在以下方面。

  • 将所有服务的API接口资源统一聚合,对外统一暴露。
  • 用户身份认证、权限认证,防止非法请求操作API接口,对内部服务起到保护作用。
  • 实现监控功能,实时日志输出,对请求进行记录。
  • 流量监控,在高流量的情况下,对服务进行降级。
  • API接口从内部服务分离出来,方便做测试。

网关实现这些功能,需要做高可用,否则网关很可能成为架构中的瓶颈。最常用的网关组件有Zuul、Nginx等。

1.5、服务配置的统一管理

在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置、日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的。随着服务数量的增加,配置文件的管理也是一件非常复杂的事。

在微服务架构中,需要有统一管理配置文件的组件,例如Spring Cloud的Spring Cloud Config组件、阿里的Diamond、百度的Disconf、携程的Apollo等。

下面以Spring Cloud Config为例来阐述服务配置的统一管理。

769950bbc31a0b5dc105218557afc858224.jpg

对于集群化的服务,可以通过使用消息总线来刷新多个服务实例。如果服务数量较多,对配置中心需要考虑集群化部署,从而使配置中心高可用,做分布式集群。

1.6、服务链路追踪

在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而使每个请求链路清晰可见,出了问题很快就能定位。

常见的链路追踪组件有Google的Dapper、Twitter的Zipkin,以及阿里的Eagleeye等,都是非常优秀的链路追踪开源组件。

2、Spring Cloud

2.1、简介

Spring Cloud是基于Spring Boot的。Spring Boot是由Pivotal团队提供的全新的Web框架,它主要的特点就是简化了开发和部署的过程,简化了Spring复杂的配置和依赖管理,通过起步依赖和内置Servlet容器能够使开发者迅速搭起一个Web工程。所以Spring Cloud在开发部署上继承了Spring Boot的一些优点,提高其在开发和部署上的效率。

Spring Cloud的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。Spring Cloud提供了分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。

2.2、常用组件

  • 服务注册和发现组件 Eureka

Eureka组件提供了服务的健康监测,以及界面友好的UI。另外Spring Cloud也支持ConsulZookeeper,用于注册和发现服务。

  • 熔断组件 Hystrix

除了有一些基本的熔断器功能外,还能够实现服务降级、服务限流的功能。另外Hystrix提供了熔断器的健康监测,以及熔断器健康数据的API接口。Hystrix Dashboard组件提供了单个服务熔断器的健康状态数据的界面展示功能,Hystrix Turbine组件提供了多个服务的熔断器的健康状态数据的界面展示功能。

  • 负载均衡组件 Ribbon

Ribbon和Zuul配合,很容易做到负载均衡,将请求根据负载均衡策略分配到不同的服务实例中。Ribbon和RestTemplate、Feign配合,在消费服务时能够做到负载均衡。

  • 路由网关 Zuul

​​​​​​​Zuul有智能路由和过滤的功能。内部服务的API接口通过Zuul网关统一对外暴露,内部服务的API接口不直接暴露,防止了内部服务敏感信息对外暴露。Zuul的过滤功能是通过拦截器请求来实现的,可以对一些用户的角色和权限进行判断,起到安全验证的作用,同时也可以用于输出实时的请求日志。

  • Spring Cloud Config

Spring Cloud Config提供了配置文件统一管理的功能。它包括Server端和Client端,Server端读取本地仓库或者远程仓库的配置文件,所有的Client向Server读取配置信息,从而达到配置文件统一管理的目的。通常情况下,Spring Cloud Config和Spring Cloud Bus相互配合刷新指定Client或所有Client的配置文件。

  • Spring Cloud Security

​​​​​​​Spring Cloud Security是对Spring Security组件的封装,​​​​​​​Spring Cloud Security向服务单元提供了用户验证和权限认证。一般来说,单独在微服务系统中使用​​​​​​​Spring Cloud Security是很少见的,一般它会配合Spring Security OAuth2组件一起使用,通过搭建授权服务,验证Token或者JWT这种形式对整个微服务系统进行安全验证。

  • Spring Cloud Sleuth

​​​​​​​Spring Cloud Sleuth是一个分布式链路追踪组件,它封装了Dapper、Zipkin和Kibana等组件,通过它可以知道服务之间的相互依赖关系,并实时观察链路的调用情况。

  • Spring Cloud Stream

​​​​​​​Spring Cloud Stream是​​​​​​​Spring Cloud框架的数据流操作包,可以封装RabbitMQ、ActiveMQ、Kafaka、Redis等消息组件,利用​​​​​​​Spring Cloud Stream可以实现消息的接收和发送。

3、Dubbo简介

Dubbo是阿里巴巴开源的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo广泛应用于阿里巴巴的各大站点,有很多互联网公司也在使用这个框架,它包含如下核心内容。

  • RPC远程调用

封装了长连接NIO框架,如Netty、Mina等,采用的是多线程模式。

  • 集群容错

提供了基于接口方法的远程调用的功能,并实现了负载均衡策略、失败容错等功能。

  • 服务发现

集成了Apache的Zookeeper组件,用于服务的注册和发现。

6fd8e7a2e36ef28559fe04c8dcad4246af9.jpg

Dubbo架构的流程如下。

  1. 服务提供者向服务中心注册服务。
  2. 服务消费者订阅服务。
  3. 服务消费者发现服务。
  4. 服务消费者远程调度服务提供者进行服务消费,在调度过程中,使用了负载均衡策略、失败容错的功能。
  5. 服务消费者和提供者,在内存中记录服务的调用次数和调用时间,并定时每分钟发送一次统计数据到监控中心。

Dubbo是一个非常优秀的服务治理框架,在国内互联网公司应用广泛。它具有以下特性。

  • 连通性:注册中心负责服务的注册;监控中心负责收集调用次数、调用时间;注册中心、服务提供者、服务消费者为长连接。
  • 健壮性:监控中心宕机不影响其他服务的使用;注册中心集群,任意一个实例宕机自动切换到另一个注册中心实例;服务实例集群,任意一个实例宕机,自动切换到另外一个可用的实例。
  • 伸缩性:可以动态增减注册中心和服务的实例数量。
  • 升级性:服务集群升级,不会对现有架构造成压力。

4、Spring Cloud与Dubbo比较

8543eb1aab737f3c72f952479981774a5cc.jpg

Spring Cloud拥有很多的项目模块,包含了微服务系统的方方面面。Dubbo是一个非常优秀的服务治理和服务调用框架,但缺少很多功能模块,例如网关、链路追踪等。在项目模块上,Spring Cloud占据着更大的优势。

从学习成本上考虑,Dubbo的版本趋于稳定,文档完善,可以即学即用,没有太大难度。Spring Cloud基于Spring Boot开发,需要开发者先学会Spring Boot。另外,Spring Cloud版本迭代快,需要快速跟进学习。

从开发风格上来讲,Dubbo更倾向于Spring Xml的配置方式,Dubbo官方也推荐这种方式。Spring Cloud基于Spring Boot,Spring Boot采用的是基于注解和JavaBean配置方式的敏捷开发。从开发速度上讲,Spring Cloud具有更高的开发和部署速度。

最后,Spring Cloud的通信方式大多数是基于HTTP Restful风格的,服务与服务之间完全无关、无耦合。由于采用的是HTTP Rest,因此服务无关乎语言和平台,只需要提供相应的API接口,就可以相互调用。Dubbo的通信方式基于远程调用,对接口、平台和语言有强依赖性。

Dubbo更易上手,并且广泛使用于阿里巴巴的各大站点,经历了“双11”期间高并发、大流量的检验,Dubbo框架非常成熟和稳定。Spring Cloud服务框架严格遵守Martin Fowler提出的微服务规范,社区异常活跃,它很可能成为微服务架构的标准。

5、Kubernetes简介

转载于:https://my.oschina.net/lienson/blog/3032561

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值