一、什么是微服务
微服务架构是一种架构风格和架构思想,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外服务的职责。通过此种思想方式所开发的软件服务实体就是“微服务”,围绕着微服务思想构建的一系列体系结构(包括开发、测试、部署等),称之为“微服务架构”。
简单说就是实现细粒度的服务,达到服务解耦。
微服务架构与SOA两者的区别
微服务架构图例
在上图中,部署了一系列的微服务,每个微服务都会访问自己的数据库(Database)。当这些微服务启动时,会将其信息注册到服务注册中心(Service Registry),在客户端发送请求时,请求首先会被API网关(API GateWay)拦截,API网关会读取请求数据,并从注册中心获取对应的服务信息,然后API网关会根据服务信息调用所需的微服务。
不同的组件(包括微服务实例、注册中心和API网关等组件)需要根据不同的情况来选取相应的技术,那么我们可以使用哪些技术呢?
微服务架构的技术选型
1、微服务实例的开发
微服务的开发可以选用的框架技术有Spring团队的Spring Boot(推荐)、Jboss公司的WildFly Swarm和Java EE官方的微服务框架KumuluzEE等。
2、服务注册与发现(注册中心)
可以使用的技术有Spring Cloud Eureka、Apache Zookeeper、Consul、Etcd和Dubbo等。
3、负载均衡
可以使用的技术有Spring Cloud Ribbon和Dubbo等。
4、服务容错
可选的技术有Spring Cloud Hystrix、Resilience4J等。
5、API网关
可以使用的技术有Spring Cloud Zuul、Spring Reactor、Netty或NodeJS等。
6、分布式配置中心
分布式配置中心可以使用Spring Cloud Config。
7、调试
微服务应用的测试工作可以使用Swagger。Swagger是当前最受欢迎的REST API文档生成工具之一,它提供了强大的页面测试功能来调试每个RESTful API。
8、部署
可以是jar、war或者docker镜像。
9、持续集成
为了实现服务的自动化部署,我们可以通过Jenkins搭建自动化部署系统,并使用Docker进行容器化封装。在上面的技术选型中,从微服务注册与发现、负载均衡、容错、API网关和分布式配置中心组件的可选技术内,我们都看到了Spring Cloud的身影。实际上,Spring Cloud的子项目中,已经提供了构建微服务所需的所有解决方案。
从上图中可以看出,我们会使用Spring Boot实现微服务实例的开发,使用Spring Cloud Eureka来实现服务的注册与发现,使用Spring CloudHystrix的断路器功能来实现服务容错,使用Spring Cloud Ribbon实现服务间的负载均衡,使用Spring Cloud Zuul实现服务网关,使用SpringCloud Config作为分布式配置中心,使用Swagger对微服务进行测试,并使用Jenkins的持续集成功能来实现自动化部署。
除了Spring Cloud之外,Dubbo也是目前国内比较流行的分布式服务框架,它们都具备分布式服务治理相关的功能,都能够提供服务注册、发现、路由和负载均衡的能力。相比之下,Spring Cloud提供了更加完整的一套企业级分布式云应用的解决方案,包含了微服务组件中的方方面面,并能够结合Spring Boot、Docker实现快速开发的目的,而Dubbo只有Spring Cloud的一部分功能。由于二者具体的实现方式不同,因此并没有好坏之分。企业在选用时,需根据自身情况选择。
二、SpringCloud是什么
SpringCloud是在SpringBoot的基础上构建的,用于简化分布式系统构建的工具集。
该工具集为微服务架构中所涉及的配置管理,服务发现,智能路由,断路器,微代理和控制总线等操作提供了一种简单的开发方式。
特点:
- 使用方便。
- 功能齐全。
- 易于扩展和维护
- 适用于各种环境
三、SpringCloud的核心组件
SpringCloud中的子项目
1、Spring Cloud Bus
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。
2、Spring Cloud CLI
允许使用命令行、.yml配置文件和Groovy脚本快速自动配置和部署标准Spring Cloud服务。
3、Spring Cloud Config
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。
4、Spring Cloud Consul
Consul 用于实现分布式系统的服务发现与配置。与其他服务注册与发现相比,Consul更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较为简单。
5、Spring Cloud Gateway
SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
6、Spring Cloud Netflix
各种Netflix OSS组件集成,包括Eureka(服务注册与发现)、Hystrix(容错管理,实现断路器模式)、Ribbon(客户端负载均衡)、Feign(声明式服务调用组件)、Zuul(网关,提供智能路由、访问过滤等功能)等。
7、Spring Cloud Security
Spring Cloud Security提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。
8、Spring Cloud Sleuth
Spring Cloud提供的分布式系统服务链追踪组件,它大量借用了Google的Dapper,Twitter的Zipkin。
9、Spring Cloud Stream
Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于 Spring Boot 来创建独立的、可用于生产的 Spring 应用程序。
10、Spring Cloud Task
Spring Cloud Task 允许用户使用Spring Cloud 开发和运行一个短生命周期的微服务。它主要就是来解决 short-lived microservices的问题,因为一般的服务都是长时间一直保持运行的,但是有很多服务并不需要一直保持运行;比如一些定时任务或者临时任务。所以Spring Cloud Task可以让你更简单的创建短时运行的微服务。
11、Spring Cloud Task App
12、Spring Cloud Zookeeper
13、Spring Cloud Circuit Breaker
断路器
14、Spring Cloud OpenFeign
通过自动配置和Spring环境以及其他Spring编程模型习惯用法提供Spring Boot应用程序的集成。
还在继续增加......
SpringCloud的五大组件
- 服务发现——Netflix Eureka:实现服务治理(服务注册与发现)
- 客服端负载均衡——Netflix Ribbon:主要提供客户侧的软件负载均衡算法。
- 断路器——Netflix Hystrix:断路器,保护系统,控制故障范围。
- 服务网关——Netflix Zuul:api网关,路由,负载均衡等多种作用。
- 分布式配置——Spring Cloud Config:配置管理
以下Spring Cloud Netflix模块和相应的启动程序将进入维护模式:
- spring-cloud-netflix-archaius
- spring-cloud-netflix-hystrix-contract
- spring-cloud-netflix-hystrix-dashboard
- spring-cloud-netflix-hystrix-stream
- spring-cloud-netflix-hystrix
- spring-cloud-netflix-ribbon
- spring-cloud-netflix-turbine-stream
- spring-cloud-netflix-turbine
- spring-cloud-netflix-zuul
官方建议将以下内容作为这些模块提供的功能的替代品。
SpringCloud官网:https://spring.io/projects/spring-cloud
SpringCloud文档:https://docs.spring.io/spring-cloud/docs/Hoxton.SR8/reference/htmlsingle/