微服务架构概述及创建父子项目

目录

一,什么是单体架构

二,什么是集群和分布式架构

三,什么是微服务架构

四,解决微服务难题的方案Spring-cloud

Spring Cloud Alibaba是阿里巴实现的方案,基于SpringCloud的规范。如果说Spring Cloud Netflix 是 Spring Cloud 的第⼀代实现, 那么Spring Cloud Alibaba 也可以看做是  Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata等组件组成.

五,创建一个微服务项目


单体架构,集群和分布式架构,微服务架构

一,什么是单体架构

在java初学阶段,当自己独立做完一个项目,这个项目的业务功能 控制层 配置层 中间件等等所有的功能集中在一个jar包中,那么这个项目就是单体架构的。

二,什么是集群和分布式架构

1.当一个单体架构的项目的流量和需求逐渐增多时,这个时候单体架构就容易崩溃,为解决这个问题。就可以将个别涉及流量大的功能部署在多个服务器上,多个服务器共同完成这个功能。每个服务器的负载按照负载均衡来调度完成任务。这共同完成一个功能的多个服务器共称为集群。

2.将一个系统拆分为多个小子系统,并且部署在多个服务,不同的服务器承担的任务不同。这个就是分布式

集群和分布式区别与联系?

1.概念上:集群是多个计算机做同样的事情,分布式是多个计算机做不同的事情。

2.功能上:集群的每个节点的功能是相同的,并且有一个节点挂了其他节点可以分担它的工作,整个业务依然可以访问。分布式每个节点的功能不同,一个挂了整个业务将不可访问。

3.关系上:分布式的节点可以是一个集群组成,集群与分布式相互搭配使用。一般不会将两者单独区分。而是统称:分布式架构

三,什么是微服务架构

在一个电商系统中有很多业务代码是重复的。调用的关系也有很多重复的。可以把一些通用的功能封装起来形成独立的基础服务供别人调用,组成一个微小的服务,这就是微服务。

更加通俗地说,把一个微小的服务封装起来独立部署起来。

微服务和分布式架构?

分布式讲究流量压力拆分,流量大的拆开。

微服务讲究功能的拆分,拆成一个个独立功能的整体。

微服务通常是分布式架构,选择微服务就意味着要解决分布式架构的难题。

四,解决微服务难题的方案Spring-cloud

Spring-cloud是分布式微服务架构的一站式解决方案。微服务架构落地的多种技术集合。

虽然SpringCloud包含微服务架构的多种技术,但这些技术大多不是SpringCloud团队开发的,SpringCloud像管家一样把多种技术以SpringCloud规范和SpringBoot风格进行整合起来。但这些技术还是由各个公司维护。

SpringCloud的实现方案主要有以下两种

1.Spring Cloud Netflix

2.Spring Cloud Alibaba

Netflix一直是SpringCloud的默认实现方案,但是在2018年以后Netflix公司宣布停止维护。SpringCloud也给出了替代技术。

Spring Cloud Alibaba是阿里巴实现的方案,基于SpringCloud的规范。如果说Spring Cloud Netflix 是 Spring Cloud 的第⼀代实现, 那么Spring Cloud Alibaba 也可以看做是  Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata等组件组成.
五,创建一个微服务项目

1.服务拆分原则:明确一个服务的最小不可拆分的功能。以便于我们在做一个项目的时不会迷惑到底要拆分哪些服务独立部署。

2.服务自治:每个拆分出来的独立服务都可以独立的开发,测试,运行,部署。

以一个电商系统为例,对于商品的服务应该如何拆分呢,我们平时使用的网购软件关于商品的功能有很多,在订单中,首页中,推荐中等等。这里为演示如何使用SpringCloud解决微服务架构问题,我们不是要做出来一个电商系统为例而是建立项目的架构去模拟项目之间的关系。

一个商品可以出现在订单上,也可以出现在商品的例表上。并且这个业务的功能是独立且可以通过商品的ID联系起来,那么这两个业务就可以使用微服务架构独立部署起来。

3.首先准备模拟数据建立订单表和产品表。

-- 建库
CREATE DATABASE IF NOT EXISTS cloud_order DEFAULT CHARACTER SET utf8mb4;
CREATE DATABASE IF NOT EXISTS cloud_product DEFAULT CHARACTER SET utf8mb4;-- 订单表
DROP TABLE IF EXISTS order_detail;
CREATE TABLE order_detail (`id` INT NOT NULL AUTO_INCREMENT COMMENT '订单id',`user_id` BIGINT(20) NOT NULL COMMENT '用户ID',`product_id` BIGINT(20) NULL COMMENT '产品id',`num` INT(10) NULL DEFAULT 0 COMMENT '下单数量',`price` BIGINT(20) NOT NULL COMMENT '实付款',`delete_flag` TINYINT(4) NULL DEFAULT 0,`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COMMENT = '订单表';-- 数据初始化
INSERT INTO order_detail (user_id, product_id, num, price)
VALUES
(2001, 1001, 1, 99), (2002, 1002, 1, 30), (2001, 1003, 1, 40),
(2003, 1004, 3, 58), (2004, 1005, 7, 85), (2005, 1006, 7, 94);-- 产品表
DROP TABLE IF EXISTS product_detail;
CREATE TABLE product_detail (`id` INT NOT NULL AUTO_INCREMENT COMMENT '产品id',`product_name` VARCHAR(128) NULL COMMENT '产品名称',`product_price` BIGINT(20) NOT NULL COMMENT '产品价格',`state` TINYINT(4) NULL DEFAULT 0 COMMENT '产品状态 0-有效 1-下架',`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id)
) ENGINE = INNODB DEFAULT CHARACTER SET = utf8mb4 COMMENT = '产品表';-- 数据初始化
INSERT INTO product_detail (id, product_name, product_price, state)
VALUES
(1001, "T恤", 101, 0), (1002, "短袖", 30, 0), (1003, "短裤", 44, 0),
(1004, "卫衣", 58, 0), (1005, "马甲", 98, 0), (1006, "羽绒服", 101, 0),
(1007, "冲锋衣", 30, 0), (1008, "袜子", 44, 0), (1009, "鞋子", 58, 0),
(10010, "毛衣", 98, 0);

4.创建一个父项目Spring-cloud-demo

红框里的parent标签内指定SpringBoot的版本为3.1.6,代表这个项目的父项目的版本,切记不能随便使用SpringBoot版本,因为SpringBoot版本和SpringCloud版本是严格对应的。SpringBoot父项目可以让当前项目继承父项目的默认配置以方便管理。

以下是SpringBoot版本和SpringCloud版本对应关系:

Spring Cloud 版本Spring Boot 版本范围备注
2023.0.x (Eureka SRx)Spring Boot 3.2.x最新的 Spring Cloud 版本,适配 Spring Boot 3.2。
2022.0.x (Gateway SRx)Spring Boot 3.1.x适配 Spring Boot 3.1。
2021.0.x (Jubilee)Spring Boot 2.6.x ~ 2.7.x支持 JDK 17,适配 Spring Boot 2.x。
2020.0.x (Ilford)Spring Boot 2.4.x ~ 2.5.x开始支持 JDK 15。
HoxtonSpring Boot 2.2.x经典稳定版本,支持 JDK 8 和 11。
GreenwichSpring Boot 2.1.x与 Spring Boot 2.1 完美搭配。
FinchleySpring Boot 2.0.xSpring Boot 2.0 的标准配置。
DalstonSpring Boot 1.5.x

适配较老的 Spring Boot 版本。

在properties中加入可能会用到的各个依赖的版本,方便以后统一管理父项目和子项目中的依赖版本。

<dependencyManagement>这个标签是声明可能会用到的依赖,这里的依赖不会直接引入到项目中而是以后再<dependency>中声明后才会真正的引用。如果子项目中引用的依赖没有指定版本号则会从父项目中读取<version> 

红框里的标签制定了打包方式是pom不是jar这需要手动调节。

import作用域是一个特殊的范围,它只与pom类型的依赖一起使用。当使用import范围时,Maven会将依赖的POM文件中定义的所有依赖、插件和其他配置导入到当前项目的POM文件中,就像这些配置是直接在当前项目的POM文件中定义的一样

<type>pom</type>:在Maven默认依赖类型是jar,pom表示这是一个父pom文件,需要时,Maven会将父项目依赖和配置导入到子项目中。

5.创建子项目product-service 和 order-service

在这个子项目中引入这些依赖,由于这些依赖在父项目的<dependencyManagement>中都存在,所有子项目会自动导入<dependencyManagement>的依赖,如果已经制定版本号则用子项目自己导入的具体版本号的依赖。

	<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency></dependencies>

创建product-sevice项目

关于pom.xml文件的配置与order-service一样。

6.配置yml文件

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

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

相关文章

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…

量子计算的威胁,以及企业可以采取的措施

当谷歌、IBM、Honeywell和微软等科技巨头纷纷投身量子计算领域时&#xff0c;一场技术军备竞赛已然拉开帷幕。 量子计算虽能为全球数字经济带来巨大价值&#xff0c;但也有可能对相互关联的系统、设备和数据造成损害。这一潜在影响在全球网络安全领域引起了强烈关注。也正因如…

Unity制作游戏——前期准备:Unity2023和VS2022下载和安装配置——附安装包

1.Unity2023的下载和安装配置 &#xff08;1&#xff09;Unity官网下载地址&#xff08;国际如果进不去&#xff0c;进国内的官网&#xff0c;下面以国内官网流程为例子&#xff09; unity中国官网&#xff1a;Unity中国官网 - 实时内容开发平台 | 3D、2D、VR & AR可视化 …

23贪心算法

分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…

Spark 和 Flink

Spark 和 Flink 都是目前流行的大数据处理引擎&#xff0c;但它们在架构设计、应用场景、性能和生态方面有较大区别。以下是详细对比&#xff1a; 1. 架构与核心概念 方面Apache SparkApache Flink计算模型微批&#xff08;Micro-Batch&#xff09;为主&#xff0c;但支持结构…

Android 串口通信

引言 在iot项目中&#xff0c;Android 端总会有和硬件通信。 通信这里&#xff1a;串口通信&#xff0c;蓝牙通信或者局域网通信。 这里讲一下串口通信。 什么是串口&#xff1f; “串口”&#xff08;Serial Port&#xff09;通常是指一种用于与外部设备进行串行通信的接口。…

【计算机网络】OSI模型、TCP/IP模型、路由器、集线器、交换机

一、计算机网络分层结构 计算机网络分层结构 指将计算机网络的功能划分为多个层次&#xff0c;每个层次都有其特定的功能和协议&#xff0c;并且层次之间通过接口进行通信。 分层设计的优势&#xff1a; 模块化&#xff1a;各层独立发展&#xff08;如IPv4→IPv6&#xff0c…

从人机环境系统智能角度看传统IP的全球化二次创作法则

从人机环境系统智能的视角看&#xff0c;传统IP的全球化二次创作法则需结合技术、文化、伦理与环境的复杂协同。这一过程不仅是内容的本土化改编&#xff0c;更是人、机器与环境在动态交互中实现价值共创的体现。 一、人机环境系统智能的底层逻辑与IP二次创作的融合 1、感知层&…

实现 INFINI Console 与 GitHub 的单点登录集成:一站式身份验证解决方案

本文将为您详细解析如何通过 GitHub OAuth 2.0 协议&#xff0c;为 INFINI Console 实现高效、安全的单点登录&#xff08;Single Sign-On, SSO&#xff09;集成。通过此方案&#xff0c;用户可直接使用 GitHub 账户无缝登录 INFINI Console&#xff0c;简化身份验证流程&#…

记一次复杂分页查询的优化历程:从临时表到普通表的架构演进

1. 问题背景 在项目开发中&#xff0c;我们需要实现一个复杂的分页查询功能&#xff0c;涉及大量 IP 地址数据的处理和多表关联。在我接手这个项目的时候,代码是这样的 要知道代码里面的 ipsList 数据可能几万条甚至更多,这样拼接的sql,必然是要内存溢出的,一味地扩大jvm参数不…

C++关键字之mutable

1.介绍 在C中&#xff0c;mutable是一个关键字&#xff0c;用于修饰类的成员变量。它的主要作用是允许在常量成员函数或常量对象中修改被标记为mutable的成员变量。通常情况下&#xff0c;常量成员函数不能修改类的成员变量&#xff0c;但有些情况下&#xff0c;某些成员变量的…

云计算中的API网关是什么?为什么它很重要?

在云计算架构中&#xff0c;API网关&#xff08;API Gateway&#xff09;是一个重要的组件&#xff0c;主要用于管理、保护和优化不同服务之间的接口&#xff08;API&#xff09;通信。简单来说&#xff0c;API网关就像是一个中介&#xff0c;它充当客户端和后端服务之间的“桥…

深搜专题2:组合问题

描述 组合问题就是从n个元素中抽出r个元素(不分顺序且r < &#xff1d; n)&#xff0c; 我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数。 例如n &#xff1d; 5 &#xff0c;r &#xff1d; 3 &#xff0c;所…

uniapp多端适配

UniApp是一个基于Vue.js开发多端应用的框架&#xff0c;它可以让开发者编写一次代码&#xff0c;同时适配iOS、Android、Web等多个平台。 环境搭建&#xff1a; UniApp基于Vue.js开发&#xff0c;所以需要先安装Vue CLI npm install -g vue/cli 创建一个新的UniApp项目&…

Error [ERR_REQUIRE_ESM]: require() of ES Module

报错信息&#xff1a; 【报错】Message.js 导入方式不对&#xff0c;用的是 ES Moudle 的语法&#xff0c;提示使用 import 引入文件 项目开发没有用到 js-message 依赖&#xff0c;是 node-ipc 依赖中用到的 js-message 依赖&#xff0c; node-ipc 中限制 js-message 版本&a…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

CSS通过webkit-scrollbar设置滚动条样式

查看::-webkit-scrollbar-*各项关系 以下图为例&#xff0c;可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度&#xff0c;再设置overflow: auto&#xff0c;最后设置三个webkit属性。 <!DOCTYPE html> <html lang"en">…

自制操作系统前置知识汇编学习

今天要做什么&#xff1f; 为了更好的理解书中内容&#xff0c;需要学习下进制分析和汇编。 汇编语言其实应该叫叫机器指令符号化语言&#xff0c;目前的汇编语言是学习操作系统的基础。 一&#xff1a;触发器 电路触发器的锁存命令默认是断开的&#xff0c;是控制电路触发器…

uCOSIII-移植

一、uCOS移植 1.移植 C/OS-III前&#xff0c;需要获取C/OS-III 的源代码&#xff0c;C/CPU 和 C/LIB 这两个组件的源代码。 2.将获取的uCOSIII源代码添加到工程文件中&#xff1a; ①.uC-CPU/ARM-Cortex-M/ARMv7-M/ARM/cpu_a.asm、uC-CPU\ARM-Cortex-M\ARMv7-M\cpu_c.c 和 uC-…

Windows使用docker部署fastgpt出现的一些问题

文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…