Spring Cloud概述

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。指将软件系统分解为不同的模块或组件,以及定义它们之间的相互关系和通信方式的过程。软件架构的设计可以影响软件系统的性能、可靠性、可维护性等方面。

用通俗易懂的语言来说,软件架构就像是一座大楼的结构设计,它确定了楼房的各个组成部分(如地基、楼层、柱子、梁等)的位置和相互关系,以及它们如何相互协作来支撑整个楼房。在软件架构中,不同的组成部分可能是各种不同的程序模块、库、服务等等,它们通过特定的接口来互相通信和交互,最终实现整个软件系统的功能。

当我们谈论软件架构时,实际上就是在讨论如何设计和组织一个软件系统,让它能够高效地运行,并且容易维护和扩展。软件架构是将整个软件系统分解成各个部分,并定义它们之间的关系和通信方式的过程。


1.分布式架构

分布式架构指的是一种软件架构,其中不同的组件或模块分布在多个计算机节点(下面解释)上它们通过网络进行通信和协作,以实现某种功能或提供某种服务。这种架构设计的目的是提高系统的可伸缩性、可靠性和可用性。

在分布式架构中,每个节点都可以承担不同的任务或角色,例如处理业务逻辑、存储数据、负责用户界面等。这些节点之间可以进行消息传递或调用远程服务,以完成各自的工作。因为不同的节点可以同时处理不同的请求,所以分布式架构可以提高系统的处理能力和性能。

计算机节点指的是不同的物理或虚拟计算机,它们可以位于同一网络中或者不同的网络中。每个计算机节点可以承载多个应用程序或服务,并通过网络进行通信和协作,以实现某种功能或提供某种服务。

说人话就是:分布式架构根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。

优点:降低服务耦合、有利于服务升级拓展

分布式很好,但是也有问题:

分布式架构要考虑的问题:

        服务多,客户端如何访问?

        服务多,服务注册与发现?

        服务多,服务之间的通信?

        服务多,服务挂了怎么办?

2.微服务

微服务是由马丁福勒提出来的,学习微服务就必须知道他,去看看它的个人网站论文地址Microservices

Martin Flowler微服务架构是一种将单一的应用程序划分为一组小型服务的方法,每个服务运行在自己的进程中,服务间通过轻量级的机制进行通信 

微服务是一种构建分布式系统的架构风格,其中应用程序被拆分成一组小型、自治的服务。每个服务都专注于执行特定的业务逻辑,并通过标准化的接口(如 REST API)与其他服务通信。由于每个服务都是自治的,因此它们可以独立部署、扩展和维护,从而提高了整个应用程序的可靠性和可扩展性。

因此,可以说微服务是一种实现分布式系统的方式,其中应用程序被拆分成小型、自治的服务,这些服务可以在不同的计算机或服务器上分布,并通过网络进行通信和交互。微服务架构帮助我们更好地管理和维护分布式系统,并允许我们将系统拆分成更小的组件,以更好地应对复杂性和可扩展性的挑战。

优点:拆分粒度更小、服务更独立、耦合度更低

缺点:架构非常复杂,运维、监控、部署难度提高

二、微服务技术栈

目前,微服务架构具体实现尚未有统一的标准。

DubboSpring Cloud NetflixSpring Cloud AlibabaSpring CloudDropwizardService Mesh等。

我们选择spring cloud,原因如下:

Spring Cloud 是一个非常流行的开源微服务框架,它提供了一系列工具和组件,可以帮助开发人员构建弹性、可扩展和可靠的分布式系统。

以下是选择 Spring Cloud 的一些原因:

  1. 易于开发和维护:Spring Cloud 提供了许多开箱即用的组件和库,例如服务注册、配置管理、负载均衡和断路器等。这些组件使得开发人员可以更快速地构建微服务应用,并且可以更容易地维护。

  2. 微服务支持:Spring Cloud 是专门为微服务架构而设计的,它提供了一系列组件,例如服务发现、服务治理、路由、安全性等。这些组件可以使得微服务应用更加容易地开发、部署和管理。

  3. 开放性:Spring Cloud 是一个开源框架,可以轻松地与其他开源组件进行集成,例如 Netflix OSS、Zipkin、Consul 等。

  4. 社区活跃:Spring Cloud 拥有一个庞大的社区,开发人员可以通过社区获取支持、解决问题和学习新技术。

 

 一下内容必须知道!

 

最新技术

3、spring cloud简介

Spring Cloud是什么呢?

Spring Cloud是一个用于构建分布式应用程序的开源框架,它建立在Spring Framework之上。它提供了一组工具和库,以简化分布式系统的开发,包括配置管理、服务发现、负载均衡、断路器模式、数据路由和消息总线等功能。

Spring Cloud的目标是让开发人员可以快速构建、部署和管理分布式系统,而无需处理底层的复杂性。它支持多种部署模式,包括本地部署、云部署和容器化部署,可以与各种基础设施和服务一起使用,如Amazon Web Services、Microsoft Azure、Google Cloud Platform等云平台,以及Docker、Kubernetes等容器平台。

总的来说,Spring Cloud是一个开箱即用的分布式系统框架,可以帮助开发人员快速构建可伸缩、可靠和可维护的分布式应用程序。

人话就是:Spring Cloud是提供了用于快速构建分布式系统(微服务)的工具集

Spring Cloud 官网地址:Spring Cloud

(1)Spring Cloud集成了各种微服务功能组件,并基于Spring Boot实现了这些组件的自动装配,从而提供了良好的开箱即用体验: 

(2)Spring Cloud子项目:Spring Cloud的子项目众多(目前33个),大致可分成两类,一类是对现有成熟框架"Spring Boot化"的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。

(3)Spring Cloud AlibabaSpring Cloud BusSpring Cloud Config

(4)Spring Cloud Consul、Spring Cloud GatewaySpring Cloud Netflix

(5)Spring Cloud OpenFeignSpring Cloud SecuritySpring Cloud Sleuth

(6)Spring Cloud Stream、Spring Cloud TaskSpring Cloud Zookeeper

Spring Cloud的版本关系

Spring Cloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。为了管理Spring Cloud与各子项目的版本依赖关系,发布了一个清单,其中包括了某个Spring Cloud版本对应的子项目版本

 发布规则:

 更加详细的版本对应查看方法: https://start.spring.io/actuator/info

json - 在线工具 解析一下

结果:

 例如:

Spring Cloud的其他特点

(1)Spring Cloud组件丰富,功能齐全,适用的环境多。为微服务架构实现提供了较完美的“全家桶”式解决方案。

(2)基于成熟的轻量级的组件,为微服务的实现提供了保障

(3)选型灵活、中立。Spring Cloud组件之间的关系相对独立,并且往往可以对同一问题提供多个解决方案,开发人员可以根据需要选择不同的技术组合来实现微服务开发。

Spring Cloud微服务开发起步

1.配置开发环境

(0)New project

 (1)聚合总父工程名字

 (2)安装Maven并配置好环境变量

(3)工程名字

(4)字符编码

(5)注解生效激活

(6)java编译版本选8

(7)File Type过滤

 2.Project工作空间

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.springcloud</groupId>
    <artifactId>cloud2020</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>cloud-consumer-order80</module>
        <module>cloud-api-commons</module>
        <module>cloud-eureka-server7001</module>
        <module>cloud-eureka-server7002</module>
        <module>cloud-provider-payment8001</module>
        <module>cloud-provider-payment8002</module>
        <module>cloud-provider-payment8004</module>
        <module>cloud-consumerzk-order80</module>
        <module>cloud-providerconsul-payment8006</module>
        <module>cloud-consumerconsul-order80</module>
        <module>cloud-consumer-feign-order80</module>
        <module>cloud-provider-hystrix-payment8001</module>
        <module>cloud-consumer-feign-hystrix-order80</module>
        <module>cloud-consumer-hystrix-dashboard9001</module>
        <module>cloud-gateway-gateway9527</module>
        <module>cloud-config-center-3344</module>
        <module>cloud-config-client-3355</module>
        <module>cloud-config-client-3366</module>
        <module>cloud-stream-rabbitmq-provider8801</module>
        <module>cloud-stream-rabbitmq-consumer8802</module>
        <module>cloud-stream-rabbitmq-consumer8803</module>
        <module>cloudalibaba-provider-payment9001</module>
        <module>cloudalibaba-provider-payment9002</module>
        <module>cloudalibaba-consumer-nacos-order83</module>
        <module>cloudalibaba-config-nacos-client3377</module>
        <module>cloudalibaba-sentinel-service8401</module>
        <module>cloudalibaba-consumer-nacos-order84</module>
        <module>cloudalibaba-provider-payment9003</module>
        <module>cloudalibaba-provider-payment9004</module>
        <module>seata-order-service2001</module>
        <module>seata-storage-service2002</module>
        <module>seata-account-service2003</module>
    </modules>

    <!-- 统一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>

    <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

3.关于微服务开发的一些认识 

(1)认识软件生命周期。

按照软件工程的理论,软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。

软件定义时期通常可进一步划分成问题定义、可行性研究和需求分析3个阶段。

软件开发时期具体设计和实现在前一个时期定义的软件,它通常由总体设计,详细设计,编码和单元测试,综合测试4个阶段组成。

运行维护时期的主要任务是使软件持久地满足用户的需要。通常维护活动包括改正性维护、适应性维护、完善性维护和预防性维护。

(2)认识Spring Cloud响应服务请求的处理顺序

(3)熟悉Spring Cloud微服务开发的步骤

建module

加依赖

配置配置application.yml或者application.properties

加主启动类

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pig Pig Cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值