微服務架構概述及創建父子項目

目錄

一,什么是單體架構

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

三,什么是微服務架構

四,解決微服務難題的方案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.pswp.cn/bicheng/71762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71762.shtml
英文地址,請注明出處:http://en.pswp.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一…