SpringCloud学习(1)

news2024/12/23 18:38:39

SpringCloud学习

软件架构演进之路

对于单体架构,我们根据设计期和开发实现期的不同模式和划分结构,可以分为:

简单单体模式

代码层面没有拆分,所有的业务逻辑都在一个项目(Project)里打包成一个二进制的编译后文件,通过这个文件进行部署,并提供业务能力;

MVC 模式

系统内每个模块的功能组件按照不同的职责划分为模型(Model)、视图(View)、控制器(Controller)等角色,并以此来组织研发实现工作;

前后端分离模式

将前后端代码耦合的设计改为前端逻辑和后端逻辑独立编写实现的处理模式;

组件模式

系统的每一个模块拆分为一个子项目(SubProject),每个模块独立编译打包成一个组件,然后所有需要的组件一起再部署到同一个容器里;

类库模式

A 系统需要复用 B 系统的某些功能,这时可以直接把 B 系统的某些组件作为依赖库,打包到 A 系统来使用。

分布式架构

我们根据设计期的架构思想和运行期的不同结构,可以分为:

面向服务架构(Service Oriented Architecture):以业务服务的角度和服务总线的方式(一般是 WebService 与 ESB)考虑系统架构和企业 IT 治理;
分布式服务架构(Distributed Service Architecture):基于去中心化的分布式服务框架与技术,考虑系统架构和服务治理;
微服务架构(MicroServices Architecture):微服务架构可以看做是面向服务架构和分布式服务架构的拓展,使用更细粒度的服务(所以叫微服务)和一组设计准则来考虑大规模的复杂系统架构设计。
也有人把如上的各个架构风格总结为四个大的架构发展阶段:

(1)单体架构阶段

比如典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。

1、特点
(1)所有的功能集成在一个项目工程中。
(2)所有的功能打一个war包部署到服务器。
(3)应用与数据库分开部署。
(4)通过部署应用集群和数据库集群来提高系统的性能。
此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

2、优点
项目架构简单,前期开发成本低,周期短,小型项目的首选。

3、缺点
(1)全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
(3)技术栈受限。

(2)垂直架构阶段

1、特点
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时用于加速前端页面开发的Web框架(MVC)是关键。
典型的Java Spring mvc或者Python Django框架的应用。

2、优点
(1)项目架构简单,前期开发成本低,周期短,小型项目的首选。
(2)通过垂直拆分,原来的单体项目不至于无限扩大。
(3)不同的项目可采用不同的技术。

3、缺点
(1)全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
(2)系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。

(3)SOA 架构阶段

1、SOA即面向服务的架构,如dubbo。
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

2、优点
(1)把模块拆分,使用接口通信,降低模块之间的耦合度。
(2)把项目拆分成若干个子项目,不同的团队负责不同的子项目。
(3)增加功能时只需要在增加一个子项目,调用其它系统的接口就可以。
(4)可以灵活的进行分布式部署。

3、缺点
系统之间交互需要使用远程通信,接口开发增加工作量。

(4)微服务架构阶段

微服务是一种架构风格。一个大型的复杂软件应用,由一个或多个微服务组成。系统中的各个微服务可被独立部署,并且各个微服务之间是松耦合的,服务内部是高内聚的。每个微服务仅关注于完成一件任务并很好的完成该任务。

1、特点
(1)将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
(2)微服务遵循单一原则。
(3)微服务之间采用RESTful等轻量协议传输。

2、优点
(1)服务拆分粒度更细,有利于资源重复利用,提高开发效率。
(2)可以更加精准的制定每个服务的优化方案,提高系统可维护性。
(3)微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB(企业级服务总线)更轻量。
(4)适用于互联网时代,产品迭代周期更短。

3、缺点
(1)微服务过多,服务治理成本高,不利于系统维护。
(2)分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

了解Spring Cloud

Spring Cloud 是一系列框架的有序集合

②Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来。

netflix eureka 1.1,alibaba 2.2

③通过 Spring Boot 风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

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

⑤Spring Cloud项目官方网址:https://spring.io/projects/spring-cloud

⑥Spring Cloud
版本命名方式采用了伦敦地铁站的名称,同时根据字母表的顺序来对应版本时间顺序,比如:最早的Release版本:Angel,第二个Release版本:Brixton,然后是Camden、Dalston、Edgware,Finchley,Greenwich,Hoxton。

springCloud与dubbo

在这里插入图片描述

相同点:Spring Cloud 与 Dubbo 都是实现微服务有效的工具。

不同点:

1Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件。

2Dubbo 使用 RPC 通讯协议,Spring Cloud 使用 RESTful 完成通信,Dubbo 效率略高于 Spring
Cloud。

项目搭建

建立父项目

在这里插入图片入描述
在这里插入图片里插图片描述述
[外链图片转存失败,源站可能有防盗设置编码]!链机制,建https://(img-BDblog.csdmg.cn/a0740d462bd642a788ec1be4b3952.pnga331)在这(htstps://img-blog.csdnimg.cn/a0740d462bd642a788e1ca71be4b3952.png)]
同时删除掉src文件夹

增加pom依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

建立eureka-provider子项目

在这里插入图片描述
在这里插入图片描述
增加pom依赖

比如数据库工具等等…

配置文件
application.yaml
在这里插入图片描述

server:
  port: 8000

配置类
更改类名为需要的类名
我使用的是eurekaApplication

package com.learn.eurekaprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class eurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(eurekaApplication.class, args);
    }

}

控制器

package com.learn.eurekaprovider.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping("/get")
    public String getHello(){
        return (new Date()).toString();
    }

}

运行启动类看是否成功
运行结果如下
在这里插入图片描述

在这里插入图片描述

建立eureka-consumer子项目

在这里插入图片描述
在这里插入图片描述
pom

配置文件

server:
  port: 8001

启动类

package com.learn.eurekaconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class eurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(eurekaApplication.class, args);
    }
}

控制器

package com.learn.eurekaconsumer.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@RequestMapping("/good")
public class GetController {
    @GetMapping("/get")
    public String getHello(){
        return (new Date()).toString();
    }
}

启动测试

在这里插入图片描述

使用 RestTemplate 完成远程调用

Spring提供的一种简单便捷的模板类,用于在 java 代码里访问 restful 服务。
其功能与 HttpClient 类似,但是 RestTemplate 实现更优雅,使用更方便。
更改消费者项目中的代码

Controller

package com.learn.eurekaconsumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Date;

@RestController
@RequestMapping("/good")
public class GetController {


    @GetMapping("/get")
    public String getHello(){
        return (new Date()).toString();
    }

    @Autowired
    private RestTemplate restTemplate;
    //远程调用接口
    @GetMapping("/getP")
    public String getProvider(){
        /*
            //远程调用Goods服务中的findOne接口
            使用RestTemplate
            1. 定义Bean  restTemplate
            2. 注入Bean
            3. 调用方法
         */

        String url = "http://localhost:8000/hello/get/";
        String s = restTemplate.getForObject(url, String.class);
        System.out.println(s);
        return s;
    }
}

启动测试
在这里插入图片描述
在这里插入图片描述
远程调用成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​力扣解法汇总2293. 极大极小游戏

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a; 力扣 描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums &#xff0c;其长度是 2 的幂。 对 n…

伪随机码序列

伪随机码又称伪随机序列&#xff0c;是用确定性方法产生的在一段周期内具有类似白噪声的随机特性的二&#xff08;或多&#xff09;进制数据序列。 伪随机序列在码分复用、码分多址和扩频通信中都有重要应用。常用的伪随机序列有m序列、M序列和Gold序列。 作为地址码和扩频码…

pycharm中commit/push撤销+分支合并

一、现在想撤销到打印3怎么操作&#xff1f; 1复制修订号 2鼠标右键 3去项目下执行git bash here&#xff0c;再输入git push -f 4此时&#xff0c;github中的push就已经回退成功&#xff1b;再进行一次新代码的commit和push&#xff0c;master分支的颜色就变成黄色了&#x…

Windows中安装 MySQL8.0.30 数据库

下载安装文件 访问MySQL官网下载安装文件https://downloads.mysql.com/archives/community/。 如下图所示&#xff0c;点击页面中的“DOWNLOAD”按钮。 然后&#xff0c;会出现如下所示页面&#xff0c;点击页面底部的“No thanks, just start my download”&#xff0c;就可…

Vue3商店后台管理系统设计文稿篇(四)

记录使用vscode构建Vue3商店后台管理系统&#xff0c;这是第四篇&#xff0c;主要记录使用git与vscode将代码同步提交到GitHub上面 文章目录一、Git与Github建立连接二、配置开发工具三、实用Git命令仓库相关命令分支相关命令正文内容&#xff1a; 一、Git与Github建立连接 使…

从0到1【建站:AWS+Ubuntu+Python+Django+uwsgi+nginx+ssl】

目录一、创建服务器1、进入AWS官网2、启动实例3、创建新密钥对4、选择密钥对5、网络设置6、配置存储7、启动实例8、查看实例9、配置安全组二、连接服务器1、在AWS官网进行连接2、使用Xshell7进行连接3、设置允许root登录三、域名解析1、进行腾讯云官网2、管理域名解析3、绑定公…

xilinx ZYNQ 7000 XADC 片上模拟转数字模块

上图所示&#xff0c;XADC 属于 PL部分的资源 XADC是一种硬逻辑实现&#xff0c;位于PL功率域。PS- xadc接口是PS的一部分&#xff0c;可以被PS APU访问&#xff0c;而不需要对PL进行编程。PL必须上电才能配置PS-XADC接口、使用PL- jtag或DRP接口以及操作XADC。 上面的机构图能…

通关算法题之 ⌈回溯算法⌋

回溯算法 子集组合排列 78. 子集 给你一个整数数组 nums&#xff0c;数组中的元素互不相同 &#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集&#xff0c;你可以按任意顺序 返回解集。 输入&#xff1a;nums [1,2,3] 输出&…

LeetCode 5. 最长回文子串

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 5. 最长回文子串&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 5…

1590_AURIX_TC275_PMU_Flash的操作

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这里提到的这个复位读取操作&#xff0c;复位的对象其实是当前的操作&#xff0c;也就是命令序列。主要是命令序列的最后一个命令还没有被接收到&#xff0c;都可以被这个命令中断。在复位…

目标检测:特征金字塔网络(Feature Pyramid Network)

目标检测&#xff1a;特征金字塔网络&#xff08;Feature Pyramid Network&#xff09;概述核心思想概述 由于在目标检测任务中&#xff0c;对与大目标的检测&#xff0c;需要feature map每个点的感受野大一点&#xff08;高层语义特征&#xff09;&#xff0c;对于小目标&…

GPIO 八种工作模式及其硬件框图

参考资料: STM32F1xx 官方资料:《STM32中文参考手册V10》- 第 8 章通用和复用功能 IO(GPIO 和 AFIO) GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32 的八种 …

图像融合笔记(一):RFN-Nest

RFN-NestAbstractIntroductionRelated worksThe proposed fusion frameworkThe architecture of the fusion networkTwo-stage training strategy论文&#xff1a; RFN-Nest: An end-to-end residual fusion network for infrared and visible images代码&#xff1a; https://…

[Android Input系统]MotionEvent的序列化传送

这里从云游戏的触控操作看起&#xff0c;PC端的客户端支持按键和鼠标滑动操作&#xff0c;手机上的云游戏客户端则是和手机游戏一样的touch触控&#xff0c;客户端的touch操作是怎样处理给服务端的呢&#xff0c;猜测是把touch操作“实时”的传送给了服务器&#xff0c;Android…

COM,Component Object Model 简介

COM&#xff0c;Component Object Model 简介 1. COM 是什么 COM 的英文全称是&#xff0c;Component Object Model&#xff0c;中文译为&#xff0c;组件对象模型。它官方的概念是&#xff1a; The Microsoft Component Object Model (COM) is a platform-independent, dis…

一个简单、功能完整的开源WMS​仓库管理系统

今天给大家推荐一个简单、功能完整的仓库管理系统。 项目简介 这是基于.NetCore 7、Vue 3开发的开源项目&#xff0c;支持中英文&#xff0c;界面简单清爽&#xff0c;采用前后端分离架构。 该项目主要是针对小型物流仓储供应链流程&#xff0c;采用的技术也都比较新&#x…

Redis基础配置之RDB持久化

测试环境&#xff1a; windows RDB的触发机制 save bgsave flushall 自动触发(配置文件配置) save命令触发&#xff1a; 触发方式 &#xff1a;首先手动删除dump.rdb文件。 当执行save命令时&#xff0c;自动生成dump.rdb文建测试成功 bgsave命令触发&#xff1a; 触…

jsp网络课程管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 网络课程管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用web模式开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

JVM内存组成简介

按照官方的说法&#xff1a;“Java 虚拟机具有一个堆&#xff0c;堆是运行时数据区域&#xff0c;所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存&#xf…

【C语言航路】第十二站:自定义类型:结构体、枚举、联合体

目录 一、结构体 1.结构体的基础知识 2.结构体的声明 3.特殊的声明&#xff08;匿名结构体&#xff09; 4.结构体的自引用 5.结构体变量的定义和初始化 6.结构体的内存对齐 7.修改默认对齐数 8.结构体传参 二、位段 1.什么是位段 2.位段的内存分配 3.位段的跨平台问…