SpringCloud入门介绍

一、什么是微服务

微服务架构是一种架构风格和架构思想,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API,可以独立承担对外服务的职责。通过此种思想方式所开发的软件服务实体就是”微服务”,围绕着微服务思想构建的一系列体系结构(包括开发、测试、部署等),称之为”微服务架构”。

简单说就是实现细粒度的服务,达到服务解耦。

微服务架构与SOA两者的区别

SpringCloud入门介绍
微服务架构图例

SpringCloud入门介绍

在上图中,部署了一系列的微服务,每个微服务都会访问自己的数据库(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的子项目中,已经提供了构建微服务所需的所有解决方案。

SpringCloud入门介绍

从上图中可以看出,我们会使用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的核心组件

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入门介绍

SpringCloud官网:https://spring.io/projects/spring-cloud
SpringCloud文档:https://docs.spring.io/spring-cloud/docs/Hoxton.SR8/reference/htmlsingle/

Original: https://www.cnblogs.com/myitnews/p/14077080.html
Author: codedot
Title: SpringCloud入门介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541396/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Go 面向对象简明教程

    如果把 C 变成 C++, 那么 C 就消失了。 在云原生时代,Go 变成了一门受人关注的编程语言。个人觉得,对于 Java 业务开发人员来说,熟悉一门接近系统级别的编程语言,还是…

    Java 2023年6月9日
    080
  • EdgeX Foundry初体验(六)–协议介绍:MQTT

    1,MQTT 介绍 (1)MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,它是一种轻量级的、…

    Java 2023年5月29日
    072
  • java 递归转非递归(树形转非树形)

    接着上一篇讲,在上一篇我们已经将数据通过递归转成了树形结构。 如何将树形结构转非树形结构?(仍然按照树形层级关系进行平铺显示) 如何将递归函数转成迭代函数? 查看代码 [{ nam…

    Java 2023年5月29日
    0127
  • java多线程

    多线程: 多线程是指程序中包含多个执行流,即在-个程序中可以同时运行多个不同的线程来执行不同的任务。 多线程的好处: 可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的…

    Java 2023年6月13日
    072
  • Java基础–static关键字

    不管是平时阅读源代码,还是笔试、面试中, static关键字还是经常被问道,这篇文章主要来重新复习一下该关键字。 一、static用途 static方便在没有创建对象的时候调用方法…

    Java 2023年6月5日
    098
  • JVM中的堆

    堆 内存结构 堆的核心概念 《java虚拟机规范》中对java堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。 一个JVM实例只存在一个堆内存(就是new 出来一个对象…

    Java 2023年6月13日
    072
  • 【debug技巧】jstat:虚拟机统计信息监视器

    我们在日常开发时,难免会遇到一些没有内存泄漏等问题。有时,我们无法下载arthas等开源的诊断工具。这时候,我们就可以借助JDK自带的一些诊断工具。 首先我们可以使用jstat查看…

    Java 2023年6月7日
    0166
  • spring 支持集中 bean scope?

    Spring bean 支持 5 种 scope: Singleton – 每个 Spring IoC 容器仅有一个单实例。 Prototype – 每次请…

    Java 2023年5月30日
    080
  • JavaWeb 11_jsp九大内置对象

    out: 输出对象,向客户端输出内容 request: 请求对象;存储”客户端向服务端发送的请求信息” request对象的常见方法: String get…

    Java 2023年6月7日
    092
  • JPA自定义实体的id

    背景:继上一篇文章,已经实现客户端数据库数据,存入服务器,但是,两张表的id不一样,应该是id设置自增了,所以虽然从客户端查出的实体带id,但是存入服务器时id被抹掉,按照服务端表…

    Java 2023年6月8日
    085
  • 数据库工具类

    数据库连接的工具类 数据库工具类 通过学习我们知道,连接一个数据库很麻烦,代码很多,而且像注册驱动这些代码我们在项目的启动后只需要执行一次。所以我们能不能写一个数据库连接的工具类呢…

    Java 2023年6月5日
    061
  • RocketMQ配置启动

    修改JVM默认配置(物理机器内存为8G) [root@localhost rocketmq-4.9.3]# vi bin/runserver.shJAVA_OPT=”$…

    Java 2023年5月30日
    082
  • 【Java】类加载过程

    JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的Java类型的过程。 类加载的过程主要分为三个部分: 加载 链接 初始化 而链接又可以…

    Java 2023年5月29日
    076
  • 浅谈java代理模式

    讲解java代理模式 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理&a…

    Java 2023年6月7日
    089
  • springboot+logback日志规范

    <!–?</code–><code class=”xml keyword”>xml</code> <code class=”xm…

    Java 2023年5月30日
    062
  • 啥是Session?

    什么是 Session 会话? 1、Session 就一个接口(HttpSession)。2、Session 就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。3、每个客…

    Java 2023年6月15日
    051
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球